/**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('