/**FUNÇÃO QUE ENVIA OS DADOS PARA O CONTROLLER EXECUTAR A TAREFA AOS METODOS POST, PUT E DELETE */ /**O PARAMETRO preencheID FOI CRIADO POIS EM ALGUNS CASOS EU NÃO QUERO QUE SEJA PREENCHIDO O ID, SE NÃO VAI CONFLITAR OS CAMPOS. */ function _EXEC(formID, msg = null, showToast = true, preencheID = true) { let aForm = $("#" + formID); /**OBTERM OS DADOS DO FORMULÁRIO COM ID formID */ //let aData = aForm.serialize(); let aData = new FormData(aForm[0]); // ISSO AQUI FOI FEITO PARA CORRIGIR UM PROBLEMA DE APÓSTOFROS NA GRAVAÇÃO QUE GERAVA ERRO - DENIS 07/03/2024 for (const [key, value] of aData.entries()) { // Verifique se o valor é uma string if (typeof value === "string") { // Remova apóstrofos do valor aData.set(key, value.replace(/'/g, "")); } } let aBtnSubmit = $("#" + formID + 'button*[type="submit"]'); /**VERFIFICA OS CHECKBOX DO FORM E PASSA O VALUE COMO ZERO QUANDO NÃO SELECIONADO */ $("#" + formID + ' *[type="checkbox"]').each(function (index) { /**SÓ PREENCHE SE CHECKED = FALSE */ if (!$(this).prop("checked")) aData.append($(this).prop("name"), "0"); }); /**BUSCA NO FORM SE INPUT COM A PROPRIDADE id-data DEFINIDA */ let aID = aForm .parent() .find("#" + formID + " input*[id-data]") .val(); /**BUSCA O NOME DA TABELA EXIGIDA NA REGRA */ let aTable = aForm.attr("@tab"); if (!isUndefined(aTable)) aTable = aTable.replace("@", ""); else aTable = ""; /**METHODO PADRÃO = POST */ let aMethod = "POST"; /**VERIFICA SE É EDIÇÃO BASEADO NO ID DO FORM LOCALIZADO ACIMA*/ if (!isUndefined(aID) && aID.trim() !== "") aMethod = "PUT"; // $('#'+formID+' :checkbox').each(function(){ // if($(this).is(':checked')){ // } // }); // return false; /**ENVIA OS DADOS PARA O CONTROLLER GRVAAR OS DADOS NO BANCO */ aBtnSubmit.attr("disabled", true); ShowLoad(); return $.ajax({ type: "POST", url: "/" + URL_BASE + "App/Controller/Query/query.controller.php?method=" + aMethod + "&table_name=" + aTable, cache: false, enctype: "multipart/form-data", contentType: false, processData: false, data: aData, success: function (data) { aBtnSubmit.attr("disabled", false); HideLoad(); try { let MsgE = ""; if (data == "" || data == "[]") { MsgE = "Ops, Os dados de gravação retornaram vazio, contate um administrador !!"; OpenModal(MsgE); return '{"erro":"1", "msg":"' + MsgE + '"}'; } else { let OBJ = JSON.parse(data); if (OBJ.erro == 1) { MsgE = 'Ops, Ocorreu um problema durante a gravação. Erro: "; OpenModal(MsgE); return '{"erro":"1", "msg":"' + MsgE + '"}'; } else { /**MARAVILHA, TUDO CERTO !! */ /**SE FOR UM CADASTRO NOVO, ELE JÁ INSERE O ID NO CAMPO E MODIFICA A URL */ if (!isUndefined(OBJ.id)) { if (preencheID) { aForm.parent().find("input*[id-data]").val(OBJ.id); } /**VERIFICA SE JÁ NÃO É UMA EDIÇÃO ANTES DE MODIFICAR A URL */ let aURL = $(location).attr("href").split("/"); if (!$.isNumeric(aURL[aURL.length - 1])) window.history.replaceState( "", document.title, document.URL + "/" + OBJ.id, ); } if (showToast) msg == null ? OpenToast( 'Dados salvos com sucesso', ) : OpenToast(msg); if ($("#inputID").val() != "") $(".nav-link").removeClass("disabled"); return data; } } } catch (error) { console.error(error); aBtnSubmit.attr("disabled", false); HideLoad(); OpenModal("Ops, Ocorreu um comportamento inesperado. MSG: " + error); return '{"erro":"1", "msg":"' + error + '"}'; } }, error: function (e) { console.error(e); OpenModal("Ops, ocorreu um erro durante a gravação. Erro:" + e); return '{"erro":"1", "msg":"' + e + '"}'; }, }); preventDefault(); // return false; } /** END::function _EXEC()*/ /**FUNÇÃO QUE IRÁ PREENCHER DE FORMA DINAMICA OS CADASTROS DE UM FORM APENAS * ENVIANDO COMO PARAMETRO UM JSON COM KEY E VALUE DOS CAMPOS * EX: {"id":"1", "nome":"JOSE", "endereco":"RUA DOS SONHOS"} */ /** */ function _LOAD(aData, idForm = null) { try { /**PERCORRE o ARRAY COM OS DADOS */ $.each(JSON.parse(aData), function (key, item) { var formSeletor = idForm != null ? idForm + " " : ""; /**IDENTIFICA NO FORM SE ENCONTRA O ELEMENTO DESEJADO */ $(formSeletor + "[name$='" + key + "']").each(function () { /**FAZ A IDENTIFICAÇÃO DO TIPO E PREENCHE COM O VALOR */ switch (this.tagName) { case "INPUT": if (key == "senha" || key == "pass") { Cript(item, "D").done((data) => { $(this).val(data).trigger("change"); this.parentElement.classList.add("is-filled"); }); } else { if ($(this).attr("tp") == "data") { if (item != null && item.trim() !== "") { item = item.split("-"); item = item[2] + "/" + item[1] + "/" + item[0]; } } $(this).val(item).trigger("change"); /**REMOVE CHAVES CASO SEJA UM ARRAY */ $(this).val($(this).val().replace("}", "").replace("{", "")); if ($(this).val()) this.parentElement.classList.add("is-filled"); /**AQUI TRATO CHECKBOX QUE NÃO É USADO COMO ARRAY */ if ( $("*[id=" + $(this).attr("name") + "]").attr("type") == "checkbox" && item == 1 ) $("*[id=" + $(this).attr("name") + "]").prop("checked", true); /**VERIFICA O ELEMENTO É LIGADO A GRUPO DE CHECKBOX */ if ( $(this).attr("name").substring(0, 4)?.toUpperCase() == "ARR_" ) { let OBJ = $(this) .val() .replace("}", "") .replace("{", "") .split(","); /**PERCORRE O ARRAY COM OS IDS E PREENCHE OS CAMPOS CORRESPONDENTES */ OBJ.forEach((item) => { let inputCheck = $( "*[id=" + $(this).attr("name") + "_" + item + "]", ); /**CASO O INPUT CHECK SEJA LOCALIZADO, O MESMO É MARCADO COM CHECKED */ if (inputCheck.length) inputCheck.prop("checked", true); }); } } break; case "SELECT": /**COMO ALGUMS COMBOS DEMORAM A SEREM PREENCHIDOS, ABAIXO É TRATADO O RETORNO PARA O TIPO*/ let sTime = 0; let SELECT_LOAD = setInterval(() => { if ($(this).find("option").length > 0 || sTime == 100) { $(this).val(item).trigger("change"); clearInterval(SELECT_LOAD); } sTime++; }, 100); /**SE O SELECT TIVER A PROPRIEDADE parent-element not null, significa que ele depende * DE O ELEMENTO PAI SEJA PREENCHIDO ANTES DESTE, EXEMPLO... * O COMBO MUNICIPIO PRECISA QUE O COMBO ESTADO/UF SEJA PREENCHIDO ANTES, APÓS ESSA AÇÃO * AI SIM O COMBO FILHO RECEBE O VALUE */ let parentElementID = $(this).attr("parent-element"); if (parentElementID) CallBackValue( parentElementID, $(this).attr("id"), item?.toUpperCase(), ); break; case "TEXTAREA": $(this).val(item).trigger("change"); break; } /**IDENTIFICA SE O CAMPO PODE OU NÃO SER EDITADO */ if ($(this).attr("no-edit") && $(this).val() != "") $(this).prop("readonly", true).addClass("disabled"); /**REMOVE O DISABLE DE ABAS QUE SÓ FUNCIONAM EM EDIÇÃO */ if ($("#inputID").val() != "") $(".nav-link").removeClass("disabled"); }); }); } catch (error) { console.error("_LOAD error: " + error); } } /** END::function _LOAD()*/ /**FUNÇÃO QUE ACIONA AJAX E RETORNA OS DADOS DA URL INFORMADA * aURL: ARQUIVO DE REQUISIÇÃO * aDATA: ARQUIVO DE PARAMETROS */ function _GET(aURL, aDATA = "") { return $.ajax({ url: "/" + URL_BASE + aURL, data: aDATA, cache: false, type: "POST", async: false, }); /**COMO UTILIZAR _GET('URL', 'DADOS') .done(function (data) { //done code }) .fail(function () { //fail code }) .always(function () { //some code }); */ preventDefault(); } /** END::function _GET()*/ /**FUNÇÃO PARA CARREGAR SEM REFRESH OS DADOS DE CONSULTAS/RELATÓRIOS UTILIZANDO O DATATABLE */ function _GETDATATABLE(aURL, aDESTINO = "data-table", resolve = () => {}) { $("#data-table").append( '