class GERAL { static listas = []; static agencias = []; static localizacoes = []; static Load_select_agencias(id) { let opcoes = GERAL.agencias; let _html = ''; opcoes.forEach(x => { _html += ''; }); $(id).html(_html); } static Load_localizacoes() { API.get('localizacoes', function (res) { GERAL.localizacoes = JSON.parse(res); GERAL.Nomes_Cem_Sec_Sep(); }); } static Load_select_cem(id, cem, sec, sep, onchange = null) { let opcoes = FUNC.sortByKeyAsc(GERAL.localizacoes.cemiterios, 'titulo'); let _html = ''; opcoes.forEach(x => { _html += ''; }); $('#' + id + '_cem').html(_html); if (cem == null && opcoes[0] != undefined) { cem = opcoes[0].id; } $('#' + id + '_cem').val(cem); $('#' + id + '_sec').html(''); $('#' + id + '_sep').html(''); $('#' + id + '_cem').change(function () { GERAL.OnChange_select_cem(id); if (onchange != null) { onchange(); } }); GERAL.Load_select_sec(id, sec, sep, onchange); } static Load_select_sec(id, sec, sep, onchange) { let cem = $('#' + id + '_cem').val(); let cemiterio = GERAL.localizacoes.cemiterios.find(x => x.id == cem); if (cemiterio == null) { return; } let opcoes = FUNC.sortByKeyAsc(cemiterio.seccoes, 'titulo'); let _html = ''; opcoes.forEach(x => { _html += ''; }); $('#' + id + '_sec').html(_html); $('#' + id + '_sep').html(''); if (sec == null && opcoes[0] != undefined) { sec = opcoes[0].id; } $('#' + id + '_sec').val(sec); $('#' + id + '_sec').change(function () { GERAL.OnChange_select_sec(id); if (onchange != null) { onchange(); } }); GERAL.Load_select_sep(id, sep, onchange); } static Load_select_sep(id, sep, onchange) { let cem = $('#' + id + '_cem').val(); let sec = $('#' + id + '_sec').val(); let cemiterio = GERAL.localizacoes.cemiterios.find(x => x.id == cem); if (cemiterio == null) { return; } let seccao = cemiterio.seccoes.find(x => x.id == sec); if (seccao == null) { return; } let opcoes = FUNC.sortByKeyAsc(seccao.sepulturas, 'codigo'); let _html = ''; opcoes.forEach(x => { _html += ''; }); $('#' + id + '_sep').html(_html); if (sep == null && opcoes[0] != undefined) { sep = opcoes[0].id; } $('#' + id + '_sep').val(sep); $('#' + id + '_sep').change(function () { if (onchange != null) { onchange(); } }); } static OnChange_select_cem(id) { GERAL.Load_select_sec(id, null, null); } static OnChange_select_sec(id) { GERAL.Load_select_sep(id, null); } static carregaListasAcessorias() { GERAL.Load_localizacoes(); GERAL.carregaListas(); } static carregaListas() { API.get('listas', function (res) { GERAL.listas = JSON.parse(res); }); } static carregaAgencias() { API.get('agencias', function (res) { GERAL.agencias = JSON.parse(res); }); } // Função para encontrar o título de um cemitério pelo ID static NomeCemiterio(id) { if (!GERAL.localizacoes || !GERAL.localizacoes.cemiterios) { return null; } const cemiterio = GERAL.localizacoes.cemiterios.find(c => c.id === id); return cemiterio ? cemiterio.titulo : null; } // Função para encontrar o título de uma secção pelo ID static NomeSecao(id) { if (!GERAL.localizacoes || !GERAL.localizacoes.cemiterios) { return null; } for (const cemiterio of GERAL.localizacoes.cemiterios) { const secao = cemiterio.seccoes.find(s => s.id === id); if (secao) return secao.titulo; } return null; } // Função para encontrar o código de uma sepultura pelo ID static NomeSepultura(id) { if (!GERAL.localizacoes || !GERAL.localizacoes.cemiterios) { return null; } for (const cemiterio of GERAL.localizacoes.cemiterios) { for (const secao of cemiterio.seccoes) { const sepultura = secao.sepulturas.find(s => s.id === id); if (sepultura) return sepultura.codigo; } } return null; } static Nomes_Cem_Sec_Sep() { $('.nome-cem').each(function (el) { let nome = GERAL.NomeCemiterio($(this).data('id')); $(this).html(nome); }); $('.nome-sec').each(function (el) { let nome = GERAL.NomeSecao($(this).data('id')); $(this).html(nome); }); $('.nome-sep').each(function (el) { let nome = GERAL.NomeSepultura($(this).data('id')); $(this).html(nome); }); } } class JSpage { static EXEMPLO = class { static ConfigInicial() { } static Config() { } static filtraTabela() { } static afterLoadTabela() { } static NovoItem() { } static AfterGetData() { } static ValidaForm(continua) { continua(); } static ClickItem() { } static AfterSave(res) { } } static CEMITERIOS = class { static estados = ['Livre', 'Regular', 'Irregular', 'Geral', 'Averiguar']; static estadosCSS = ['success', 'primary', 'danger', 'dark', 'warning']; static ConfigInicial() { AUTH.onlyClient(); tabelaConfig.colunas = [ { data: 'titulo', title: 'Nome' }, { data: 'seccoes', title: 'Secções' }, { data: 'sepulturas', title: 'Sepulturas' } ]; tabelaConfig.rowId = 'id'; tabelaConfig.linkTableItem = '/cemiterios/seccoes/'; tabelaConfig.paginacao = false; tabelaConfig.order = [[0, "asc"]]; tabelaConfig.colDefs = []; } static filtraTabela() { } static afterLoadTabela() { } static SECCOES = class { static AfterGetData() { MAPA.InitialConfigCemiterio(); let _link_foto = '/foto/cemiterio/' + dados.id; $('#cemiterio_foto').attr('src', _link_foto); $('#bt_foto_zoom').off('click').click(function () { window.open(_link_foto, '_blank').focus(); }); } } static SEPULTURAS = class { static AfterGetData() { $('#titulo').html(dados.titulo); $('#bt_voltar').off('click').click(function () { let ids = itemID.split('='); LOADPAGES.LoadPageLink('/cemiterios/seccoes/' + ids[0]); }); MAPA.InitialConfigSeccao(); } static DETALHES = class { static ConfigInicial() { GERAL.carregaListasAcessorias(); GERAL.carregaAgencias(); } static AfterGetData() { //FUNC.copiaAltura('body-identificacao', 'body-concessao'); //FUNC.copiaAltura('ficha-foto-col', 'ficha-foto-frame'); defineFoto(); defineLinkAlvara(); defineEstado(); definePodeEnterrar(); JSpage.CEMITERIOS.SEPULTURAS.DETALHES.AVERBAMENTOS.Load(); JSpage.CEMITERIOS.SEPULTURAS.DETALHES.INUMACOES.Load(); JSpage.CEMITERIOS.SEPULTURAS.DETALHES.EXUMACOES.Load(); JSpage.CEMITERIOS.SEPULTURAS.DETALHES.ANEXOS.Load(); JSpage.CEMITERIOS.SEPULTURAS.DETALHES.REQUERIMENTOS.Load(); defineClicks(); function defineEstado() { $('#ficha_estado').html(JSpage.CEMITERIOS.estados[dados.estado]); $("#estado_sep").removeClass(function (index, className) { return (className.match(/(^|\s)alert-\S+/g) || []).join(' '); }); $('#estado_sep').addClass('alert-' + JSpage.CEMITERIOS.estadosCSS[dados.estado]); } function definePodeEnterrar() { $('#podeenterrar').removeClass('active'); if (dados.podeEnterrar == false) { $('#podeenterrar').addClass('active'); $('#txt_ultimoEnterro').addClass('active'); } } function defineLinkAlvara() { let alvara_link = ''; if (dados.identificacao.alvara.ficheiro != '') { alvara_link = ' ' + '' + dados.identificacao.alvara.ficheiro + ''; } else { if (dados.identificacao.alvara.numero != '') { alvara_link = ' ' + '' + dados.identificacao.alvara.numero + '.pdf'; } } $('#txt_alvara_link').html(alvara_link); } function defineFoto() { let _link_foto = '/foto/sepultura/' + dados.id + '?v=' + FUNC.newRand(); $('#ficha_foto_thumb').attr('src', _link_foto); } function defineClicks() { // Remove eventos anteriores antes de adicionar novamente $('#bt_voltar').off('click').click(function () { let ids = itemID.split('='); LOADPAGES.LoadPageLink('/cemiterios/sepulturas/' + ids[0] + '=' + ids[1]); }); $('.identificacao.editar').off('click').click(function () { JSpage.CEMITERIOS.SEPULTURAS.DETALHES.IDENTIFICACAO.Abre(); }); $('#body-identificacao').off('dblclick').dblclick(function () { JSpage.CEMITERIOS.SEPULTURAS.DETALHES.IDENTIFICACAO.Abre(); }); $('#estado_sep').off('click').click(function () { JSpage.CEMITERIOS.SEPULTURAS.DETALHES.IDENTIFICACAO.AbreEstado(); }); $('.concessao.editar').off('click').click(function () { JSpage.CEMITERIOS.SEPULTURAS.DETALHES.CONCESSAO.Abre(); }); $('#body-concessao').off('dblclick').dblclick(function () { JSpage.CEMITERIOS.SEPULTURAS.DETALHES.CONCESSAO.Abre(); }); $('#bt_novo_requerimento,#bt_novo_requerimento1').off('click').click(function () { var ids = itemID.split('='); itemAtual = JSON.parse(JSON.stringify(JSpage.REQUERIMENTOS.NovoItem)); itemAtual.ident_cemiterio_id = ids[0]; itemAtual.ident_cemiterio = dados.identificacao.cemiterio; itemAtual.ident_seccao_id = ids[1]; itemAtual.ident_seccao = dados.identificacao.seccao; itemAtual.ident_sepultura_id = ids[2]; itemAtual.ident_sepultura = dados.identificacao.numero; JSpage.REQUERIMENTOS.AbreNovo(); }); $('#bt_novo_alvara').off('click').click(function () { JSpage.CEMITERIOS.SEPULTURAS.DETALHES.ALVARA.Abre(); }); $('#bt_novo_averbamento').off('click').click(function () { JSpage.CEMITERIOS.SEPULTURAS.DETALHES.AVERBAMENTOS.AbreNovo(); }); $('#bt_nova_inumacao').off('click').click(function () { JSpage.CEMITERIOS.SEPULTURAS.DETALHES.INUMACOES.inumacao_origem = null; JSpage.CEMITERIOS.SEPULTURAS.DETALHES.INUMACOES.AbreNovo(); }); $('#bt_nova_exumacao').off('click').click(function () { JSpage.CEMITERIOS.SEPULTURAS.DETALHES.EXUMACOES.AbreNovo(); }); $('#bt_novo_anexo').off('click').click(function () { JSpage.CEMITERIOS.SEPULTURAS.DETALHES.ANEXOS.AbreNovo(); }); $('#ficha-foto-frame').off('click').click(function () { JSpage.CEMITERIOS.SEPULTURAS.DETALHES.FOTO.Preview(); }); } } static abreFormularios() { //se a querystring open=inumacao estiver presente, abre a inumação let urlParams = new URLSearchParams(window.location.search); if (urlParams.has('open') && urlParams.get('open') == 'inumacao') { let _id = urlParams.get('id'); JSpage.CEMITERIOS.SEPULTURAS.DETALHES.INUMACOES.Editar(_id); //coloca o url sem querystring window.history.pushState("", "", window.location.pathname); } if (urlParams.has('open') && urlParams.get('open') == 'averbamento') { let _id = urlParams.get('id'); itemAtual = JSpage.CEMITERIOS.SEPULTURAS.DETALHES.REQUERIMENTOS.itens.find(x => x.id == _id); JSpage.CEMITERIOS.SEPULTURAS.DETALHES.AVERBAMENTOS.AbreNovoFromRequerimento(itemAtual); //coloca o url sem querystring window.history.pushState("", "", window.location.pathname); } if (urlParams.has('open') && urlParams.get('open') == 'concessao') { let _id = urlParams.get('id'); itemAtual = JSpage.CEMITERIOS.SEPULTURAS.DETALHES.REQUERIMENTOS.itens.find(x => x.id == _id); JSpage.CEMITERIOS.SEPULTURAS.DETALHES.CONCESSAO.Atualizar(itemAtual); //coloca o url sem querystring window.history.pushState("", "", window.location.pathname); } } static FOTO = class { static Preview() { let _html = paginas.find(x => x.Nome == 'cemiterios.sepulturas.detalhes.foto.html').Valor; $('#placer').html(_html); let _link_foto = '/foto/sepultura/' + dados.id + '?v=' + FUNC.newRand(); $('#ficha_foto').attr('src', _link_foto); $('#bt_alterar_foto').off('click').click(function () { JSpage.CEMITERIOS.SEPULTURAS.DETALHES.FOTO.Alterar(); }); $('#bt_foto_reset').off('click').click(function () { JSpage.CEMITERIOS.SEPULTURAS.DETALHES.FOTO.Eliminar(); }); $('#bt_foto_esq').off('click').click(function () { JSpage.CEMITERIOS.SEPULTURAS.DETALHES.FOTO.Rodar('esq'); }); $('#bt_foto_dir').off('click').click(function () { JSpage.CEMITERIOS.SEPULTURAS.DETALHES.FOTO.Rodar('dir'); }); $('#bt_foto_zoom').off('click').click(function () { window.open(_link_foto, '_blank').focus(); }); $('#sepultura-foto').modal('show'); } static Alterar() { $('#ficha_foto').attr('src', '/img/load.gif'); API.putFile('image/jpg', null, 'sepulturas/foto/' + itemID, function (res) { let _link_foto = '/foto/sepultura/' + dados.id + '?v=' + FUNC.newRand(); $('#ficha_foto').attr('src', _link_foto); $('#ficha_foto_thumb').attr('src', _link_foto); }); } static Eliminar() { let confirma = window.confirm("Tem a certeza que pretende eliminar esta Foto?"); if (confirma) { $('#ficha_foto').attr('src', '/img/load.gif'); API.del('sepulturas/foto/' + itemID, null, function (res) { let _link_foto = '/foto/sepultura/' + dados.id + '?v=' + FUNC.newRand(); $('#ficha_foto').attr('src', _link_foto); $('#ficha_foto_thumb').attr('src', _link_foto); }); } } static Rodar(direcao) { $('#ficha_foto').attr('src', '/img/load.gif'); API.put('sepulturas/foto/rodar/' + direcao + '/' + itemID, null, function (res) { let _link_foto = '/foto/sepultura/' + dados.id + '?v=' + FUNC.newRand(); $('#ficha_foto').attr('src', _link_foto); $('#ficha_foto_thumb').attr('src', _link_foto); }); } } static IDENTIFICACAO = class { static Abre() { itemAtual = dados.identificacao; itemAtual.numero = dados.codigo; let _html = paginas.find(x => x.Nome == 'cemiterios.sepulturas.detalhes.identificacao.html').Valor; $('#placer').html(_html); edit_identificacao_tipo(); FUNC.popularFormulario(itemAtual, 'edit_', ''); LOADPAGES.datepicker(); let alvara_link = ''; if (itemAtual.alvara.ficheiro != '') { alvara_link = ' ' + '' + itemAtual.alvara.ficheiro + ''; } $('#edit_alvara_link').html(alvara_link); $('#bt_salva_identificacao').off('click').click(function () { JSpage.CEMITERIOS.SEPULTURAS.DETALHES.IDENTIFICACAO.Salvar(); }); $('#bt_carrega_alvara').off('click').click(function () { JSpage.CEMITERIOS.SEPULTURAS.DETALHES.IDENTIFICACAO.CarregaAlvara(); }); $('#sepultura-identificacao').modal('show'); function edit_identificacao_tipo() { let opcoes = GERAL.listas.filter(x => x.nome == 'Tipos de Sepulturas')[0].dados; let _html = ''; opcoes.forEach(x => { _html += ''; }); $('#edit_tipo').html(_html); } } static CarregaAlvara() { $('#edit_alvara_link').html('loading'); $('#txt_alvara_link').html('loading'); API.putFile('application/pdf', null, 'sepulturas/identificacao/alvara/' + itemID, function (res) { itemAtual.alvara.ficheiro = res; dados.identificacao = itemAtual; let alvara_link = ''; if (itemAtual.alvara.ficheiro != '') { alvara_link = ' ' + '' + itemAtual.alvara.ficheiro + ''; } $('#edit_alvara_link').html(alvara_link); $('#txt_alvara_link').html(alvara_link); }); } static Salvar() { FUNC.popularObjectoFormulario('sepultura-identificacao', itemAtual, 'edit_', ''); itemAtual.alvara.alvara_data = itemAtual.alvara_alvara_data; itemAtual.alvara.numero = itemAtual.alvara_numero; API.put('sepulturas/identificacao/' + itemID, itemAtual, function (res) { if (res == 'OK') { FUNC.fechaModal(); LOADPAGES.dadosObjetosListas(); } else { FUNC.showAlert('danger', res, ''); } }); } static AbreEstado() { let _html = paginas.find(x => x.Nome == 'cemiterios.sepulturas.detalhes.estado.html').Valor; $('#placer').html(_html); $('#sepultura-estado').modal('show'); } static AlteraEstado(i) { dados.estado = i; API.put('sepulturas/estado/' + itemID, dados, function (res) { if (res == 'OK') { FUNC.fechaModal(); JSpage.CEMITERIOS.SEPULTURAS.DETALHES.AfterGetData().defineEstado(); } else { FUNC.showAlert('danger', res, ''); } }); } } static CONCESSAO = class { static requerimento = null; static Abre() { let requerimento = JSpage.CEMITERIOS.SEPULTURAS.DETALHES.CONCESSAO.requerimento; itemAtual = dados.concessao; if (requerimento != null) { if (requerimento.tipo == 'Concessão') { itemAtual.nome = requerimento.requerente.nome; itemAtual.data_concessao = requerimento.data_requerimento; itemAtual.data_nascimento = requerimento.requerente.data_nascimento; itemAtual.ident_civil = requerimento.requerente.doc_numero; itemAtual.estado_civil = requerimento.requerente.estado_civil; itemAtual.nif = requerimento.requerente.nif; itemAtual.cod_postal = requerimento.requerente.cod_postal; itemAtual.morada = requerimento.requerente.morada; itemAtual.localidade = requerimento.requerente.localidade; itemAtual.tel_fixo = ""; itemAtual.tel_movel = ""; } if (requerimento.tipo == 'Transferência') { itemAtual.nome = requerimento.transferencia.prop_novo; itemAtual.data_concessao = requerimento.data_requerimento; itemAtual.data_nascimento = ""; itemAtual.ident_civil = ""; itemAtual.estado_civil = ""; itemAtual.nif = ""; itemAtual.cod_postal = ""; itemAtual.morada = requerimento.transferencia.morada; itemAtual.localidade = ""; itemAtual.tel_fixo = ""; itemAtual.tel_movel = ""; } } let _html = paginas.find(x => x.Nome == 'cemiterios.sepulturas.detalhes.concessao.html').Valor; $('#placer').html(_html); edit_concessao_estado_civil(); FUNC.popularFormulario(itemAtual, 'edit_', ''); LOADPAGES.datepicker(); $('#sepultura-concessao').modal('show'); $('#bt_salva_concessao').off('click').click(function () { JSpage.CEMITERIOS.SEPULTURAS.DETALHES.CONCESSAO.Salvar(); }); function edit_concessao_estado_civil() { let opcoes = GERAL.listas.filter(x => x.nome == 'Lista Estados Civil')[0].dados; let _html = ''; opcoes.forEach(x => { _html += ''; }); $('#edit_estado_civil').html(_html); } } static Salvar() { FUNC.popularObjectoFormulario('sepultura-concessao', itemAtual, 'edit_', ''); API.put('sepulturas/concessao/' + itemID, itemAtual, function (res) { if (res == 'OK') { FUNC.fechaModal(); LOADPAGES.dadosObjetosListas(); } else { FUNC.showAlert('danger', res, ''); } }); } static Atualizar(req) { JSpage.CEMITERIOS.SEPULTURAS.DETALHES.CONCESSAO.requerimento = req; JSpage.CEMITERIOS.SEPULTURAS.DETALHES.CONCESSAO.Abre(); } } static AVERBAMENTOS = class { static Load() { $('#table-averbamentos thead').removeClass('hidden'); let itens = dados.averbamentos; let _html = ''; itens.forEach(el => { let _modelo = paginas.find(x => x.Nome == 'cemiterios.sepulturas.detalhes.averbamento_linha.html').Valor; el.sujeito_ativo_nascimento = FUNC.trataApenasData(el.sujeito_ativo_nascimento); _html = FUNC.popularHtml(_modelo, el) + _html; }); if (dados.averbamentos.length < 1) { _html = 'Não foram encontrados registos.'; $('#table-averbamentos thead').addClass('hidden'); } $('#table-averbamentos tbody').html(_html); } static Toggle(id) { $('#averbamento_plus_' + id).toggleClass('show'); $('#averbamento_' + id).toggleClass('show'); } static Editar(id) { itemAtual = dados.averbamentos.find(x => x.id == id); let _html = paginas.find(x => x.Nome == 'cemiterios.sepulturas.detalhes.averbamento_editar.html').Valor; $('#placer').html(_html); FUNC.popularFormulario(itemAtual, 'edit_', ''); LOADPAGES.datepicker(); $('#editar-averbamento').modal('show'); } static Salvar() { FUNC.popularObjectoFormulario('editar-averbamento', itemAtual, 'edit_', ''); API.put('sepulturas/averbamento/' + itemID, itemAtual, function (res) { if (res == 'OK') { FUNC.fechaModal(); LOADPAGES.dadosObjetosListas(); } else { FUNC.showAlert('danger', res, ''); } }); } static AbreNovo() { let _html = paginas.find(x => x.Nome == 'cemiterios.sepulturas.detalhes.averbamento_novo.html').Valor; $('#placer').html(_html); API.get('sepulturas/averbamentos/proximo-numero/' + ano, function (res) { $('#novo_numero').val(ano + '/' + res); $('#novo_data').val(today); $('#novo_data_reunião').val(today); LOADPAGES.datepicker(); $('#novo-averbamento').modal('show'); }); } static SalvarNovo() { let novo = { 'id': '', 'data': '', 'data_reunião': '', 'numero': '', 'sujeito_ativo_nome': '', 'sujeito_ativo_nif': '', 'sujeito_ativo_ident_civil': '', 'sujeito_ativo_morada': '', 'sujeito_ativo_cod_postal': '', 'sujeito_ativo_localidade': '', 'sujeito_ativo_nascimento': '', 'sujeito_ativo_parentalidade': '', 'taxa_num': '', 'taxa_txt': '', 'obs': '', 'ficheiro': '', 'html': '', 'concessao_atual': { 'nome': '', 'data_nascimento': '', 'estado_civil': '', 'ident_civil': '', 'nif': '', 'morada': '', 'cod_postal': '', 'localidade': '', 'tel_fixo': '', 'tel_movel': '', 'data_concessao': '' } }; FUNC.popularObjectoFormulario('novo-averbamento', novo, 'novo_', ''); API.post('sepulturas/averbamento/' + itemID, novo, function (res) { if (res == 'OK') { FUNC.fechaModal(); LOADPAGES.dadosObjetosListas(); } else { FUNC.showAlert('danger', res, ''); } }); } static NovoAnexo(id) { API.putFile('application/pdf', null, 'sepulturas/averbamento/doc/' + itemID + '=' + id, function (res) { LOADPAGES.dadosObjetosListas(); }); } static AbreEliminar(id) { itemAtual = dados.averbamentos.find(x => x.id == id); let _html = paginas.find(x => x.Nome == 'cemiterios.sepulturas.detalhes.averbamento_eliminar.html').Valor; $('#placer').html(_html); $('#eliminar-averbamento').modal('show'); } static Eliminar() { API.del('sepulturas/averbamento/' + itemID + '=' + itemAtual.id, null, function (res) { if (res == 'OK') { FUNC.fechaModal(); LOADPAGES.dadosObjetosListas(); FUNC.showAlert('info', 'Averbamento eliminado com sucesso!', ''); } else { FUNC.showAlert('danger', res, ''); } }); } static Preview() { let nome = itemAtual.numero + '.pdf'; nome = FUNC.replaceAll(nome, '/', '-'); window.open('/pdf/averbamento/' + itemID + '=' + itemAtual.id + '/Averbamento-' + nome, janela_docs); } static AbreNovoFromRequerimento(requerimento) { let _html = paginas.find(x => x.Nome == 'cemiterios.sepulturas.detalhes.averbamento_novo.html').Valor; $('#placer').html(_html); API.get('sepulturas/averbamentos/proximo-numero/' + ano, function (res) { $('#novo_numero').val(ano + '/' + res); $('#novo_data').val(today); $('#novo_data_reunião').val(today); $('#novo_sujeito_ativo_cod_postal').val(requerimento.requerente.cod_postal); $('#novo_sujeito_ativo_ident_civil').val(requerimento.requerente.doc_numero); $('#novo_sujeito_ativo_localidade').val(requerimento.requerente.localidade); $('#novo_sujeito_ativo_morada').val(requerimento.requerente.morada); $('#novo_sujeito_ativo_nif').val(requerimento.requerente.nif); $('#novo_sujeito_ativo_nome').val(requerimento.requerente.nome); $('#novo_sujeito_ativo_parentalidade').val(requerimento.requerente.parentalidade); $('#novo_sujeito_ativo_nascimento').val(requerimento.requerente.data_nascimento); $('#novo_taxa_num').val(requerimento.taxa_num); $('#novo_taxa_txt').val(requerimento.taxa_txt); LOADPAGES.datepicker(); $('#novo-averbamento').modal('show'); }); } } static INUMACOES = class { static Load() { $('#table-inumacoes thead').removeClass('hidden'); let itens = dados.inumacoes; let _html = ''; itens.forEach(el => { let _modelo = paginas.find(x => x.Nome == 'cemiterios.sepulturas.detalhes.inumacao_linha.html').Valor; //el.sujeito_ativo_nascimento = FUNC.trataApenasData(el.sujeito_ativo_nascimento); _html = FUNC.popularHtml(_modelo, el) + _html; if (el.estado == 'Exumação') { _html = FUNC.replaceAll(_html, '{estado-exumado}', 'text-danger'); _html = FUNC.replaceAll(_html, '{exumado}', ''); _html = FUNC.replaceAll(_html, '{exumado-texto}', 'Exumado'); _html = FUNC.replaceAll(_html, '{botao-exumacao}', 'hidden'); } else { if (el.estado == 'Trasladação') { _html = FUNC.replaceAll(_html, '{estado-exumado}', 'text-danger'); _html = FUNC.replaceAll(_html, '{exumado}', ''); _html = FUNC.replaceAll(_html, '{exumado-texto}', 'Trasladado'); _html = FUNC.replaceAll(_html, '{botao-exumacao}', 'hidden'); } else { _html = FUNC.replaceAll(_html, '{estado-exumado}', ''); _html = FUNC.replaceAll(_html, '{exumado}', 'hidden'); _html = FUNC.replaceAll(_html, '{exumado-texto}', ''); _html = FUNC.replaceAll(_html, '{botao-exumacao}', ''); } } let agencia_nome = ''; if (el.agencia > -1) { if (GERAL.agencias[el.agencia] != undefined) { agencia_nome = GERAL.agencias[el.agencia].nome; } } _html = FUNC.replaceAll(_html, '{agencia_nome}', agencia_nome); }); if (dados.inumacoes.length < 1) { _html = 'Não foram encontrados registos.'; $('#table-inumacoes thead').addClass('hidden'); } $('#table-inumacoes tbody').html(_html); } static Toggle(id) { $('#inumacao_plus_' + id).toggleClass('show'); $('#inumacao_' + id).toggleClass('show'); } static Editar(id) { itemAtual = dados.inumacoes.find(x => x.id == id); let _html = paginas.find(x => x.Nome == 'cemiterios.sepulturas.detalhes.inumacao_editar.html').Valor; $('#placer').html(_html); GERAL.Load_select_agencias('#edit_agencia'); FUNC.popularFormulario(itemAtual, 'edit_', ''); $('#fundura' + itemAtual.fundura).prop("checked", true); LOADPAGES.datepicker(); $('#editar-inumacao').modal('show'); } static Salvar() { FUNC.popularObjectoFormulario('editar-inumacao', itemAtual, 'edit_', ''); let fundura = document.querySelector('input[name="edit_fundura"]:checked').value; itemAtual.fundura = fundura; API.put('sepulturas/inumacao/' + itemID, itemAtual, function (res) { if (res == 'OK') { FUNC.fechaModal(); LOADPAGES.dadosObjetosListas(); } else { FUNC.showAlert('danger', res, ''); } }); } static AbreNovo() { let _html = paginas.find(x => x.Nome == 'cemiterios.sepulturas.detalhes.inumacao_nova.html').Valor; $('#placer').html(_html); GERAL.Load_select_agencias('#novo_agencia'); LOADPAGES.datepicker(); $('#nova-inumacao').modal('show'); } static SalvarNovo() { let novo = { "id": "", "estado": "", "defunto": "", "fundura": 1, "agencia": -1, "nascimento": "", "falecimento": "", "enterramento": "", "boletim": "", "boletim_guid": "", "requerimento": "", "requerimento_guid": "", "declaracao": "", "declaracao_guid": "", "defunto_data": "" }; FUNC.popularObjectoFormulario('nova-inumacao', novo, 'novo_', ''); API.post('sepulturas/inumacao/' + itemID, novo, function (res) { FUNC.fechaModal(); LOADPAGES.dadosObjetosListas(); }); } static AnexaBoletim() { $('#edit_boletim').html('loading'); API.putFile('application/pdf', null, 'sepulturas/inumacao/boletim/' + itemID + '=' + itemAtual.id, function (res) { $('#edit_boletim').html(res); LOADPAGES.dadosObjetosListas(); }); } static AnexaRequerimento() { $('#edit_requerimento').html('loading'); API.putFile('application/pdf', null, 'sepulturas/inumacao/requerimento/' + itemID + '=' + itemAtual.id, function (res) { $('#edit_requerimento').html(res); LOADPAGES.dadosObjetosListas(); }); } static AbreEliminar(id) { itemAtual = dados.inumacoes.find(x => x.id == id); let _html = paginas.find(x => x.Nome == 'cemiterios.sepulturas.detalhes.inumacao_eliminar.html').Valor; $('#placer').html(_html); $('#eliminar-inumacao').modal('show'); } static Eliminar(id) { API.del('sepulturas/inumacao/' + itemID + '=' + itemAtual.id, null, function (res) { if (res == 'OK') { FUNC.fechaModal(); LOADPAGES.dadosObjetosListas(); FUNC.showAlert('info', 'Enterramento/Inumação eliminada com sucesso!', ''); } else { FUNC.showAlert('danger', res, ''); } }); } static Exumacao(id) { JSpage.CEMITERIOS.SEPULTURAS.DETALHES.EXUMACOES.inumacao_origem = dados.inumacoes.find(x => x.id == id); JSpage.CEMITERIOS.SEPULTURAS.DETALHES.EXUMACOES.AbreNovo(); } } static EXUMACOES = class { static inumacao_origem = null; static Load() { $('#table-exumacoes thead').removeClass('hidden'); let itens = dados.exumacoes; let _html = ''; itens.forEach(el => { let _modelo = paginas.find(x => x.Nome == 'cemiterios.sepulturas.detalhes.exumacao_linha.html').Valor; _html = FUNC.popularHtml(_modelo, el) + _html; let destino_txt = el.destino; if (el.tipo == 'Trasladação') { destino_txt = '
' + '
' + ''; } _html = FUNC.replaceAll(_html, '{destino_txt}', destino_txt); }); if (dados.exumacoes.length < 1) { _html = 'Não foram encontrados registos.'; $('#table-exumacoes thead').addClass('hidden'); } $('#table-exumacoes tbody').html(_html); GERAL.Nomes_Cem_Sec_Sep(); } static Toggle(id) { $('#exumacao_plus_' + id).toggleClass('show'); $('#exumacao_' + id).toggleClass('show'); } static Editar(id) { itemAtual = dados.exumacoes.find(x => x.id == id); let _html = paginas.find(x => x.Nome == 'cemiterios.sepulturas.detalhes.exumacao_editar.html').Valor; $('#placer').html(_html); FUNC.popularFormulario(itemAtual, 'edit_', ''); if (itemAtual.tipo == 'Trasladação') { $('#edit_tipo_trasladacao').prop('checked', 'checked'); } JSpage.CEMITERIOS.SEPULTURAS.DETALHES.EXUMACOES.define_exumacao_tipo('edit'); $('input[type=radio][name=edit_tipo]').change(function () { JSpage.CEMITERIOS.SEPULTURAS.DETALHES.EXUMACOES.define_exumacao_tipo('edit'); }); if (itemAtual.tipo == 'Trasladação') { GERAL.Load_select_cem('edit_destino', itemAtual.destino_cem_id, itemAtual.destino_sec_id, itemAtual.destino_sep_id); } LOADPAGES.datepicker(); $('#editar-exumacao').modal('show'); } static Salvar() { FUNC.popularObjectoFormulario('editar-exumacao', itemAtual, 'edit_', ''); itemAtual.tipo = document.querySelector('input[name="edit_tipo"]:checked').value; itemAtual.destino_cem_id = itemAtual.destino_cem; itemAtual.destino_sec_id = itemAtual.destino_sec; itemAtual.destino_sep_id = itemAtual.destino_sep; if (itemAtual.destino_cem_id == null) { itemAtual.destino_cem_id = ''; } if (itemAtual.destino_sec_id == null) { itemAtual.destino_sec_id = ''; } if (itemAtual.destino_sep_id == null) { itemAtual.destino_sep_id = ''; } API.put('sepulturas/exumacao/' + itemID, itemAtual, function (res) { if (res == 'OK') { JSpage.CEMITERIOS.SEPULTURAS.DETALHES.EXUMACOES.AtualizaInumacaoDestino(itemAtual); FUNC.fechaModal(); LOADPAGES.dadosObjetosListas(); } else { FUNC.showAlert('danger', res, ''); } }); } static AbreNovo() { let _html = paginas.find(x => x.Nome == 'cemiterios.sepulturas.detalhes.exumacao_nova.html').Valor; $('#placer').html(_html); LOADPAGES.datepicker(); JSpage.CEMITERIOS.SEPULTURAS.DETALHES.EXUMACOES.define_exumacao_tipo('novo'); $('input[type=radio][name=novo_tipo]').change(function () { JSpage.CEMITERIOS.SEPULTURAS.DETALHES.EXUMACOES.define_exumacao_tipo('novo'); }); let inumacao_origem = JSpage.CEMITERIOS.SEPULTURAS.DETALHES.EXUMACOES.inumacao_origem; if (inumacao_origem != null) { $('#novo_nome').val(inumacao_origem.defunto); $('#novo_data_inumacao').val(inumacao_origem.enterramento); } GERAL.Load_select_cem('novo_destino', null, null, null); $('#nova-exumacao').modal('show'); } static SalvarNovo() { let novo = { "id": "", "nome": "", "data_inumacao": "", "data_aviso": "", "requerimento": "", "requerimento_guid": "", "declaracao": "", "declaracao_guid": "", "data_exumacao": "", "destino": "", "tipo": "", "inumacao_origem_id": "", "inumacao_destino_id": "", "destino_cem_id": "", "destino_sec_id": "", "destino_sep_id": "" }; FUNC.popularObjectoFormulario('nova-exumacao', novo, 'novo_', ''); novo.tipo = document.querySelector('input[name="novo_tipo"]:checked').value; if (novo.tipo == 'Exumação') { novo.destino_cem = ""; novo.destino_sec = ""; novo.destino_sep = ""; } else { if (novo.destino_sep == null) { FUNC.showAlert('danger', 'Selecione uma sepultura de destino!', ''); return; } } novo.destino_cem_id = novo.destino_cem; novo.destino_sec_id = novo.destino_sec; novo.destino_sep_id = novo.destino_sep; let inumacao_origem = JSpage.CEMITERIOS.SEPULTURAS.DETALHES.EXUMACOES.inumacao_origem; if (inumacao_origem != null) { novo.inumacao_origem_id = inumacao_origem.id; } API.post('sepulturas/exumacao/' + itemID, novo, function (res) { FUNC.fechaModal(); LOADPAGES.dadosObjetosListas(); JSpage.CEMITERIOS.SEPULTURAS.DETALHES.EXUMACOES.DefineExumado(res); }); } static DefineExumado(exumacao) { let inumacao_origem = JSpage.CEMITERIOS.SEPULTURAS.DETALHES.EXUMACOES.inumacao_origem; if (inumacao_origem != null) { inumacao_origem.estado = exumacao.tipo; //grava inumaçao origem API.put('sepulturas/inumacao/' + itemID, inumacao_origem, function (res) { if (res == 'OK') { LOADPAGES.dadosObjetosListas(); } else { FUNC.showAlert('danger', res, ''); } }); if (exumacao.tipo == "Trasladação") { let texto = "ATENÇÃO!\nPretende criar uma nova Inumação na sepultura de destino?"; let confirma = window.confirm(texto); if (confirma) { //TODO define os dados da inumacao destino JSpage.CEMITERIOS.SEPULTURAS.DETALHES.EXUMACOES.CriaInumacaoDestino(exumacao, inumacao_origem); } } } } static CriaInumacaoDestino(exumacao, inumacao_origem) { let _itemID = exumacao.destino_cem_id + '=' + exumacao.destino_sec_id + '=' + exumacao.destino_sep_id; let nova_inumacao = inumacao_origem; nova_inumacao.enterramento = exumacao.data_exumacao; nova_inumacao.estado = ""; nova_inumacao.fundura = 1; //grava nova inumação API.post('sepulturas/inumacao/' + _itemID, nova_inumacao, function (res) { //atualiza a o id da inumacao_destino na atual exumação exumacao.inumacao_destino_id = res.id; //grava atualização da exumação atual API.put('sepulturas/exumacao/' + itemID, exumacao, function (res) { //muda de sepultura e abre oara edição a nova inumação let activateLinksOld = activateLinks; activateLinks = false; LOADPAGES.LoadPageLink('/cemiterios/sepulturas/detalhes/' + _itemID + '?open=inumacao&id=' + exumacao.inumacao_destino_id); activateLinks = activateLinksOld; }); }); } static AtualizaInumacaoDestino(exumacao) { if (exumacao.inumacao_destino_id != "") { let texto = "ATENÇÃO!\nPretende editar/atualizar os dados na Inumação na sepultura de destino?"; let confirma = window.confirm(texto); if (confirma) { let _itemID = exumacao.destino_cem_id + '=' + exumacao.destino_sec_id + '=' + exumacao.destino_sep_id; let activateLinksOld = activateLinks; activateLinks = false; LOADPAGES.LoadPageLink('/cemiterios/sepulturas/detalhes/' + _itemID + '?open=inumacao&id=' + exumacao.inumacao_destino_id); activateLinks = activateLinksOld; } } } static AnexaDeclaracao() { $('#edit_declaracao').html('loading'); API.putFile('application/pdf', null, 'sepulturas/exumacao/declaracao/' + itemID + '=' + itemAtual.id, function (res) { $('#edit_declaracao').html(res); LOADPAGES.dadosObjetosListas(); }); } static AnexaRequerimento() { $('#edit_requerimento').html('loading'); API.putFile('application/pdf', null, 'sepulturas/exumacao/requerimento/' + itemID + '=' + itemAtual.id, function (res) { $('#edit_requerimento').html(res); LOADPAGES.dadosObjetosListas(); }); } static AbreEliminar(id) { itemAtual = dados.exumacoes.find(x => x.id == id); let _html = paginas.find(x => x.Nome == 'cemiterios.sepulturas.detalhes.exumacao_eliminar.html').Valor; $('#placer').html(_html); $('#eliminar-exumacao').modal('show'); } static Eliminar(id) { API.del('sepulturas/exumacao/' + itemID + '=' + itemAtual.id, null, function (res) { if (res == 'OK') { FUNC.fechaModal(); LOADPAGES.dadosObjetosListas(); FUNC.showAlert('info', itemAtual.tipo + ' eliminada com sucesso!', ''); } else { FUNC.showAlert('danger', res, ''); } }); } static define_exumacao_tipo(prefixo) { let _tipo = document.querySelector('input[name="' + prefixo + '_tipo"]:checked').value; if (_tipo == 'Exumação') { $('#' + prefixo + '_destino_exumacao').removeClass('hidden'); $('#' + prefixo + '_destino_trasladacao').addClass('hidden'); } else { $('#' + prefixo + '_destino_exumacao').addClass('hidden'); $('#' + prefixo + '_destino_trasladacao').removeClass('hidden'); } } } static ANEXOS = class { static Load() { $('#table-anexos thead').removeClass('hidden'); let itens = dados.anexos; let _html = ''; itens.forEach(el => { let _modelo = paginas.find(x => x.Nome == 'cemiterios.sepulturas.detalhes.anexo_linha.html').Valor; _html = FUNC.popularHtml(_modelo, el) + _html; }); $('#table-anexos tbody').html(_html); } static Toggle(id) { $('#anexo_plus_' + id).toggleClass('show'); $('#anexo_' + id).toggleClass('show'); } static Editar(id) { itemAtual = dados.anexos.find(x => x.id == id); let _html = paginas.find(x => x.Nome == 'cemiterios.sepulturas.detalhes.anexo_editar.html').Valor; $('#placer').html(_html); FUNC.popularFormulario(itemAtual, 'edit_', ''); LOADPAGES.datepicker(); $('#editar-anexo').modal('show'); } static Salvar() { FUNC.popularObjectoFormulario('editar-anexo', itemAtual, 'edit_', ''); API.put('sepulturas/anexo/' + itemID, itemAtual, function (res) { if (res == 'OK') { FUNC.fechaModal(); LOADPAGES.dadosObjetosListas(); } else { FUNC.showAlert('danger', res, ''); } }); } static AbreNovo() { let _html = paginas.find(x => x.Nome == 'cemiterios.sepulturas.detalhes.anexo_novo.html').Valor; $('#placer').html(_html); $('#novo_data').val(today); LOADPAGES.datepicker(); $('#novo-anexo').modal('show'); } static SalvarNovo() { let novo = { "id": "", "data": "", "nome": "", "obs": "", "doc": "", "doc_guid": "" }; FUNC.popularObjectoFormulario('novo-anexo', novo, 'novo_', ''); API.post('sepulturas/anexo/' + itemID, novo, function (res) { if (res == 'OK') { FUNC.fechaModal(); LOADPAGES.dadosObjetosListas(); } else { FUNC.showAlert('danger', res, ''); } }); } static AnexaFicheiro() { $('#edit_doc').html('loading'); API.putFile('application/pdf', null, 'sepulturas/anexo/ficheiro/' + itemID + '=' + itemAtual.id, function (res) { $('#edit_doc').html(res); LOADPAGES.dadosObjetosListas(); }); } static AbreEliminar(id) { itemAtual = dados.anexos.find(x => x.id == id); let _html = paginas.find(x => x.Nome == 'cemiterios.sepulturas.detalhes.anexo_eliminar.html').Valor; $('#placer').html(_html); $('#eliminar-anexo').modal('show'); } static Eliminar(id) { API.del('sepulturas/anexo/' + itemID + '=' + itemAtual.id, null, function (res) { if (res == 'OK') { FUNC.fechaModal(); LOADPAGES.dadosObjetosListas(); FUNC.showAlert('info', 'Anexo eliminado com sucesso!', ''); } else { FUNC.showAlert('danger', res, ''); } }); } } static ALVARA = class { static Abre() { if (dados.identificacao.alvara.numero == '') { let confirm = window.confirm("Pretende criar um novo Alvará?"); if (confirm) { abreModal(true); } else { abreModal(false); } } else { abreModal(false); } function abreModal(novo) { itemAtual = dados.identificacao.alvara; let _html = paginas.find(x => x.Nome == 'cemiterios.sepulturas.detalhes.alvara.html').Valor; $('#placer').html(_html); if (novo) { API.get('sepulturas/alvara/novo', function (res) { itemAtual.numero = res; FUNC.popularFormulario(itemAtual, 'edit_', ''); LOADPAGES.datepicker(); $('#sepultura-alvara').modal('show'); defineClicks(); }); } else { FUNC.popularFormulario(itemAtual, 'edit_', ''); LOADPAGES.datepicker(); $('#sepultura-alvara').modal('show'); defineClicks(); } } function defineClicks() { $('#bt_salvar_alvara').off('click').click(function () { JSpage.CEMITERIOS.SEPULTURAS.DETALHES.ALVARA.Salvar() }); $('#bt_imprimir_alvara').off('click').click(function () { JSpage.CEMITERIOS.SEPULTURAS.DETALHES.ALVARA.Imprimir() }); $('#bt_regularizar_alvara').off('click').click(function () { JSpage.CEMITERIOS.SEPULTURAS.DETALHES.ALVARA.Regularizar() }); } } static Salvar() { FUNC.popularObjectoFormulario('sepultura-alvara', itemAtual, 'edit_', ''); API.put('sepulturas/alvara/' + itemID, itemAtual, function (res) { if (res == 'OK') { FUNC.showAlert('success', 'Dados gravados com sucesso!', ''); LOADPAGES.dadosObjetosListas(); } else { FUNC.showAlert('danger', res, ''); } }); //Pretende gravar um novo alvará em PDF sem assinatura? //Este ficheiro irá sobrepor o que foi gravado anteriormente. //Confirma esta operação? //Sim Não } static Imprimir() { let nome = dados.identificacao.alvara.numero + '.pdf'; nome = FUNC.replaceAll(nome, '/', '-'); window.open('/pdf/alvara/' + itemID + '/Alvara-' + nome, janela_docs); } static Regularizar() { let nome = itemAtual.numero + '.pdf'; nome = FUNC.replaceAll(nome, '/', '-'); window.open('/pdf/alvara-2a-via/' + itemID + '/Alvara-2a-VIA-' + nome, janela_docs); } } static REQUERIMENTOS = class { static itens = []; static Load() { $('#table-requerimentos thead').removeClass('hidden'); API.get('requerimentos/' + itemID, function (res) { JSpage.CEMITERIOS.SEPULTURAS.DETALHES.REQUERIMENTOS.itens = JSON.parse(res); let _html = ''; let _index = 0; JSpage.CEMITERIOS.SEPULTURAS.DETALHES.REQUERIMENTOS.itens.forEach(el => { let _modelo = paginas.find(x => x.Nome == 'cemiterios.sepulturas.detalhes.requerimento_linha.html').Valor; _modelo = FUNC.replaceAll(_modelo, '{requerente}', el.requerente.nome); _modelo = FUNC.replaceAll(_modelo, '{index}', _index); _index++; _html = FUNC.popularHtml(_modelo, el) + _html; }); if (JSpage.CEMITERIOS.SEPULTURAS.DETALHES.REQUERIMENTOS.itens.length < 1) { _html = 'Não foram encontrados registos.'; $('#table-requerimentos thead').addClass('hidden'); } $('#table-requerimentos tbody').html(_html); JSpage.CEMITERIOS.SEPULTURAS.DETALHES.abreFormularios(); }); } static Editar(index) { itemAtual = JSpage.CEMITERIOS.SEPULTURAS.DETALHES.REQUERIMENTOS.itens[index]; JSpage.REQUERIMENTOS.gravado = true; JSpage.REQUERIMENTOS.Editar(); } } } } } static SEARCH = class { static ConfigInicial() { tabelaConfig.colunas = [ { data: 'tipo', title: 'Tipo', render: function (data, type, row) { if (data == 'concessao') { return 'Concessão'; } else { return 'Inumação'; } } }, { data: 'data_alvara', title: 'Data' }, { data: 'ident', title: 'Local' }, { data: 'nome', title: 'Nome' } ]; tabelaConfig.functionClick = true; tabelaConfig.paginacao = true; tabelaConfig.rowId = 'id'; tabelaConfig.colDefs = [ { width: '80px', targets: [0] }, { width: '80px', targets: [1] }, { width: '300px', targets: [2] } ]; } static Config() { let nome = FUNC.getParameterByName('nome'); let ignorar = FUNC.getParameterByName('ignorar'); let tipo = FUNC.getParameterByName('tipo'); $('#nome').val(nome); if (ignorar == 'true') { // coloca #ignorar_datas cheched $('#ignorar_datas').prop('checked', true); } else { if (ignorar == 'false') { $('#ignorar_datas').prop('checked', false); } else { ignorar = 'false'; $('#ignorar_datas').prop('checked', false); let newurl = FUNC.updateQueryStringParameter(window.location.href, 'ignorar', ignorar); FUNC.mudaURL(newurl); } } //se tipo for vazio checkar o radio name=tipo value=ambas if (tipo == '') { $('input[name="tipo"][value="ambas"]').prop('checked', true); let newurl = FUNC.updateQueryStringParameter(window.location.href, 'tipo', 'ambas'); FUNC.mudaURL(newurl); } else { $('input[name="tipo"][value="' + tipo + '"]').prop('checked', true); } JSpage.SEARCH.GetDados(); $('#nome').change(function () { let newurl = FUNC.updateQueryStringParameter(window.location.href, 'nome', $('#nome').val()); FUNC.mudaURL(newurl); }); //quando #ignorar_datas muda a url $('#ignorar_datas').change(function () { let newurl = FUNC.updateQueryStringParameter(window.location.href, 'ignorar', $('#ignorar_datas').is(':checked')); FUNC.mudaURL(newurl); }); //quando modificar o input name=tipo muda a url $('input[name="tipo"]').change(function () { let newurl = FUNC.updateQueryStringParameter(window.location.href, 'tipo', $('input[name="tipo"]:checked').val()); FUNC.mudaURL(newurl); }); $('#bt_pesquisar').on('click', function () { JSpage.SEARCH.ReloadDados(); }); $('#bt_limpar').on('click', function () { $('input[name="tipo"][value="ambas"]').prop('checked', true); $('#nome').val(''); $('#desde').val((ano - 2) + '-01-01'); $('#ate').val(today); $('#ignorar_datas').prop('checked', false); let newurl = FUNC.updateQueryStringParameter(window.location.href, 'ignorar', 'false'); newurl = FUNC.updateQueryStringParameter(newurl, 'tipo', 'ambas'); newurl = FUNC.updateQueryStringParameter(newurl, 'nome', $('#nome').val()); newurl = FUNC.updateQueryStringParameter(newurl, 'desde', $('#desde').val()); newurl = FUNC.updateQueryStringParameter(newurl, 'ate', $('#ate').val()); FUNC.mudaURL(newurl); JSpage.SEARCH.ReloadDados(); }); } static GetDados() { let $tabela = $('#dataTable'); let desde = FUNC.getParameterByName('desde'); let ate = FUNC.getParameterByName('ate'); let nome = FUNC.getParameterByName('nome'); let ignorar = FUNC.getParameterByName('ignorar'); let tipo = FUNC.getParameterByName('tipo'); seccao = 'pesquisas/?desde=' + desde + '&ate=' + ate + '&ignorar=' + ignorar + '&tipo=' + tipo + '&nome=' + nome; API.get(seccao, function (res) { let erro = JSON.parse(res); if (erro.erro != '' && erro.erro != undefined) { FUNC.showAlert('danger', 'Ocorreu um erro: ' + erro.erro, ''); } FUNC.LoadTable(res, $tabela); }); } static ReloadDados() { let desde = FUNC.getParameterByName('desde'); let ate = FUNC.getParameterByName('ate'); let nome = FUNC.getParameterByName('nome'); let ignorar = FUNC.getParameterByName('ignorar'); let tipo = FUNC.getParameterByName('tipo'); seccao = 'pesquisas/?desde=' + desde + '&ate=' + ate + '&ignorar=' + ignorar + '&tipo=' + tipo + '&nome=' + nome; API.get(seccao, function (res) { let erro = JSON.parse(res); if (erro.erro != '' && erro.erro != undefined) { FUNC.showAlert('danger', 'Ocorreu um erro: ' + erro.erro, ''); } FUNC.ReloadTable(); }); } static ClickItem(currentItem) { LOADPAGES.LoadPageLink('/cemiterios/sepulturas/detalhes/' + currentItem.cemiterio_id + '=' + currentItem.seccao_id + '=' + currentItem.sepultura_id); } static filtraTabela() { } static afterLoadTabela() { } static AfterGetData() { } } static ALVARAS = class { static ConfigInicial() { tabelaConfig.colunas = [ { data: null, title: 'Data', render: function (data, type, row) { if ($('#tipo').val() == 'alvara') { return row.data_alvara; } else { return row.data_concessao; } } }, { data: null, title: 'Nº do Alvará', render: function (data, type, row) { return row.alvara.numero; } }, { data: 'ident', title: 'Local' }, { data: 'nome', title: 'Concessionário' } ]; tabelaConfig.functionClick = true; tabelaConfig.rowId = 'id'; tabelaConfig.paginacao = true; tabelaConfig.colDefs = [ { width: '80px', targets: [0] }, { width: '120px', targets: [1] }, { width: '300px', targets: [2] } ]; } static Config() { let nome = FUNC.getParameterByName('nome'); let ignorar = FUNC.getParameterByName('ignorar'); let tipo = FUNC.getParameterByName('tipo'); $('#nome').val(nome); if (ignorar == 'true') { // coloca #ignorar_datas cheched $('#ignorar_datas').prop('checked', true); } else { if (ignorar == 'false') { $('#ignorar_datas').prop('checked', false); } else { ignorar = 'false'; $('#ignorar_datas').prop('checked', false); let newurl = FUNC.updateQueryStringParameter(window.location.href, 'ignorar', ignorar); FUNC.mudaURL(newurl); } } //se tipo for vazio checkar o radio name=tipo value=ambas if (tipo == '') { tipo = 'alvara'; let newurl = FUNC.updateQueryStringParameter(window.location.href, 'tipo', tipo); FUNC.mudaURL(newurl); } $('#tipo').val(tipo); FUNC.Desde_ate_accoes(); JSpage.ALVARAS.GetDados(); $('#nome').change(function () { let newurl = FUNC.updateQueryStringParameter(window.location.href, 'nome', $('#nome').val()); FUNC.mudaURL(newurl); }); //quando #ignorar_datas muda a url $('#ignorar_datas').change(function () { let newurl = FUNC.updateQueryStringParameter(window.location.href, 'ignorar', $('#ignorar_datas').is(':checked')); FUNC.mudaURL(newurl); }); //quando modificar o input name=tipo muda a url $('#tipo').change(function () { let newurl = FUNC.updateQueryStringParameter(window.location.href, 'tipo', $('#tipo').val()); FUNC.mudaURL(newurl); }); $('#bt_pesquisar').on('click', function () { JSpage.ALVARAS.ReloadDados(); }); $('#bt_limpar').on('click', function () { $('#tipo').val('alvara'); $('#nome').val(''); $('#desde').val((ano - 2) + '-01-01'); $('#ate').val(today); $('#ignorar_datas').prop('checked', false); let newurl = FUNC.updateQueryStringParameter(window.location.href, 'ignorar', 'false'); newurl = FUNC.updateQueryStringParameter(newurl, 'tipo', 'alvara'); newurl = FUNC.updateQueryStringParameter(newurl, 'nome', ''); newurl = FUNC.updateQueryStringParameter(newurl, 'desde', $('#desde').val()); newurl = FUNC.updateQueryStringParameter(newurl, 'ate', $('#ate').val()); FUNC.mudaURL(newurl); JSpage.ALVARAS.ReloadDados(); }); } static GetDados() { let $tabela = $('#dataTable'); let desde = FUNC.getParameterByName('desde'); let ate = FUNC.getParameterByName('ate'); let nome = FUNC.getParameterByName('nome'); let ignorar = FUNC.getParameterByName('ignorar'); let tipo = FUNC.getParameterByName('tipo'); seccao = 'alvaras/?desde=' + desde + '&ate=' + ate + '&ignorar=' + ignorar + '&tipo=' + tipo + '&nome=' + nome; API.get(seccao, function (res) { let erro = JSON.parse(res); if (erro.erro != '' && erro.erro != undefined) { FUNC.showAlert('danger', 'Ocorreu um erro: ' + erro.erro, ''); } FUNC.LoadTable(res, $tabela); }); } static ReloadDados() { let desde = FUNC.getParameterByName('desde'); let ate = FUNC.getParameterByName('ate'); let nome = FUNC.getParameterByName('nome'); let ignorar = FUNC.getParameterByName('ignorar'); let tipo = FUNC.getParameterByName('tipo'); seccao = 'alvaras/?desde=' + desde + '&ate=' + ate + '&ignorar=' + ignorar + '&tipo=' + tipo + '&nome=' + nome; API.get(seccao, function (res) { let erro = JSON.parse(res); if (erro.erro != '' && erro.erro != undefined) { FUNC.showAlert('danger', 'Ocorreu um erro: ' + erro.erro, ''); } FUNC.ReloadTable(); }); } static ClickItem(currentItem) { LOADPAGES.LoadPageLink('/cemiterios/sepulturas/detalhes/' + currentItem.cemiterio_id + '=' + currentItem.seccao_id + '=' + currentItem.sepultura_id); } } static AVERBAMENTOS = class { static ConfigInicial() { tabelaConfig.colunas = [ { data: 'id', title: 'Data', render: function (data, type, row) { return row.averbamento.data; } }, { data: null, title: 'Nº do Averbamento', render: function (data, type, row) { return row.averbamento.numero; } }, { data: null, title: 'Concessionário', render: function (data, type, row) { return row.averbamento.sujeito_ativo_nome; } }, { data: 'ident', title: 'Local' } ]; tabelaConfig.functionClick = true; tabelaConfig.paginacao = true; tabelaConfig.rowId = 'id'; tabelaConfig.colDefs = [ { width: '80px', targets: [0] }, { width: '80px', targets: [1] }, { width: '300px', targets: [2] } ]; } static Config() { let nome = FUNC.getParameterByName('nome'); $('#nome').val(nome); JSpage.AVERBAMENTOS.GetDados(); $('#nome').change(function () { let newurl = FUNC.updateQueryStringParameter(window.location.href, 'nome', $('#nome').val()); FUNC.mudaURL(newurl); }); $('#bt_pesquisar').on('click', function () { JSpage.AVERBAMENTOS.ReloadDados(); }); $('#bt_limpar').on('click', function () { $('#nome').val(''); $('#desde').val((ano - 2) + '-01-01'); $('#ate').val(today); let newurl = FUNC.updateQueryStringParameter(window.location.href, 'nome', ''); newurl = FUNC.updateQueryStringParameter(newurl, 'desde', $('#desde').val()); newurl = FUNC.updateQueryStringParameter(newurl, 'ate', $('#ate').val()); FUNC.mudaURL(newurl); JSpage.AVERBAMENTOS.ReloadDados(); }); } static GetDados() { let $tabela = $('#dataTable'); let desde = FUNC.getParameterByName('desde'); let ate = FUNC.getParameterByName('ate'); let nome = FUNC.getParameterByName('nome'); seccao = 'averbamentos/?desde=' + desde + '&ate=' + ate + '&nome=' + nome; API.get(seccao, function (res) { let erro = JSON.parse(res); if (erro.erro != '' && erro.erro != undefined) { FUNC.showAlert('danger', 'Ocorreu um erro: ' + erro.erro, ''); } FUNC.LoadTable(res, $tabela); }); } static ReloadDados() { let desde = FUNC.getParameterByName('desde'); let ate = FUNC.getParameterByName('ate'); let nome = FUNC.getParameterByName('nome'); seccao = 'averbamentos/?desde=' + desde + '&ate=' + ate + '&nome=' + nome; API.get(seccao, function (res) { let erro = JSON.parse(res); if (erro.erro != '' && erro.erro != undefined) { FUNC.showAlert('danger', 'Ocorreu um erro: ' + erro.erro, ''); } FUNC.ReloadTable(); }); } static ClickItem(currentItem) { LOADPAGES.LoadPageLink('/cemiterios/sepulturas/detalhes/' + currentItem.cemiterio_id + '=' + currentItem.seccao_id + '=' + currentItem.sepultura_id); } } static REQUERIMENTOS = class { static gravado = false; static NovoItem = { "id": "", "data_registo": "", "ident_cemiterio_id": "", "ident_seccao_id": "", "ident_sepultura_id": "", "ident_cemiterio": "", "ident_seccao": "", "ident_sepultura": "", "tipo": "Exumação", "requerente": { "nome": "", "nif": "", "doc_tipo": "Cartão de Cidadão", "doc_numero": "", "doc_validade": "", "estado_civil": "Solteiro(a)", "profissao": "", "data_nascimento": "", "morada": "", "cod_postal": "", "localidade": "", "parentalidade": "" }, "alvara": { "area": "", "tipo": "" }, "obras": { "revestimento": "", "tipo": "" }, "averbamento": { "alvara_num": "", "alvara_data": "" }, "transferencia": { "alvara_num": "", "alvara_data": "", "tipo": "", "prop_atual": "", "prop_novo": "", "morada": "" }, "exumacao": { "tipo": "", "ossadas": "", "inumacao_id": "", "inumacao_nome": "", "inumacao_data": "", "para_cemiterio_id": "", "para_cemiterio_nome": "", "para_seccao_id": "", "para_seccao_nome": "", "para_sepultura_id": "", "para_sepultura_nome": "", "encarregado": "", "registo_DGAI": "", "representante": "" }, "local_requerimento": "", "data_requerimento": FUNC.trataApenasData(today), "html": "", "taxa_num": "", "taxa_txt": "" }; static ConfigInicial() { tabelaConfig.colunas = [ { data: 'data_requerimento', title: 'Data', render: function (data, type, row) { return FUNC.trataApenasData(data); } }, { data: 'tipo', title: 'Tipo' }, { data: 'requerente.nome', title: 'Requerente' } ]; tabelaConfig.rowId = 'id'; tabelaConfig.colDefs = [ { width: 80, targets: [0] }, { width: 80, targets: [1] } ]; tabelaConfig.responsive = false; tabelaConfig.functionClick = true; tabelaConfig.linkTableItem = undefined; tabelaConfig.paginacao = true; GERAL.carregaListasAcessorias(); } static Config() { JSpage.REQUERIMENTOS.GetDados(); $('#bt_pesquisar').on('click', function () { JSpage.REQUERIMENTOS.ReloadDados(); }); } static GetDados() { let $tabela = $('#dataTable'); let desde = FUNC.getParameterByName('desde'); let ate = FUNC.getParameterByName('ate'); seccao = 'requerimentos/?desde=' + desde + '&ate=' + ate; API.get(seccao, function (res) { let erro = JSON.parse(res); if (erro.erro != '' && erro.erro != undefined) { FUNC.showAlert('danger', 'Ocorreu um erro: ' + erro.erro, ''); } FUNC.LoadTable(res, $tabela); }); } static ReloadDados() { let desde = FUNC.getParameterByName('desde'); let ate = FUNC.getParameterByName('ate'); seccao = 'requerimentos/?desde=' + desde + '&ate=' + ate; API.get(seccao, function (res) { let erro = JSON.parse(res); if (erro.erro != '' && erro.erro != undefined) { FUNC.showAlert('danger', 'Ocorreu um erro: ' + erro.erro, ''); } FUNC.ReloadTable(); }); } static afterLoadTabela() { defineClicks(); function defineClicks() { // click novo requerimento $('#bt_novo_requerimento').off('click').click(function () { itemAtual = JSON.parse(JSON.stringify(JSpage.REQUERIMENTOS.NovoItem)); JSpage.REQUERIMENTOS.AbreNovo(); }); } } static ClickItem(currentItem) { itemAtual = currentItem; JSpage.REQUERIMENTOS.gravado = true; JSpage.REQUERIMENTOS.Editar(); } static AbreNovo() { let _html = paginas.find(x => x.Nome == 'requerimentos.novo_tipo.html').Valor; $('#placer').html(_html); $('#requerimento-novo-tipo').modal('show'); } static NovoTipo(tipo) { //switch tipo switch (tipo) { case 0: itemAtual.tipo = 'Concessão'; break; case 1: itemAtual.tipo = 'Averbamento'; break; case 2: itemAtual.tipo = 'Obras'; break; case 3: itemAtual.tipo = 'Transferência'; break; case 4: itemAtual.tipo = 'Exumação'; break; } FUNC.fechaModal(); JSpage.REQUERIMENTOS.Novo(); } static AbreNovoEscolheSep() { let _html = paginas.find(x => x.Nome == 'requerimentos.novo_escolhe_sep.html').Valor; $('#placer').html(_html); GERAL.Load_select_cem('edit_destino', null, null, null); $('#requerimento-novo-escolhe-sep').modal('show'); $('#bt_continuar').off('click').click(function () { let sep = $('#edit_destino_sep').val(); if (sep == null) { FUNC.showAlert('danger', 'Selecione uma sepultura!', ''); return; } JSpage.REQUERIMENTOS.NovoEscolheSep(); }); } static NovoEscolheSep() { itemAtual.ident_cemiterio_id = $('#edit_destino_cem').val(); itemAtual.ident_cemiterio = $('#edit_destino_cem option:selected').text(); itemAtual.ident_seccao_id = $('#edit_destino_sec').val(); itemAtual.ident_seccao = $('#edit_destino_sec option:selected').text(); itemAtual.ident_sepultura_id = $('#edit_destino_sep').val(); itemAtual.ident_sepultura = $('#edit_destino_sep option:selected').text(); FUNC.fechaModal(); JSpage.REQUERIMENTOS.Novo(); } static Novo() { if (itemAtual.ident_sepultura_id == '') { JSpage.REQUERIMENTOS.AbreNovoEscolheSep(); return; } JSpage.REQUERIMENTOS.Editar(); } static Editar() { let _html = paginas.find(x => x.Nome == 'requerimentos.editar.html').Valor; $('#placer').html(_html); //--> caixas de seleção //estados civel edit_estados_civil(); //tipos docs edit_tipos_docs(); //mostra separador correto para o tipo de requerimento JSpage.REQUERIMENTOS.carregaAccoesTipoRequerimento(); //popular formulario FUNC.popularFormulario(itemAtual, 'edit_', ''); LOADPAGES.datepicker(); defineClicks(); funcaoExtenso(); detetaAlteracoes(); $('#editar-requerimento').modal('show'); if (JSpage.REQUERIMENTOS.gravado == false) { $('#bts_gravado').addClass('hidden'); $('#por_gravar').removeClass('hidden'); } else { $('#por_gravar').addClass('hidden'); $('#bts_gravado').removeClass('hidden'); } function funcaoExtenso() { //função #edit_taxa_num keyup $('#edit_taxa_num').keyup(function () { let valorInput = $('#edit_taxa_num').val().replace(',', '.'); // Substitui vírgula por ponto let valor = parseFloat(valorInput); // Converte para número if (isNaN(valor)) { $('#edit_taxa_txt').val(""); } else { $('#edit_taxa_txt').val(NUM.numeroPorExtensoEmEuros(valor)); } }); } function detetaAlteracoes() { // Quando o modal é exibido $(document).on("shown.bs.modal", "#editar-requerimento", function () { // Adiciona evento para detectar alterações nos campos de input, select e textarea $("#editar-requerimento input, #editar-requerimento select, #editar-requerimento textarea").on('change', function () { JSpage.REQUERIMENTOS.gravado = false; $('#bts_gravado').addClass('hidden'); $('#por_gravar').removeClass('hidden'); }); }); } function defineClicks() { $('#bt_eliminar_requerimento').off('click').click(function () { JSpage.REQUERIMENTOS.Eliminar(); }); $('#bt_salva_requerimento').off('click').click(function () { JSpage.REQUERIMENTOS.Salvar(); }); $('#bt_imprimir_requerimento').off('click').click(function () { JSpage.REQUERIMENTOS.Imprimir(); }); $('#bt_novo_recibo').off('click').click(function () { JSpage.REQUERIMENTOS.NovoRecibo(); }); $('#bt_accao').off('click').click(function () { JSpage.REQUERIMENTOS.Bt_accao_Click(); }); } function edit_estados_civil() { let opcoes = GERAL.listas.filter(x => x.nome == 'Lista Estados Civil')[0].dados; let _html = ''; opcoes.forEach(x => { _html += ''; }); $('#edit_requerente_estado_civil').html(_html); } function edit_tipos_docs() { let opcoes = GERAL.listas.filter(x => x.nome == 'Tipos de Documentos Identificação')[0].dados; let _html = ''; opcoes.forEach(x => { _html += ''; }); $('#edit_requerente_doc_tipo').html(_html); } } static edit_lista_de_defuntos() { API.get('sepulturas/' + itemAtual.ident_cemiterio_id + '=' + itemAtual.ident_seccao_id + '=' + itemAtual.ident_sepultura_id, function (res) { let sep = JSON.parse(res); let opcoes = sep.inumacoes; let _html = ''; opcoes.forEach(x => { _html += ''; }); $('#edit_exumacao_inumacao_id').html(_html); }); } static carregaAccoesTipoRequerimento() { let titulo = ''; let nome_accao = ''; let tab = 1; // Tipo de requerimento switch (itemAtual.tipo) { case "Concessão": titulo = "Requerimento de Nova Concessão"; nome_accao = "Atualizar Concessão"; tab = 1; carrega_dados_concessao(); break; case "Averbamento": titulo = "Requerimento de Novo Averbamento"; nome_accao = "Novo Averbamento"; tab = 2; carrega_dados_averbamento(); break; case "Obras": titulo = "Requerimento de Obras"; nome_accao = ""; tab = 3; carrega_dados_obras(); break; case "Transferência": titulo = "Requerimento de Transferência de Concessão"; nome_accao = "Atualizar Concessão"; tab = 4; carrega_dados_transferencia(); break; case "Exumação": titulo = "Requerimento de Exumação/Transladação"; nome_accao = ""; tab = 5; //lista de defuntos JSpage.REQUERIMENTOS.edit_lista_de_defuntos(); carrega_dados_exumacao(); break; } $('#titulo-requerimento').html(titulo); $('#edit_tipos button[data-target="#tipo' + tab + '"]').tab('show'); // Select tab by name $('#bt_accao_nome').html(nome_accao); if (nome_accao != '' && JSpage.REQUERIMENTOS.gravado) { $('#bt_accao').removeClass('hidden'); } else { $('#bt_accao').addClass('hidden'); } //adiciona a class hidden as tabs que não estão selecionadas $('.nav-link:not(.active)').addClass('hidden'); function carrega_dados_concessao() { let opcoes = GERAL.listas.filter(x => x.nome == 'Tipos de Sepulturas')[0].dados; let _html = ''; opcoes.forEach(x => { _html += ''; }); $('#edit_alvara_tipo').html(_html); $('#edit_transferencia_tipo').html(_html); } function carrega_dados_averbamento() { let sep = null; if (itemAtual.id == '') { API.get('sepulturas/' + itemAtual.ident_cemiterio_id + '=' + itemAtual.ident_seccao_id + '=' + itemAtual.ident_sepultura_id, function (res) { sep = JSON.parse(res); carregaDadosSep(sep); }); } } function carrega_dados_obras() { let opcoes = GERAL.listas.filter(x => x.nome == 'Tipos de Obra')[0].dados; let _html = ''; opcoes.forEach(x => { _html += ''; }); $('#edit_obras_tipo').html(_html); } function carrega_dados_transferencia() { carrega_dados_concessao(); let sep = null; if (itemAtual.id == '') { API.get('sepulturas/' + itemAtual.ident_cemiterio_id + '=' + itemAtual.ident_seccao_id + '=' + itemAtual.ident_sepultura_id, function (res) { sep = JSON.parse(res); carregaDadosSep(sep); }); } } function carrega_dados_exumacao() { if (itemAtual.exumacao.tipo == 'Trasladação') { $('#edit_tipo_trasladacao').prop('checked', 'checked'); } define_exumacao_tipo(); $('input[type=radio][name=edit_exumacao_tipo]').change(function () { itemAtual.exumacao.tipo = document.querySelector('input[name="edit_exumacao_tipo"]:checked').value; define_exumacao_tipo(); }); } function define_exumacao_tipo() { $('#edit_tipo_' + itemAtual.exumacao.tipo).attr('checked', 'checked'); if (itemAtual.exumacao.tipo == 'exumacao') { $('#novo_destino_trasladacao').addClass('hidden'); } else { $('#novo_destino_trasladacao').removeClass('hidden'); define_destino_trasladacao(); } } function define_destino_trasladacao() { GERAL.Load_select_cem('novo_destino', itemAtual.exumacao.para_cemiterio_id, itemAtual.exumacao.para_seccao_id, itemAtual.exumacao.para_sepultura_id, edit_novo_destino); } function edit_novo_destino() { itemAtual.exumacao.para_cemiterio_id = $('#novo_destino_cem').val(); itemAtual.exumacao.para_cemiterio_nome = $('#novo_destino_cem option:selected').text(); itemAtual.exumacao.para_seccao_id = $('#novo_destino_sec').val(); itemAtual.exumacao.para_seccao_nome = $('#novo_destino_sec option:selected').text(); itemAtual.exumacao.para_sepultura_id = $('#novo_destino_sep').val(); itemAtual.exumacao.para_sepultura_nome = $('#novo_destino_sep option:selected').text(); } function carregaDadosSep(sep) { //DADOS PRÉ-DEFINIDOS itemAtual.alvara.tipo = sep.identificacao.tipo; itemAtual.alvara.area = sep.identificacao.area; //OBRAS itemAtual.obras.tipo = sep.identificacao.tipo; //AVERBAMENTO itemAtual.averbamento.alvara_num = sep.identificacao.alvara.numero; itemAtual.averbamento.alvara_data = sep.identificacao.alvara.alvara_data; //TRANSFERÊNCIA itemAtual.transferencia.alvara_num = sep.identificacao.alvara.numero; itemAtual.transferencia.tipo = sep.identificacao.tipo; itemAtual.transferencia.prop_atual = sep.concessao.nome; itemAtual.transferencia.alvara_data = sep.identificacao.alvara.alvara_data; FUNC.popularFormulario(itemAtual, 'edit_', ''); } } static Salvar() { // Taxas itemAtual.taxa_num = $('#edit_taxa_num').val(); itemAtual.taxa_txt = $('#edit_taxa_txt').val(); // Requerente itemAtual.requerente.nome = $('#edit_requerente_nome').val(); itemAtual.requerente.nif = $('#edit_requerente_nif').val(); itemAtual.requerente.doc_tipo = $('#edit_requerente_doc_tipo').val(); itemAtual.requerente.doc_numero = $('#edit_requerente_doc_numero').val(); itemAtual.requerente.doc_validade = $('#edit_requerente_doc_validade').val(); itemAtual.requerente.estado_civil = $('#edit_requerente_estado_civil').val(); itemAtual.requerente.data_nascimento = $('#edit_requerente_data_nascimento').val(); itemAtual.requerente.morada = $('#edit_requerente_morada').val(); itemAtual.requerente.cod_postal = $('#edit_requerente_cod_postal').val(); itemAtual.requerente.localidade = $('#edit_requerente_localidade').val(); itemAtual.requerente.parentalidade = $('#edit_requerente_parentalidade').val(); // Alvará itemAtual.alvara.tipo = $('#edit_alvara_tipo').val(); itemAtual.alvara.area = $('#edit_alvara_area').val(); // Averbamento itemAtual.averbamento.alvara_num = $('#edit_averbamento_alvara_num').val(); itemAtual.averbamento.alvara_data = $('#edit_averbamento_alvara_data').val(); // Obras itemAtual.obras.revestimento = $('#edit_obras_revestimento').val(); itemAtual.obras.tipo = $('#edit_obras_tipo').val(); // Transferência itemAtual.transferencia.alvara_num = $('#edit_transferencia_alvara_num').val(); itemAtual.transferencia.alvara_data = $('#edit_transferencia_alvara_data').val(); itemAtual.transferencia.tipo = $('#edit_transferencia_tipo').val(); itemAtual.transferencia.prop_atual = $('#edit_transferencia_prop_atual').val(); itemAtual.transferencia.prop_novo = $('#edit_transferencia_prop_novo').val(); itemAtual.transferencia.morada = $('#edit_transferencia_morada').val(); // Exumação itemAtual.exumacao.tipo = $('input[name="edit_exumacao_tipo"]:checked').val(); itemAtual.exumacao.ossadas = $('#edit_exumacao_ossadas').val(); itemAtual.exumacao.inumacao_id = $('#edit_exumacao_inumacao_id').val(); itemAtual.exumacao.inumacao_nome = $('#edit_exumacao_inumacao_id option:selected').text(); itemAtual.exumacao.encarregado = $('#edit_exumacao_encarregado').val(); itemAtual.exumacao.registo_DGAI = $('#edit_exumacao_registo_DGAI').val(); itemAtual.exumacao.representante = $('#edit_exumacao_representante').val(); // Trasladação (novo destino) itemAtual.exumacao.para_cemiterio_id = $('#novo_destino_cem').val(); itemAtual.exumacao.para_seccao_id = $('#novo_destino_sec').val(); itemAtual.exumacao.para_sepultura_id = $('#novo_destino_sep').val(); // Local e data do requerimento itemAtual.local_requerimento = $('#edit_local_requerimento').val(); itemAtual.data_requerimento = $('#edit_data_requerimento').val(); //trata nulos if (itemAtual.ident_cemiterio_id == null) { itemAtual.ident_cemiterio_id = ""; } if (itemAtual.ident_seccao_id == null) { itemAtual.ident_seccao_id = ""; } if (itemAtual.ident_sepultura_id == null) { itemAtual.ident_sepultura_id = ""; } if (itemAtual.obras.tipo == null) { itemAtual.obras.tipo = ""; } if (itemAtual.exumacao.para_cemiterio_id == null) { itemAtual.exumacao.para_cemiterio_id = ""; } if (itemAtual.exumacao.para_seccao_id == null) { itemAtual.exumacao.para_seccao_id = ""; } if (itemAtual.exumacao.para_sepultura_id == null) { itemAtual.exumacao.para_sepultura_id = ""; } if (itemAtual.alvara.tipo == null) { itemAtual.alvara.tipo = ""; } if (itemAtual.transferencia.tipo == null) { itemAtual.transferencia.tipo = ""; } if (itemAtual.exumacao.inumacao_id == null) { itemAtual.exumacao.inumacao_id = ""; } API.put('requerimentos', itemAtual, function (res) { itemAtual = res; JSpage.REQUERIMENTOS.gravado = true; $('#bts_gravado').removeClass('hidden'); $('#por_gravar').addClass('hidden'); if (pageID == 'requerimentos') { FUNC.ReloadTable(); } JSpage.REQUERIMENTOS.carregaAccoesTipoRequerimento(); }); } static Eliminar() { let confirm = window.confirm("Tem a certeza que pretende eliminar este Requerimento. Pretende continuar?"); if (confirm) { if (itemAtual.id == '') { FUNC.showAlert('danger', 'O Requerimento atual não pode ser eliminado porque não tem ID.', ''); return; } API.del('requerimentos/' + itemAtual.id, null, function (res) { FUNC.fechaModal(); FUNC.showAlert('info', 'Requerimento eliminado!', ''); }); } } static Imprimir() { window.open('/pdf/requerimento/' + itemAtual.id + '/Requerimento.pdf', janela_docs); } static Bt_accao_Click() { let accao = $('#bt_accao_nome').html(); if (accao == 'Atualizar Concessão' || accao == 'Transferência') { JSpage.REQUERIMENTOS.AtualizarConcessao(); } if (accao == 'Novo Averbamento') { JSpage.REQUERIMENTOS.NovoAverbamento(); } } static AtualizarConcessao() { let confirm = window.confirm("Vai ser encaminhado para o formulário de atualização de dados desta concessão. Pretende continuar?"); if (confirm) { //fecha modal FUNC.fechaModal(); //abre sepultura correta se não estiver lá if (pageID != 'cemiterios.sepulturas.detalhes') { LOADPAGES.LoadPageLink('/cemiterios/sepulturas/detalhes/' + itemAtual.ident_cemiterio_id + '=' + itemAtual.ident_seccao_id + '=' + itemAtual.ident_sepultura_id + '?open=concessao&id=' + itemAtual.id); } else { JSpage.CEMITERIOS.SEPULTURAS.DETALHES.CONCESSAO.Atualizar(itemAtual); } } } static NovoAverbamento() { let confirm = window.confirm("Vai ser encaminhado para o formulário de novo averbamento. Pretende continuar?"); if (confirm) { //fecha modal FUNC.fechaModal(); //abre sepultura correta se não estiver lá if (pageID != 'cemiterios.sepulturas.detalhes') { LOADPAGES.LoadPageLink('/cemiterios/sepulturas/detalhes/' + itemAtual.ident_cemiterio_id + '=' + itemAtual.ident_seccao_id + '=' + itemAtual.ident_sepultura_id + '?open=averbamento&id=' + itemAtual.id); } else { //abre modal concessao JSpage.CEMITERIOS.SEPULTURAS.DETALHES.AVERBAMENTOS.AbreNovoFromRequerimento(itemAtual); } } } static NovoRecibo() { LOADPAGES.LoadPageLink('/recibos/?novo=ok&id=' + itemAtual.id); } } static RECIBOS = class { static gravado = false; static ConfigInicial() { tabelaConfig.colunas = [ { data: 'data_registo', title: 'Data', render: function (data, type, row) { return FUNC.trataApenasData(data); } }, { data: 'numero', title: 'Número' }, { data: 'nome', title: 'Requerente' } , { data: 'total', title: 'Total', render: function (data, type, row) { return data.toFixed(2); } } ]; tabelaConfig.order = [[1, "desc"]]; tabelaConfig.rowId = 'id'; tabelaConfig.colDefs = [ { width: 80, targets: [0] }, { width: 80, targets: [1] }, { width: 80, targets: [3] }, { className: 'text-right', targets: [3] } ]; tabelaConfig.responsive = false; tabelaConfig.functionClick = true; tabelaConfig.linkTableItem = undefined; tabelaConfig.paginacao = true; GERAL.carregaListasAcessorias(); } static Config() { JSpage.RECIBOS.GetDados(); $('#bt_pesquisar').on('click', function () { JSpage.RECIBOS.ReloadDados(); }); } static GetDados() { let $tabela = $('#dataTable'); let desde = FUNC.getParameterByName('desde'); let ate = FUNC.getParameterByName('ate'); seccao = 'recibos/?desde=' + desde + '&ate=' + ate; API.get(seccao, function (res) { let erro = JSON.parse(res); if (erro.erro != '' && erro.erro != undefined) { FUNC.showAlert('danger', 'Ocorreu um erro: ' + erro.erro, ''); } FUNC.LoadTable(res, $tabela); JSpage.RECIBOS.AbreNovoComDadosDoRequerimento(); }); } static ReloadDados() { let desde = FUNC.getParameterByName('desde'); let ate = FUNC.getParameterByName('ate'); seccao = 'recibos/?desde=' + desde + '&ate=' + ate; API.get(seccao, function (res) { let erro = JSON.parse(res); if (erro.erro != '' && erro.erro != undefined) { FUNC.showAlert('danger', 'Ocorreu um erro: ' + erro.erro, ''); } FUNC.ReloadTable(); }); } static afterLoadTabela() { defineClicks(); function defineClicks() { // click novo requerimento $('#bt_novo_recibo').off('click').click(function () { JSpage.RECIBOS.AbreNovo(); }); } } static ClickItem(currentItem) { itemAtual = currentItem; JSpage.RECIBOS.gravado = true; JSpage.RECIBOS.Editar(); } static NovoItem = { "id": "", "numero": "", "data_registo": today, "ident_cemiterio_id": "", "ident_seccao_id": "", "ident_sepultura_id": "", "ident_cemiterio": "", "ident_seccao": "", "ident_sepultura": "", "nome": "", "nif": "", "morada": "", "cod_postal": "", "localidade": "", "total": 0, "servicos": [] }; static AbreNovo() { JSpage.RECIBOS.gravado = false; //definir itemAtual como cópia do novo item itemAtual = JSON.parse(JSON.stringify(JSpage.RECIBOS.NovoItem)); API.get('recibos/numero', function (res) { itemAtual.numero = res; JSpage.RECIBOS.Editar(); }); } static AbreNovoComDadosDoRequerimento() { //se exirtir uma querystring novo=ok e uma query string id let novo = FUNC.getParameterByName('novo'); let id = FUNC.getParameterByName('id'); if (novo == 'ok' && id != '') { API.get('requerimentos/?id=' + id, function (res) { var req = JSON.parse(res)[0]; JSpage.RECIBOS.gravado = false; //definir itemAtual como cópia do novo item itemAtual = JSON.parse(JSON.stringify(JSpage.RECIBOS.NovoItem)); itemAtual.ident_cemiterio_id = req.ident_cemiterio_id; itemAtual.ident_cemiterio = req.ident_cemiterio; itemAtual.ident_seccao_id = req.ident_seccao_id; itemAtual.ident_seccao = req.ident_seccao; itemAtual.ident_sepultura_id = req.ident_sepultura_id; itemAtual.ident_sepultura = req.ident_sepultura; itemAtual.nome = req.requerente.nome; itemAtual.nif = req.requerente.nif; itemAtual.morada = req.requerente.morada; itemAtual.cod_postal = req.requerente.cod_postal; itemAtual.localidade = req.requerente.localidade; API.get('recibos/numero', function (res) { itemAtual.numero = res; JSpage.RECIBOS.Editar(); //replace querystring novo=ok por vazio window.history.replaceState({}, document.title, "/" + pageID + "/"); }); }); } } static Editar() { let _html = paginas.find(x => x.Nome == 'recibos.editar.html').Valor; $('#placer').html(_html); // Carrega Identificação atual: CEM | SEC | SEP >>>> define localização -> função onChange GERAL.Load_select_cem('edit_recibo', itemAtual.ident_cemiterio_id, itemAtual.ident_seccao_id, itemAtual.ident_sepultura_id, define_localizacao); //Define Tipos de serviços define_tipos_servicos(); // define localização define_localizacao(false); FUNC.popularFormulario(itemAtual, 'edit_', ''); defineClicks(); carregaLinhas(); detetaAlteracoes(); $('#editar-recibo').modal('show'); if (JSpage.RECIBOS.gravado == false) { $('#bts_gravado').addClass('hidden'); $('#por_gravar').removeClass('hidden'); } else { $('#por_gravar').addClass('hidden'); $('#bts_gravado').removeClass('hidden'); } function detetaAlteracoes() { // Quando o modal é exibido $(document).on("shown.bs.modal", "#editar-recibo", function () { // Adiciona evento para detectar alterações nos campos de input, select e textarea $("#editar-recibo input, #editar-recibo select, #editar-recibo textarea").on('change', function () { JSpage.RECIBOS.gravado = false; $('#bts_gravado').addClass('hidden'); $('#por_gravar').removeClass('hidden'); }); }); } function define_tipos_servicos() { let opcoes = GERAL.listas.filter(x => x.nome == 'Tipos de Serviços')[0].dados; let _html = ''; opcoes.forEach(x => { _html += ''; }); $('#linha0_servico').html(_html); } //identificação local function define_localizacao(reload = true) { itemAtual.ident_cemiterio_id = $('#edit_recibo_cem').val(); itemAtual.ident_cemiterio = $('#edit_recibo_cem option:selected').text(); itemAtual.ident_seccao_id = $('#edit_recibo_sec').val(); itemAtual.ident_seccao = $('#edit_recibo_sec option:selected').text(); itemAtual.ident_sepultura_id = $('#edit_recibo_sep').val(); itemAtual.ident_sepultura = $('#edit_recibo_sep option:selected').text(); //if (itemAtual.ident_cemiterio_id != null && itemAtual.ident_seccao_id != null && itemAtual.ident_sepultura_id != null) { // API.get('sepulturas/' + itemAtual.ident_cemiterio_id + '=' + itemAtual.ident_seccao_id + '=' + itemAtual.ident_sepultura_id, function (res) { // let sep = JSON.parse(res); // if (itemAtual.id == '' || reload) { // carregaDadosSep(sep); // } // }); //} } //dados sep function carregaDadosSep(sep) { //DADOS PRÉ-DEFINIDOS itemAtual.requerente.nome = sep.concessao.nome; FUNC.popularFormulario(itemAtual, 'edit_', ''); } function defineClicks() { $('#bt_salva_recibo').off('click').click(function () { JSpage.RECIBOS.Salvar(); }); $('#bt_imprimir_recibo').off('click').click(function () { JSpage.RECIBOS.Imprimir(); }); } function carregaLinhas() { if (itemAtual.id != "") { //para cada linha no itemAtual itemAtual.servicos.forEach(function (linha, index) { if (index > 0) { JSpage.RECIBOS.AdicionaLinha(); } $('#linha' + index + '_servico').val(linha.descricao); $('#linha' + index + '_valor').val(linha.valor); }); } JSpage.RECIBOS.CalculaTotal(); } } static Salvar() { // Requerente itemAtual.nome = $('#edit_nome').val(); itemAtual.nif = $('#edit_nif').val(); itemAtual.morada = $('#edit_morada').val(); itemAtual.cod_postal = $('#edit_cod_postal').val(); itemAtual.localidade = $('#edit_localidade').val(); itemAtual.obs = $('#edit_obs').val(); itemAtual.ident_cemiterio_id = $('#edit_recibo_cem').val(); itemAtual.ident_seccao_id = $('#edit_recibo_sec').val(); itemAtual.ident_sepultura_id = $('#edit_recibo_sep').val(); //trata nulos if (itemAtual.ident_cemiterio_id == null) { itemAtual.ident_cemiterio_id = ""; } if (itemAtual.ident_seccao_id == null) { itemAtual.ident_seccao_id = ""; } if (itemAtual.ident_sepultura_id == null) { itemAtual.ident_sepultura_id = ""; } //para cada div com class '.row.linha' let linhas = []; $('.row.linha').each(function () { let linha = { id: "", descricao: $(this).find('.linha_servico').val(), valor: $(this).find('.linha_valor').val() }; linhas.push(linha); }); itemAtual.servicos = linhas; API.put('recibos', itemAtual, function (res) { if (res.id != undefined) { JSpage.RECIBOS.gravado = true; $('#bts_gravado').removeClass('hidden'); $('#por_gravar').addClass('hidden'); FUNC.ReloadTable(); itemAtual = res; } else { FUNC.showAlert('danger', res, ''); } }); } static linhas = 0; static AdicionaLinha() { // Encontrar o maior data-id let novo_index = JSpage.RECIBOS.linhas + 1; JSpage.RECIBOS.linhas = novo_index; let linha = $('#linha0')[0].outerHTML; linha = FUNC.replaceAll(linha, 'linha0', 'linha' + novo_index); $('#linhas').append(linha); JSpage.RECIBOS.CalculaTotal(); } static RemoveLinha(d) { $('#' + $(d).data('id')).remove(); JSpage.RECIBOS.CalculaTotal(); } static CalculaTotal() { //total vai ser igual à soma de todos os valores dos inputs com class 'linha_valor' let total = 0; $('.linha_valor').each(function () { let valor = $(this).val().replace(',', '.'); let novo_valor = parseFloat(valor); //arrendondar às décimas novo_valor = Math.round(novo_valor * 100) / 100; total += novo_valor; //define este valor com duas casas decimais novo_valor = novo_valor.toFixed(2); $(this).val(novo_valor); }); //define este valor com duas casas decimais total = total.toFixed(2); $('#edit_total').val(total); } static Imprimir() { window.open('/pdf/recibo/' + itemAtual.id + '/Recibo.pdf', janela_docs); } } static FINANCE = class { static ConfigInicial() { } static filtraTabela() { } static afterLoadTabela() { } static AfterGetData() { } static Config() { let desde = FUNC.getParameterByName('desde'); let ate = FUNC.getParameterByName('ate'); let cem = FUNC.getParameterByName('cem'); $('#cemiterio').val(cem); FUNC.Desde_ate_accoes(); API.get('localizacoes', function (res) { GERAL.localizacoes = JSON.parse(res); let opcoes = FUNC.sortByKeyAsc(GERAL.localizacoes.cemiterios, 'titulo'); let _html = ''; opcoes.forEach(x => { _html += ''; }); $('#cemiterio').html(_html); if (cem == '' && opcoes[0] != undefined) { cem = opcoes[0].id; let newurl = FUNC.updateQueryStringParameter(window.location.href, 'cem', cem); FUNC.mudaURL(newurl); } $('#cemiterio').val(cem); JSpage.FINANCE.GetDados(); $('#cemiterio').change(function () { let newurl = FUNC.updateQueryStringParameter(window.location.href, 'cem', $('#cemiterio').val()); FUNC.mudaURL(newurl); }); $('#bt_pesquisar').on('click', function () { JSpage.FINANCE.GetDados(); }); }); } static GetDados() { let desde = FUNC.getParameterByName('desde'); let ate = FUNC.getParameterByName('ate'); let cem = FUNC.getParameterByName('cem'); seccao = 'finance/?desde=' + desde + '&ate=' + ate + '&cem=' + cem; API.get(seccao, function (res) { $('#relatorio').html(res); }); } static RECIBOS = class { static ConfigInicial() { } static filtraTabela() { } static afterLoadTabela() { } static AfterGetData() { } static Config() { let desde = FUNC.getParameterByName('desde'); let ate = FUNC.getParameterByName('ate'); let cem = FUNC.getParameterByName('cem'); $('#cemiterio').val(cem); FUNC.Desde_ate_accoes(); API.get('localizacoes', function (res) { GERAL.localizacoes = JSON.parse(res); let opcoes = FUNC.sortByKeyAsc(GERAL.localizacoes.cemiterios, 'titulo'); let _html = ''; opcoes.forEach(x => { _html += ''; }); _html = '' + _html; $('#cemiterio').html(_html); if (cem == '' && opcoes[0] != undefined) { cem = 0; let newurl = FUNC.updateQueryStringParameter(window.location.href, 'cem', cem); FUNC.mudaURL(newurl); } $('#cemiterio').val(cem); JSpage.FINANCE.RECIBOS.GetDados(); $('#cemiterio').change(function () { let newurl = FUNC.updateQueryStringParameter(window.location.href, 'cem', $('#cemiterio').val()); FUNC.mudaURL(newurl); }); $('#bt_pesquisar').on('click', function () { JSpage.FINANCE.RECIBOS.GetDados(); }); }); } static GetDados() { let desde = FUNC.getParameterByName('desde'); let ate = FUNC.getParameterByName('ate'); let cem = FUNC.getParameterByName('cem'); seccao = 'finance/recibos/?desde=' + desde + '&ate=' + ate + '&cem=' + cem; API.get(seccao, function (res) { $('#relatorio').html(res); }); } } } static DOCS = class { static ConfigInicial() { tabelaConfig.colunas = [ { data: 'nome', title: 'Nome' }, { data: 'ficheiro', title: 'Ficheiro' } ]; tabelaConfig.rowId = 'id'; tabelaConfig.linkTableItem = undefined; tabelaConfig.functionClick = true; tabelaConfig.colDefs = []; } static filtraTabela() { } static afterLoadTabela() { } static AfterGetData() { } static ClickItem(item) { window.open("/file/imp/" + item.id + "/" + item.ficheiro, janela_docs); } } static CONFIG = class { static ConfigInicial() { AUTH.onlyAdmin(); AUTH.onlyClient(); } static ENTIDADE = class { static ConfigInicial() { AUTH.onlyAdmin(); AUTH.onlyClient(); } static AfterGetData() { $('#txt_foto').attr('src', '/foto/entidade/' + $('#clientID').val()); $('#bt_alterar_foto').on('click', function () { $('#txt_foto').attr('src', '/img/load.gif'); API.putFile('image/jpg', null, '/entidade/foto', function (res) { let _link_foto = '/foto/entidade/' + $('#clientID').val() + '/?v=' + FUNC.newRand(); $('#txt_foto').attr('src', _link_foto); }); }); } } static AGENCIAS = class { static ConfigInicial() { AUTH.onlyAdmin(); AUTH.onlyClient(); tabelaConfig.colunas = [ { data: 'nome', title: 'Nome' }, { data: 'nif', title: 'NIF' }, { data: 'email', title: 'Email' } ]; tabelaConfig.rowId = 'id'; tabelaConfig.linkTableItem = '/config/agencias/editar/'; tabelaConfig.paginacao = true; tabelaConfig.colDefs = []; } static filtraTabela() { } static afterLoadTabela() { } static NovoItem() { let novoItem = { "nome": "Nova agência" }; API.post('agencias', novoItem, LOADPAGES.LoadPage); } static AfterGetData() { } static ValidaForm(continua) { continua(); } } static CEMITERIOS = class { static ConfigInicial() { AUTH.onlyAdmin(); AUTH.onlyClient(); tabelaConfig.colunas = [ { data: 'titulo', title: 'Nome' }, { data: 'seccoes', title: 'Secções' }, { data: 'sepulturas', title: 'Sepulturas' } ]; tabelaConfig.rowId = 'id'; tabelaConfig.linkTableItem = '/config/cemiterios/editar/'; tabelaConfig.paginacao = false; tabelaConfig.order = [[0, "asc"]]; tabelaConfig.colDefs = []; } static filtraTabela() { } static afterLoadTabela() { } static NovoItem() { let novoItem = { "titulo": "Novo cemitério" }; API.post('cemiterios', novoItem, LOADPAGES.LoadPage); } static AfterGetData() { } static ValidaForm(continua) { continua(); } static EDITAR = class { static ConfigInicial() { } static filtraTabela() { } static afterLoadTabela() { } static NovoItem() { } static AfterGetData() { $('#titulo').html(dados.titulo); MAPA.InitialConfigCemiterioAdmin(); $('#txt_foto').attr('src', '/foto/cemiterio/' + dados.id); $('#bt_alterar_foto').on('click', function () { $('#txt_foto').attr('src', '/img/load.gif'); API.putFile('image/jpg', null, '/cemiterios/foto/' + dados.id, function (res) { let _link_foto = '/foto/cemiterio/' + dados.id + '/?v=' + FUNC.newRand(); $('#txt_foto').attr('src', _link_foto); }); }); } static ValidaForm(continua) { continua(); } static AfterSave() { $('#titulo').html(dados.titulo); FUNC.fechaModal(); } static SECCAO = class { static ConfigInicial() { } static filtraTabela() { } static afterLoadTabela() { } static NovoItem() { } static AfterGetData() { $('#titulo').html(dados.titulo); MAPA.InitialConfigSeccaoAdmin(); } static ValidaForm(continua) { continua(); } } } } static DOCS = class { static ConfigInicial() { AUTH.onlyAdmin(); AUTH.onlyClient(); tabelaConfig.colunas = [ { data: 'nome', title: 'Nome' }, { data: 'ficheiro', title: 'Ficheiro' } ]; tabelaConfig.rowId = 'id'; tabelaConfig.linkTableItem = '/config/docs/editar/'; tabelaConfig.colDefs = []; } static filtraTabela() { } static afterLoadTabela() { } static NovoItem() { let novoItem = { "nome": "Novo documento" }; API.post('documentos', novoItem, function (res) { LOADPAGES.LoadPageLink('/config/docs/editar/' + res.id) }); } static AfterGetData() { } static ValidaForm(continua) { continua(); } static EDITAR = class { static ValidaForm(continua) { var formData = new FormData(); dados.nome = $('#txt_nome').val(); // Apenas adicionar o ficheiro se ele for selecionado var ficheiro = $('#upload_ficheiro')[0].files[0]; if (ficheiro) { formData.append("ficheiro", ficheiro); dados.ficheiro = $('#upload_ficheiro')[0].files[0].name; } formData.append("doc", JSON.stringify(dados)); $.ajax({ url: config.apiUrl + '/documentos/' + dados.id, data: formData, async: true, headers: AUTH.ajaxHeaders, contentType: false, // Necessário para enviar FormData processData: false, // Necessário para enviar FormData type: "PUT", success: function (result) { API.checkLogin(result); LOADPAGES.LoadPageLink('/config/docs'); }, error: API.handleAjaxErrors }); //continua(); } } } static LISTAS = class { static ConfigInicial() { AUTH.onlyAdmin(); AUTH.onlyClient(); API.get('listas', function (res) { lista = JSON.parse(res); JSpage.CONFIG.LISTAS.AfterGetData(); $('#tipo_lista').on('change', function () { JSpage.CONFIG.LISTAS.AfterGetData(); }); }); } static filtraTabela() { } static afterLoadTabela() { } static NovoItem() { FUNC.fechaModal(); let novoItem = { "valor": $('#novo_item_valor').val() }; API.post('listas/' + dados.id, novoItem, JSpage.CONFIG.LISTAS.ConfigInicial); $('#novo_item_valor').val(''); } static AfterGetData() { let tipo = $('#tipo_lista').val(); dados = lista.find(x => x.nome == tipo); let _html = ''; dados.dados.forEach(x => { _html += '
' + '
'; }); $('#dados').html(_html); $('#dados .form-control').on('change', function () { let _id = $(this).data('id'); let _dadosX = dados.dados.find(x => x.id == _id); _dadosX.valor = $(this).val(); API.put('listas/' + dados.id, dados, function (res) { FUNC.showAlert('success', 'Dados gravados com sucesso!', ''); }); }); $('#dados .delete').on('click', function () { let _id = $(this).data('id'); API.del('listas/' + dados.id + '/' + _id, null, JSpage.CONFIG.LISTAS.ConfigInicial); }); } static ValidaForm(continua) { continua(); } } static BACKUPS = class { static ConfigInicial() { AUTH.onlyAdmin(); AUTH.onlyClient(); } static Config() { $('#bt_backup').off('click').click(function () { JSpage.CONFIG.BACKUPS.Backup(); }); $('#bt_restore').off('click').click(function () { JSpage.CONFIG.BACKUPS.Restore(); }); API.get('backup/espaco', function (res) { $('#espaco').html(FUNC.trataTamanhoDisco(res)); }); } static Backup() { let pergunta = 'Deseja efetuar um backup agora?'; let confirm = window.confirm(pergunta); if (confirm) { let _html = paginas.find(x => x.Nome == 'config.backups.backup.html').Valor; $('#placer').html(_html); // abre modal $('#backupModal').modal('show'); //chama a api para efetuar o backup e enquanto espera coloca #evolução com loading $('#evolucao').html(' por favor aguarde... não atualize esta página.'); API.get('backup/efetuar', function (url) { let _html = '
O ficheiro está pronto para ser descarregado:
' + 'Download

' + '

O ficheiro será eliminado automaticamente dentro de 5 minutos.

' + '
'; $('#evolucao').html(_html); }); } } static Restore() { let _html = paginas.find(x => x.Nome == 'config.backups.restore.html').Valor; $('#placer').html(_html); ConfigRestore(); // abre modal $('#restoreModal').modal('show'); function ConfigRestoreOld() { $('#id_ficheiro').html(localStorage.getItem('file_id')); document.getElementById('uploadForm').addEventListener('submit', (e) => { e.preventDefault(); const fileInput = document.getElementById('fileInput'); if (!fileInput.files.length) { alert("Por favor, escolha um ficheiro."); return; } const file = fileInput.files[0]; const formData = new FormData(); formData.append("file", file); const xhr = new XMLHttpRequest(); // Mostrar a barra de progresso const progressBar = document.getElementById('progressBar'); const progressText = document.getElementById('progressText'); progressBar.style.display = 'block'; // Atualizar o progresso do upload xhr.upload.addEventListener('progress', (e) => { if (e.lengthComputable) { const percentComplete = (e.loaded / e.total) * 100; progressBar.value = percentComplete; progressText.innerText = `Upload: ${Math.round(percentComplete)}% concluído`; } }); // Quando o upload terminar xhr.onload = () => { if (xhr.status === 200) { progressText.innerText = "Upload completo!"; const guid = xhr.responseText; document.getElementById('result').innerText = `Ficheiro processado com sucesso. GUID: ${guid}`; localStorage.setItem('file_id', guid); $('#id_ficheiro').html(guid); } else { progressText.innerText = 'Erro ao processar o ficheiro.'; } }; // Lidar com erros xhr.onerror = () => { progressText.innerText = 'Erro ao enviar o ficheiro.'; console.error(xhr.statusText); }; // Adicionar os cabeçalhos const headers = AUTH.ajaxHeaders; for (const key in headers) { if (headers.hasOwnProperty(key)) { xhr.setRequestHeader(key, headers[key]); } } // Configurar a requisição xhr.open('POST', '/api/ficheiro/upload', true); // Enviar os dados xhr.send(formData); }); } function ConfigRestore() { $('#id_ficheiro').html(localStorage.getItem('file_id')); document.getElementById('uploadForm').addEventListener('submit', (e) => { e.preventDefault(); $('#uploadForm').addClass('hidden'); const fileInput = document.getElementById('fileInput'); if (!fileInput.files.length) { alert("Por favor, escolha um ficheiro."); return; } const file = fileInput.files[0]; const formData = new FormData(); formData.append("file", file); const xhr = new XMLHttpRequest(); // Mostrar a barra de progresso const progressBar = document.getElementById('progressBar'); const progressText = document.getElementById('progressText'); progressBar.style.display = 'block'; // Atualizar o progresso do upload xhr.upload.addEventListener('progress', (e) => { if (e.lengthComputable) { const percentComplete = (e.loaded / e.total) * 100; progressBar.value = percentComplete; let _html = `Upload: ${Math.round(percentComplete)}% concluído`; if (percentComplete == 100) { _html = 'A processar o ficheiro... aguarde por favor...'; } progressText.innerText = _html; } }); // Quando o upload terminar xhr.onload = () => { if (xhr.status === 200) { progressText.innerText = "Upload completo!"; const guid = xhr.responseText; document.getElementById('result').innerText = `Ficheiro processado com sucesso. GUID: ${guid}`; localStorage.setItem('file_id', guid); $('#id_ficheiro').html(guid); $('#passo1').addClass('hidden'); $('#passo2').removeClass('hidden'); JSpage.CONFIG.BACKUPS.AnalisaFicheiro(); } else { progressText.innerText = 'Erro ao processar o ficheiro.' + `Detalhe do erro: ${xhr.responseText}`; } }; // Lidar com erros xhr.onerror = () => { progressText.innerText = 'Erro ao enviar o ficheiro.'; console.error(xhr.statusText); }; // Configurar a requisição xhr.open('POST', '/api/ficheiro/upload', true); // Adicionar os cabeçalhos const headers = AUTH.ajaxHeaders; for (const key in headers) { if (headers.hasOwnProperty(key)) { xhr.setRequestHeader(key, headers[key]); } } // Enviar os dados xhr.send(formData); }); } } static AnalisaFicheiro() { let guid = $('#id_ficheiro').html(); API.get('ficheiro/analisar', function (res) { console.log(res); dados = JSON.parse(res); JSpage.CONFIG.BACKUPS.MostraDadosFicheiroTEMP(); }); } static MostraDadosFicheiroTEMP() { // Gerando HTML let _html = `

${dados.cemiterios}

${dados.seccoes}

${dados.sepulturas}

${dados.averbamentos}

${dados.inumacoes}

${dados.exumacoes}

${dados.anexos}

${dados.financeiros}

${FUNC.trataTamanhoDisco(dados.tamanho)}

`; $('#resultados').html(_html); $('#dados_ficheiro').removeClass('hidden'); $('#bt_analisa').addClass('hidden'); } static Comprimir() { $('#resultados_espaco').html('A comprimir... aguarde por favor!'); API.get('ficheiro/comprimir', function (res) { $('#bt_processar').removeClass('hidden'); $('#bt_comprimir').addClass('hidden'); JSpage.CONFIG.BACKUPS.AnalisaFicheiro() $('#resultados_espaco').html('

ATENÇÂO: Ao repor dados irá substituir toda a informação online.

'); }); } static ImportarFicheiro() { let pergunta = 'Deseja efetuar uma reposição de todos os dados?\nEsta ação é irreversível e irá substituir todos os dados online.'; let confirm = window.confirm(pergunta); if (confirm) { $('#resultados_espaco').html('A processar... aguarde por favor!'); //desabilitar o botao #btn_enviar $('#bt_processar').remove(); //colocar cursor aguardar $('body').css('cursor', 'wait'); API.get('ficheiro/importar', function (res) { if (res == 'OK') { $('#resultados_espaco').html('

Dados importados com sucesso!

'); $('#bt_processar').remove(); } }); } } } static LICENCA = class { static ConfigInicial() { AUTH.onlyAdmin(); AUTH.onlyClient(); } static filtraTabela() { } static afterLoadTabela() { } static NovoItem() { } static AfterGetData() { } static ValidaForm(continua) { continua(); } } static USERS = class { static ConfigInicial() { AUTH.onlyAdmin(); AUTH.onlyClient(); if (AUTH.localToken.userType == 'owner') { LOADPAGES.LoadPageLink('/config/bloqued'); } tabelaConfig.colunas = [ { data: 'data_registo', title: 'Data registo', render: function (data, type, row) { return FUNC.trataData(data); } }, { data: 'tipo', title: 'Tipo' }, { data: 'nome', title: 'Nome' }, { data: 'email', title: 'Email' } ]; tabelaConfig.rowId = 'id'; tabelaConfig.linkTableItem = '/config/users/editar/'; tabelaConfig.colDefs = []; } static NovoItem() { //apenas admin AUTH.onlyAdmin(); let novoItem = { "nome": "Novo utilizador", "id_cliente": "", "tipo": "user" }; API.post('utilizadores', novoItem, function (res) { LOADPAGES.LoadPageLink('/config/users/editar/' + res.id); }); } static EDITAR = class { static AfterGetData() { $('#bt_voltar1,#bt_voltar2').on('click', function () { LOADPAGES.LoadPageLink('/config/users/' + dados.id_cliente); }); $('#editDados').data('urldelete', '/config/users/' + dados.id_cliente); if (dados.estado == 'inativo' && dados.email == '') { $('#bt_eliminar').removeClass('hidden'); } else { $('#bt_eliminar').addClass('hidden'); } } static ValidaForm(continua) { continua(); } static AfterSave(res, continua) { continua(); if (dados.estado == 'inativo' && dados.email == '') { $('#bt_eliminar').removeClass('hidden'); } else { $('#bt_eliminar').addClass('hidden'); } } } } } static ADMIN = class { static ConfigInicial() { //apenas proprietário AUTH.onlyOwner(); tabelaConfig.colunas = [ { data: 'data_registo', title: 'Data', render: function (data, type, row) { return FUNC.trataApenasData(data); } }, { data: 'estado', title: 'Estado' }, { data: 'nome', title: 'Nome' }, { data: 'ate', title: 'Até' }, { data: 'espaco', title: 'Quota atual', render: function (data, type, row) { return FUNC.trataTamanhoDisco(data); } } ]; tabelaConfig.rowId = 'id'; tabelaConfig.linkTableItem = '/admin/cliente/'; tabelaConfig.colDefs = []; } static filtraTabela() { } static afterLoadTabela() { } static NovoItem() { let novoItem = { "nome": "Novo cliente" }; API.post('clientes', novoItem, LOADPAGES.LoadPage); } static RefreshQuota() { API.get('clientes/quotas', function (res) { if (res == 'OK') { FUNC.ReloadTable(); } else { FUNC.showAlert('danger', res, ''); } }); } static CLIENTE = class { static report_dados = null; static ConfigInicial() { //apenas proprietário AUTH.onlyOwner(); tabelaConfig.colunas = [ { data: 'data_registo', title: 'Data registo', render: function (data, type, row) { return FUNC.trataData(data); } }, { data: 'estado', title: 'Estado' }, { data: 'nome', title: 'Nome' }, { data: 'email', title: 'Email' }, { data: 'tipo', title: 'Tipo' } ]; tabelaConfig.rowId = 'id'; tabelaConfig.linkTableItem = '/admin/cliente/utilizador/'; tabelaConfig.colDefs = []; } static AfterGetData() { $('#nome_cli').html(dados.nome); //se url tiver ancora #users selecionar a tab users if (window.location.hash == '#users') { $('#nav-tab-2').tab('show'); } $('#bt_ficheiros').off('click').click(function () { JSpage.ADMIN.CLIENTE.AbreFicheirosDados(); }); $('#nav-tab-1').off('click').click(function () { window.location.hash = 'ficha'; }); $('#nav-tab-2').off('click').click(function () { window.location.hash = 'users'; }); $('#nav-tab-3').off('click').click(function () { window.location.hash = 'noti'; }); console.log(itemID); MostraNotificacoes(); function MostraNotificacoes() { API.get('clientes/notificacoes/' + itemID, function (res) { console.log(res); var lista = JSON.parse(res); //para cada item na lista res let _html = ''; lista.forEach(x => { //trata data (apenas data) x.data_registo = FUNC.trataApenasData(x.data_registo); _html += '' + x.data_registo + '' + x.cli_email + ''; }); if (lista.length == 0) { _html += 'Sem resultados.'; } $('#notificacoes').html(_html); }); } } static NovoItem() { //apenas proprietário AUTH.onlyOwner(); let novoItem = { "nome": "Novo utilizador", "id_cliente": dados.id }; API.post('utilizadores', novoItem, function (res) { LOADPAGES.LoadPageLink('/admin/cliente/utilizador/' + res.id); }); } static AbreFicheirosDados() { let _html = paginas.find(x => x.Nome == 'admin.cliente.ficheiros.html').Valor; $('#placer').html(_html); $('#cliente-ficheiros').modal('show'); $('#bt_report').off('click').click(function () { JSpage.ADMIN.CLIENTE.geraReport(); }); } static geraReport() { API.get('clientes/ficheiros/' + itemID, function (res) { JSpage.ADMIN.CLIENTE.report_dados = JSON.parse(res); mostraResultadosRelatorio(); }); function mostraResultadosRelatorio() { if (JSpage.ADMIN.CLIENTE.report_dados == null) { return; } let resultados = JSpage.ADMIN.CLIENTE.report_dados; let total_sep = resultados.sepulturas.length; let total_imp = resultados.impressos.filter(x => x.nome != '').length; let total_alv = resultados.alvaras.filter(x => x.nome != '').length; let total_ave = resultados.averbamentos.filter(x => x.nome != '').length; let total_bol = resultados.inumacoes.boletins.filter(x => x.nome != '').length; let total_inum_req = resultados.inumacoes.requerimentos.filter(x => x.nome != '').length; let total_dec = resultados.exumacoes.declaracoes.filter(x => x.nome != '').length; let total_exum_req = resultados.exumacoes.requerimentos.filter(x => x.nome != '').length; let total_anexos = resultados.anexosDoc.filter(x => x.nome != '').length; let total_registados = total_sep + total_imp + total_alv + total_ave + total_bol + total_inum_req + total_dec + total_exum_req + total_anexos; let total_enc_sep = resultados.sepulturas.filter(x => x.encontrado == true).length; let total_enc_imp = resultados.impressos.filter(x => x.encontrado == true && x.nome != '').length; let total_enc_alv = resultados.alvaras.filter(x => x.encontrado == true && x.nome != '').length; let total_enc_ave = resultados.averbamentos.filter(x => x.encontrado == true && x.nome != '').length; let total_enc_bol = resultados.inumacoes.boletins.filter(x => x.encontrado == true && x.nome != '').length; let total_enc_inum_req = resultados.inumacoes.requerimentos.filter(x => x.encontrado == true && x.nome != '').length; let total_enc_dec = resultados.exumacoes.declaracoes.filter(x => x.encontrado == true && x.nome != '').length; let total_enc_exum_req = resultados.exumacoes.requerimentos.filter(x => x.encontrado == true && x.nome != '').length; let total_enc_anexos = resultados.anexosDoc.filter(x => x.encontrado == true && x.nome != '').length; let total_encontrados = total_enc_sep + total_enc_imp + total_enc_alv + total_enc_ave + total_enc_bol + total_enc_inum_req + total_enc_dec + total_enc_exum_req + total_enc_anexos; let _html = ''; _html += 'Sepulturas (fotos)' + total_sep + '' + total_enc_sep + ''; _html += 'Docs Impressos' + total_imp + '' + total_enc_imp + ''; _html += 'Docs Alvarás' + total_alv + '' + total_enc_alv + ''; _html += 'Docs Averbamentos' + total_ave + '' + total_enc_ave + ''; _html += 'Docs Inumação Boletins' + total_bol + '' + total_enc_bol + ''; _html += 'Docs Inumação Requerimentos' + total_inum_req + '' + total_enc_inum_req + ''; _html += 'Docs Exumação Declaração' + total_dec + '' + total_enc_dec + ''; _html += 'Docs Exumação Requerimentos' + total_exum_req + '' + total_enc_exum_req + ''; _html += 'Docs Anexos' + total_anexos + '' + total_enc_anexos + ''; _html += 'Total' + total_registados + '' + total_encontrados + ''; _html += ''; $('#resultado_relatorio').html(_html); //ficheiros não encontrados let _html2 = '

'; resultados.sepulturas.filter(x => x.encontrado == false).forEach(x => { _html2 += '

' + x.cemiterioTitulo + ' > ' + x.seccaoTitulo + ' > ' + x.sepulturaCodigo + '

'; }); _html2 += '

'; resultados.impressos.filter(x => x.encontrado == false && x.nome != '').forEach(x => { _html2 += '

' + x.nome + '

'; }); _html2 += '

'; resultados.alvaras.filter(x => x.encontrado == false && x.nome != '').forEach(x => { _html2 += '

' + x.cemiterioTitulo + ' > ' + x.seccaoTitulo + ' > ' + x.sepulturaCodigo + ' > ' + x.nome + '

'; }); _html2 += '

'; resultados.averbamentos.filter(x => x.encontrado == false && x.nome != '').forEach(x => { _html2 += '

' + x.cemiterioTitulo + ' > ' + x.seccaoTitulo + ' > ' + x.sepulturaCodigo + ' > ' + x.nome + '

'; }); _html2 += '

'; resultados.inumacoes.boletins.filter(x => x.encontrado == false && x.nome != '').forEach(x => { _html2 += '

' + x.cemiterioTitulo + ' > ' + x.seccaoTitulo + ' > ' + x.sepulturaCodigo + ' > ' + x.nome + '

'; }); _html2 += '

'; resultados.inumacoes.requerimentos.filter(x => x.encontrado == false && x.nome != '').forEach(x => { _html2 += '

' + x.cemiterioTitulo + ' > ' + x.seccaoTitulo + ' > ' + x.sepulturaCodigo + ' > ' + x.nome + '

'; }); _html2 += '

'; resultados.exumacoes.declaracoes.filter(x => x.encontrado == false && x.nome != '').forEach(x => { _html2 += '

' + x.cemiterioTitulo + ' > ' + x.seccaoTitulo + ' > ' + x.sepulturaCodigo + ' > ' + x.nome + '

'; }); _html2 += '

'; resultados.exumacoes.requerimentos.filter(x => x.encontrado == false && x.nome != '').forEach(x => { _html2 += '

' + x.cemiterioTitulo + ' > ' + x.seccaoTitulo + ' > ' + x.sepulturaCodigo + ' > ' + x.nome + '

'; }); _html2 += '

'; resultados.anexosDoc.filter(x => x.encontrado == false && x.nome != '').forEach(x => { _html2 += '

' + x.cemiterioTitulo + ' > ' + x.seccaoTitulo + ' > ' + x.sepulturaCodigo + ' > ' + x.nome + '

'; }); let total_nao_encontrados = total_registados - total_encontrados; $('#total_nao_encontrados').html(total_nao_encontrados); $('#ficheiros_nao_encontrados').html(_html2); let total_encontrados_nao_registados = resultados.impressosExistentes.length + resultados.docsExistentes.length + resultados.fotosExistentes.length; $('#total_encontrados_nao_registados').html(total_encontrados_nao_registados); if (total_encontrados_nao_registados > 0) { $('#bt_eliminar_todos_nao_encontrados').removeClass('hidden'); } else { $('#bt_eliminar_todos_nao_encontrados').addClass('hidden'); } let _html3 = ''; let i = 0; resultados.fotosExistentes.forEach(x => { _html3 += '' + 'Foto #' + i + '' + 'Abrir' + 'Eliminar' + ''; i++; }); resultados.impressosExistentes.forEach(x => { _html3 += '' + 'Documento #' + i + '' + 'Abrir' + 'Eliminar' + ''; i++; }); resultados.docsExistentes.forEach(x => { _html3 += '' + 'Ficheiro #' + i + '' + 'Abrir' + 'Eliminar' + ''; i++; }); $('#ficheiros_encontrados_nao_registados').html(_html3); } } static EliminarFicheiro(d) { let id = $(d).data('id'); let confirm = window.confirm("Tem a certeza que deseja eliminar este ficheiro?"); if (confirm) { API.get('clientes/ficheiros/eliminar/' + itemID + '/doc/' + id, function (res) { FUNC.showAlert('success', 'Ficheiro eliminado com sucesso!', ''); $('#' + id).remove(); } ); } } static EliminarImpresso(d) { let id = $(d).data('id'); let confirm = window.confirm("Tem a certeza que deseja eliminar este ficheiro?"); if (confirm) { API.get('clientes/ficheiros/eliminar/' + itemID + '/imp/' + id, function (res) { FUNC.showAlert('success', 'Ficheiro eliminado com sucesso!', ''); $('#' + id).remove(); } ); } } static EliminarNaoEncontrados() { let confirm = window.confirm("Tem a certeza que deseja eliminar todos os ficheiros não registados?"); if (confirm) { JSpage.ADMIN.CLIENTE.report_dados.impressosExistentes.forEach(x => { API.get('clientes/ficheiros/eliminar/' + itemID + '/imp/' + x, function (res) { FUNC.showAlert('success', 'Ficheiro eliminado com sucesso!', ''); $('#' + x).remove(); } ); }); JSpage.ADMIN.CLIENTE.report_dados.fotosExistentes.forEach(x => { API.get('clientes/ficheiros/eliminar/' + itemID + '/foto/' + x, function (res) { FUNC.showAlert('success', 'Ficheiro eliminado com sucesso!', ''); $('#' + x).remove(); } ); }); JSpage.ADMIN.CLIENTE.report_dados.docsExistentes.forEach(x => { API.get('clientes/ficheiros/eliminar/' + itemID + '/doc/' + x, function (res) { FUNC.showAlert('success', 'Ficheiro eliminado com sucesso!', ''); $('#' + x).remove(); } ); }); } } static EDITAR = class { static ConfigInicial() { //apenas proprietário AUTH.onlyOwner(); } static AfterGetData() { $('#select_estado').val(dados.estado); } static ValidaForm(continua) { let novo_estado = $('#select_estado').val(); $('#txt_estado').val(novo_estado); //dados.storage.remoto = ($('#select_remoto').val() == 'true'); //dados.storage.ftp.port = $('#txt_storage_ftp_port').val(); //dados.storage.ftp.host = $('#txt_storage_ftp_host').val(); //dados.storage.ftp.login = $('#txt_storage_ftp_login').val(); //dados.storage.ftp.password = $('#txt_storage_ftp_password').val(); continua(); } static AfterSave(res, continua) { continua(); } } static UTILIZADOR = class { static ConfigInicial() { //apenas proprietário AUTH.onlyOwner(); } static AfterGetData() { $('#select_estado').val(dados.estado); $('#select_tipo').val(dados.tipo); $('#bt_voltar1,#bt_voltar2').on('click', function () { LOADPAGES.LoadPageLink('/admin/cliente/' + dados.id_cliente + '#users'); }); $('#editDados').data('urldelete', '/admin/cliente/' + dados.id_cliente + '#users'); if (dados.estado == 'inativo' && dados.email == '') { $('#bt_eliminar').removeClass('hidden'); } } static ValidaForm(continua) { let novo_estado = $('#select_estado').val(); let novo_tipo = $('#select_tipo').val(); $('#txt_estado').val(novo_estado); $('#txt_tipo').val(novo_tipo); continua(); } static AfterSave(res, continua) { continua(); if (dados.estado == 'inativo' && dados.email == '') { $('#bt_eliminar').removeClass('hidden'); } else { $('#bt_eliminar').addClass('hidden'); } } } } } static ACESSOS = class { static ConfigInicial() { if (AUTH.localToken.userType != 'owner') { AUTH.RedirectToForbiden(); } tabelaConfig.colunas = [ { data: 'data_registo', title: 'Data registo', render: function (data, type, row) { return FUNC.trataData(data); } }, { data: 'tipo', title: 'Tipo' }, { data: 'nome', title: 'Nome' }, { data: 'email', title: 'Email' } ]; tabelaConfig.rowId = 'id'; tabelaConfig.linkTableItem = '/acessos/editar/'; tabelaConfig.colDefs = []; } static NovoItem() { if (AUTH.localToken.userType != 'owner') { AUTH.RedirectToForbiden(); } let novoItem = { "nome": "Novo utilizador", "id_cliente": "", "tipo": "owner" }; API.post('utilizadores', novoItem, LOADPAGES.LoadPage); } static EDITAR = class { static AfterGetData() { if (AUTH.localToken.userType != 'owner') { AUTH.RedirectToForbiden(); } if (dados.estado == 'inativo' && dados.email == '') { $('#bt_eliminar').removeClass('hidden'); } else { $('#bt_eliminar').addClass('hidden'); } } static ValidaForm(continua) { continua(); } static AfterSave(res, continua) { continua(); if (dados.estado == 'inativo' && dados.email == '') { $('#bt_eliminar').removeClass('hidden'); } else { $('#bt_eliminar').addClass('hidden'); } } } } static HOME = class { static ConfigInicial() { if (AUTH.localToken.userType == 'user' || AUTH.localToken.userType == 'admin') { window.location.href = '/cemiterios'; return; } } static AfterGetData() { if (AUTH.localToken.userType == 'owner') { $('#txt_espaco').html(FUNC.trataTamanhoDisco(dados.espaco)); $('#txt_espaco_temp').html(FUNC.trataTamanhoDisco(dados.espaco_temp)); } } } static LOGOUT = class { static ConfigInicial() { AUTH.logout(); } } static ACCOUNT = class { static Config() { $('#txt_nome').html(AUTH.localToken.userName); $('#txt_email').html(AUTH.localToken.userEmail); $('#txt_tipo').html(AUTH.localToken.userType); $('#bt_alterar').off('click').click(function () { JSpage.ACCOUNT.AlterarPassword(); }); } static AlterarPassword() { //verifica se a password antiga está inserida (mínimo 6 caracteres) if ($('#txt_password_old').val().length < 6) { FUNC.showAlert('danger', 'Erro:
A password antiga deve ser preenchida!', ''); return; } if ($('#txt_password').val().length < 6) { FUNC.showAlert('danger', 'Erro:
A nova password deve ser preenchida!', ''); return; } //verifica se as novas passwords são iguais if ($('#txt_password').val() != $('#txt_password1').val()) { FUNC.showAlert('danger', 'Erro:
As passwords não são iguais!', ''); return; } let dados = { "old_password": $('#txt_password_old').val(), "new_password": $('#txt_password').val() } API.put('utilizadores/password', dados, function (res) { console.log(res); FUNC.showAlert('success', 'Password alterada com sucesso!', ''); }); } } static AUTH = class { static listaCLI = []; static CarregaDadosUtilizador() { let dadosUtilizador = AUTH.localToken; $('#userName').html(dadosUtilizador.userName); if (dadosUtilizador.userType != 'owner') { $('#clientName').html(dadosUtilizador.clientName); } else { let _html = paginas.find(x => x.Nome == 'auth.escolhe_cliente.html').Valor; $('#clientName').html(_html); $('#cliente_atual').html(dadosUtilizador.clientName); //load clientes API.get('clientes', function (res) { JSpage.AUTH.listaCLI = JSON.parse(res); let index = 0; JSpage.AUTH.listaCLI.forEach(x => { $('#listaCLI').append(''); index++; }); }); } } static ChangeCLI(index) { let id = JSpage.AUTH.listaCLI[index].id; let nome = JSpage.AUTH.listaCLI[index].nome; let dadosUtilizador = AUTH.localToken; dadosUtilizador.clientName = nome; dadosUtilizador.clientID = id; localStorage.setItem('token', JSON.stringify(dadosUtilizador)); document.cookie = `clientID=${encodeURIComponent(id)}; path=/;`; window.location.href = '/cemiterios'; } static defineMenu() { if (AUTH.localToken.clientID == '') { $('#menu-user').addClass('hidden'); } else { $('#menu-user').removeClass('hidden'); } } } } class MAPA { // Seleciona o mapa static mapa() { return document.getElementById('mapa') } static fundoMapa() { return document.getElementById('fundo_mapa') } static linkItem = ''; static ItemAtual = null; static arquivo = false; static margem_esquerda = 40; static margem_topo = 20; static proporcao = 20; static mostra_quadricula = false; static pode_criar_item = false; static pode_criar_linha = false; static pontoA_X = null; static pontoA_Y = null; static pontoB_X = null; static pontoB_Y = null; // Variável para armazenar o nível de zoom e posição inicial do mapa static zoomLevel = 1; // Define o incremento de zoom static zoomIncrement = 0.2; static posX = 0; static posY = 0; static isDragging = false; static startX; static startY; static InitialConfigCemiterio() { MAPA.linkItem = '/cemiterios/sepulturas/'; MAPA.mostraSeccoes(true, true, false); MAPA.mostraLinhas(); MAPA.accoesSeccoes(false, true, true); } static InitialConfigCemiterioAdmin() { $('#bt_arquivo').addClass('hidden'); MAPA.linkItem = '/config/cemiterios/editar/seccao/'; MAPA.mostraSeccoes(false, true, true); MAPA.mostraLinhasAdmin(); MAPA.accoesSeccoes(false, true, true); MAPA.carregaAccoesFerramentas(); } static InitialConfigSeccao() { MAPA.linkItem = '/cemiterios/sepulturas/detalhes/'; MAPA.mostraSepulturas(true, true, false); MAPA.mostraLinhas(); MAPA.carregaAccoesSepulturas(); } static InitialConfigSeccaoAdmin() { MAPA.linkItem = '/cemiterios/sepulturas/detalhes/'; MAPA.mostraSepulturas(false, true, true); MAPA.mostraLinhasAdmin(); MAPA.carregaAccoesFerramentas(); } static ajustarAlturaMapa() { const fundoMapa = document.getElementById("fundo_mapa"); const alturaJanela = window.innerHeight; fundoMapa.style.height = `${alturaJanela - 168}px`; } static zoom100() { MAPA.zoomLevel = 1; MAPA.fazZoomNoMapa(); } static maisZoom() { MAPA.zoomLevel += MAPA.zoomIncrement; // Zoom in MAPA.fazZoomNoMapa(); } static menosZoom() { MAPA.zoomLevel = Math.max(0.2, MAPA.zoomLevel - MAPA.zoomIncrement); // Zoom out, limite mínimo de 0.5x MAPA.fazZoomNoMapa(); } static configScrolleEventos(podeZoom, podeDrag, podeEditar) { MAPA.ajustarAlturaMapa(); // Adiciona o evento de scroll do mouse para zoom if (podeZoom) { MAPA.EventoZoomMapa(); } if (podeDrag) { MAPA.EventoDragMapa(); } if (podeEditar) { MAPA.EventoClickItemMapa(); MAPA.EventoMouseMoveMapa(); } } static EventoZoomMapa() { MAPA.fundoMapa().addEventListener('wheel', (event) => { event.preventDefault(); // Aumenta ou diminui o zoom com base na rotação da roda do mouse if (event.deltaY < 0) { MAPA.zoomLevel += MAPA.zoomIncrement; // Zoom in } else { MAPA.zoomLevel = Math.max(0.5, MAPA.zoomLevel - MAPA.zoomIncrement); // Zoom out, limite mínimo de 0.5x } MAPA.fazZoomNoMapa(); }); // Adiciona evento de zoom com dois dedos no mobile MAPA.fundoMapa().addEventListener('touchmove', (event) => { if (event.touches.length == 2) { event.preventDefault(); let touch1 = event.touches[0]; let touch2 = event.touches[1]; let distance = Math.sqrt( Math.pow(touch2.clientX - touch1.clientX, 2) + Math.pow(touch2.clientY - touch1.clientY, 2) ); if (!MAPA.lastTouchDistance) { MAPA.lastTouchDistance = distance; return; } let zoomChange = (distance - MAPA.lastTouchDistance) * 0.01; MAPA.zoomLevel = Math.max(0.5, MAPA.zoomLevel + zoomChange); MAPA.fazZoomNoMapa(); MAPA.lastTouchDistance = distance; } }); document.addEventListener('touchend', () => { MAPA.lastTouchDistance = null; }); } static EventoDragMapa() { // Variável para rastrear se o mouse foi movido let mouseMoved = false; // Eventos para arrastar o mapa MAPA.mapa().addEventListener('mousedown', (event) => { MAPA.isDragging = true; MAPA.startX = event.clientX - MAPA.posX; MAPA.startY = event.clientY - MAPA.posY; mouseMoved = false; if (pageID.startsWith('config') && MAPA.mostra_quadricula == true) { mapa.style.cursor = 'crossair'; } else { mapa.style.cursor = 'grabbing'; } }); MAPA.mapa().addEventListener('mousemove', (event) => { if (MAPA.isDragging) { MAPA.posX = (event.clientX - MAPA.startX) / MAPA.zoomLevel; MAPA.posY = (event.clientY - MAPA.startY) / MAPA.zoomLevel; mouseMoved = true; // Aplica transformações de escala e posição MAPA.mapa().style.transform = `scale(${MAPA.zoomLevel}) translate(${MAPA.posX}px, ${MAPA.posY}px)`; MAPA.fundoMapa().style.backgroundPosition = `${MAPA.posX}px ${MAPA.posY}px`; } }); document.addEventListener('mouseup', () => { MAPA.isDragging = false; if (MAPA.mapa() != null) { if (pageID.startsWith('config') && MAPA.mostra_quadricula == true) { MAPA.mapa().style.cursor = 'crossair'; } else { MAPA.mapa().style.cursor = 'grab'; } } }); // Eventos para arrastar com toque no mobile MAPA.mapa().addEventListener('touchstart', (event) => { MAPA.isDragging = true; MAPA.startX = event.touches[0].clientX - MAPA.posX; MAPA.startY = event.touches[0].clientY - MAPA.posY; mouseMoved = false; }); document.addEventListener('touchmove', (event) => { if (MAPA.isDragging) { MAPA.posX = event.touches[0].clientX - MAPA.startX; MAPA.posY = event.touches[0].clientY - MAPA.startY; mouseMoved = true; MAPA.mapa().style.transform = `scale(${MAPA.zoomLevel}) translate(${MAPA.posX}px, ${MAPA.posY}px)`; MAPA.fundoMapa().style.backgroundPosition = `${MAPA.posX}px ${MAPA.posY}px`; // Ajuste a velocidade do fundo dividindo por um valor } }); // Adicionar evento de clique no canvas //MAPA.mapa().addEventListener('click', (event) => { // if (!mouseMoved) { // console.log('nao moveu'); // const rect = MAPA.mapa().getBoundingClientRect(); // const scaleX = MAPA.mapa().width / rect.width; // const scaleY = MAPA.mapa().height / rect.height; // const pos = { // x: (event.clientX - rect.left) * scaleX, // y: (event.clientY - rect.top) * scaleY // }; // console.log(pos); // // Verificar se o clique está dentro do círculo // dados.linhas.forEach(linha => { // const a = (linha.pontoA_X * MAPA.proporcao + MAPA.margem_esquerda) * MAPA.zoomLevel; // const b = (linha.pontoA_Y * MAPA.proporcao + MAPA.margem_topo) * MAPA.zoomLevel; // const c = (linha.pontoB_X * MAPA.proporcao + MAPA.margem_esquerda) * MAPA.zoomLevel; // const d = (linha.pontoB_Y * MAPA.proporcao + MAPA.margem_topo) * MAPA.zoomLevel; // const midX = (a + c) / 2; // const midY = (b + d) / 2; // const radius = 10; // const dist = Math.sqrt((pos.x - midX) ** 2 + (pos.y - midY) ** 2); // if (dist <= radius) { // console.log('Círculo clicado:', linha); // MAPA.editaLinhaX(linha); // } // }); // } // else { // console.log('moveu'); // } //}); } static EventoClickItemMapa() { // Remove o evento, caso já tenha sido atribuído MAPA.mapa().removeEventListener('dblclick', handleDblClick); MAPA.mapa().removeEventListener('click', handleClick); // Evita adicionar múltiplos eventos if (!MAPA.eventoBblClickAdicionado) { MAPA.eventoBblClickAdicionado = true; MAPA.mapa().addEventListener('dblclick', handleDblClick); } // Evita adicionar múltiplos eventos if (!MAPA.eventoClickAdicionado) { MAPA.eventoClickAdicionado = true; MAPA.mapa().addEventListener('click', handleClick); } // Define a função de callback para reutilização function handleDblClick(event) { event.preventDefault(); } function handleClick(event) { event.preventDefault(); if (MAPA.mostra_quadricula && MAPA.pode_criar_item) { let pos = MAPA.posicaoMouseXY(event); $('#novo_item_posicaoX').val(pos.x); $('#novo_item_posicaoY').val(pos.y); $('#novoItem').modal('show'); } if (MAPA.mostra_quadricula && MAPA.pode_criar_linha) { let pos = MAPA.posicaoMouseXY(event); let linha = dados.linhas.find(x => x.pontoA_X == pos.x && x.pontoA_Y == pos.y); if (linha != null) { MAPA.editaLinhaX(linha); } else { if (MAPA.pontoA_X == null && MAPA.pontoA_Y == null) { MAPA.pontoA_X = pos.x; MAPA.pontoA_Y = pos.y; MAPA.pontoB_X = null; MAPA.pontoB_Y = null; $('#coordenadas_linha').html('Nova linha [x: ' + MAPA.pontoA_X + ', y: ' + MAPA.pontoA_Y + '] clique para finalizar...'); return; } else { MAPA.pontoB_X = pos.x; MAPA.pontoB_Y = pos.y; itemAtual = { "id": "", "pontoA_X": MAPA.pontoA_X, "pontoA_Y": MAPA.pontoA_Y, "pontoB_X": MAPA.pontoB_X, "pontoB_Y": MAPA.pontoB_Y, "width": 2, "corHex": "#ff0000" }; MAPA.editaLinhaX(itemAtual); } } } } } // ao mover o mouse no mapa static EventoMouseMoveMapa() { MAPA.mapa().addEventListener('mousemove', (event) => { let pos = MAPA.posicaoMouseXY(event); //devolver ao quadro $('#posicaoX').html(pos.x); $('#posicaoY').html(pos.y); if (MAPA.mostra_quadricula && MAPA.pode_criar_linha) { let pos = MAPA.posicaoMouseXY(event); let linha = dados.linhas.find(x => x.pontoA_X == pos.x && x.pontoA_Y == pos.y); if (linha != null) { //cursor para editar $('#mapa').css('cursor', 'pointer'); } else { $('#mapa').css('cursor', 'crosshair'); } } }); } static centralizaMapa() { const fundoMapa = MAPA.fundoMapa(); const mapa = MAPA.mapa(); const zoomLevel = MAPA.zoomLevel; // Tamanho do fundo e do mapa em relação ao zoom aplicado const larguraFundo = fundoMapa.offsetWidth; const alturaFundo = fundoMapa.offsetHeight; const larguraMapa = mapa.offsetWidth * zoomLevel; const alturaMapa = mapa.offsetHeight * zoomLevel; // Calcula as coordenadas para centralizar MAPA.posX = (larguraFundo - larguraMapa) / (2 * zoomLevel); MAPA.posY = (alturaFundo - alturaMapa) / (2 * zoomLevel); } static fazZoomNoMapa() { /*MAPA.centralizaMapa();*/ let percentagem = Math.floor(MAPA.zoomLevel * 100); $('#zoom').html(percentagem + '%'); // Define o ponto de origem do zoom para o canto superior esquerdo MAPA.mapa().style.transformOrigin = '0 0'; // Aplica o zoom mantendo o mapa no top: 0, left: 0 MAPA.mapa().style.transform = `scale(${MAPA.zoomLevel})`; /*MAPA.mapa().style.transform = `scale(${MAPA.zoomLevel}) translate(${MAPA.posX}px, ${MAPA.posY}px)`;*/ } static posicaoMouseXY(event) { const rect = MAPA.mapa().getBoundingClientRect(); let x = event.clientX - rect.left; let y = event.clientY - rect.top; //corrigir posição x = x - MAPA.margem_esquerda; y = y - MAPA.margem_topo; //corrigir proporcao x = x / MAPA.proporcao / MAPA.zoomLevel; y = y / MAPA.proporcao / MAPA.zoomLevel; if (x < 0) x = 0; if (y < 0) y = 0; x = Math.floor(x); y = Math.floor(y); return { x, y }; } static configContext(tipo) { const container = MAPA.mapa(); const itens = document.querySelectorAll('.' + tipo); const contextMenu = document.querySelector('.itemContext'); // Exibir o menu de contexto ao clicar com o botão direito em qualquer seção if (itens != null) { itens.forEach(el => { el.addEventListener('contextmenu', (e) => { e.preventDefault(); // Torne o menu de contexto visível contextMenu.style.display = 'block'; // Defina a posição do menu em relação à tela contextMenu.style.top = `${e.clientY}px`; contextMenu.style.left = `${e.clientX}px`; // Guarde a referência da seção atual, se necessário contextMenu.currentSection = el.getAttribute('id'); }); }); } if (contextMenu != null) { // Ocultar o menu ao clicar fora document.addEventListener('click', () => { contextMenu.style.display = 'none'; }); // Exemplo de ação para cada item do menu contextMenu.addEventListener('click', (e) => { if (e.target.tagName === 'LI') { let accao = e.target.textContent; MAPA.accaoMenuContexto(accao, tipo, contextMenu); contextMenu.style.display = 'none'; } }); } } static accaoMenuContexto(accao, tipo, contextMenu) { if (accao == 'Editar') { MAPA.openModalEditarItem(tipo, contextMenu.currentSection); } if (accao == 'Eliminar') { MAPA.eliminarItem(tipo, contextMenu.currentSection); } if (accao == 'Arquivar') { MAPA.arquivarItem(tipo, contextMenu.currentSection); } if (accao == 'Publicar') { MAPA.publicarItem(tipo, contextMenu.currentSection); } } static mostraSeccoes(podeZoom, podeDrag, podeEditar) { let _html = ''; lista = dados.seccoes; lista.forEach((el) => { _html += MAPA.modeloSeccao(el); }); $('#mapa').html(_html); MAPA.carregaAccoesSeccoes(); if (podeEditar == true) { MAPA.configContext('seccao'); } MAPA.configScrolleEventos(podeZoom, podeDrag, podeEditar); } static accoesSeccoes(podeZoom, podeDrag, podeEditar) { MAPA.carregaAccoesSeccoes(); if (podeEditar == true) { MAPA.configContext('seccao'); } MAPA.configScrolleEventos(podeZoom, podeDrag, podeEditar); } static mostraLinhas() { let _html = $('#mapa').html(); _html = ' ' + _html; $('#mapa').html(_html); MAPA.desenharLinhas(); } static mostraLinhasAdmin() { let _html = $('#mapa').html(); _html += ' '; $('#mapa').html(_html); MAPA.desenharLinhasEditar(); } // Função para desenhar as linhas no canvas static desenharLinhas() { const divMapa = document.getElementById('mapa'); const canvas = document.getElementById('canvas_mapa'); const ctx = canvas.getContext('2d'); // Ajusta o tamanho do canvas para coincidir com o tamanho da div canvas.width = divMapa.offsetWidth; canvas.height = divMapa.offsetHeight; // Limpar o canvas ctx.clearRect(0, 0, canvas.width, canvas.height); // Percorre as linhas e desenha dados.linhas.forEach(linha => { const a = zoom_factor(linha.pontoA_X * MAPA.proporcao + MAPA.margem_esquerda); const b = zoom_factor(linha.pontoA_Y * MAPA.proporcao + MAPA.margem_topo); const c = zoom_factor(linha.pontoB_X * MAPA.proporcao + MAPA.margem_esquerda); const d = zoom_factor(linha.pontoB_Y * MAPA.proporcao + MAPA.margem_topo); const f = zoom_factor(linha.width); ctx.beginPath(); ctx.moveTo(a, b); ctx.lineTo(c, d); ctx.strokeStyle = linha.corHex; ctx.lineWidth = f; ctx.stroke(); }); function zoom_factor(value) { const zoom = MAPA.zoomLevel; return Math.round(value * zoom); } } static desenharLinhasEditar() { const divMapa = document.getElementById('mapa'); const canvas = document.getElementById('canvas_mapa'); const ctx = canvas.getContext('2d'); // Ajusta o tamanho do canvas para coincidir com o tamanho da div canvas.width = divMapa.offsetWidth; canvas.height = divMapa.offsetHeight; // Limpar o canvas ctx.clearRect(0, 0, canvas.width, canvas.height); // Percorre as linhas e desenha let index = 0; dados.linhas.forEach(linha => { const a = zoom_factor(linha.pontoA_X * MAPA.proporcao + MAPA.margem_esquerda); const b = zoom_factor(linha.pontoA_Y * MAPA.proporcao + MAPA.margem_topo); const c = zoom_factor(linha.pontoB_X * MAPA.proporcao + MAPA.margem_esquerda); const d = zoom_factor(linha.pontoB_Y * MAPA.proporcao + MAPA.margem_topo); const f = zoom_factor(linha.width); ctx.beginPath(); ctx.moveTo(a, b); ctx.lineTo(c, d); ctx.strokeStyle = linha.corHex; ctx.lineWidth = f; ctx.stroke(); //desenhar um circulo raio 10 a meio da linha e adicionar um evento click nesse cirulo e fazer console.log da linha atual //ctx.beginPath(); //ctx.arc((a + c) / 2, (b + d) / 2, 10, 0, 2 * Math.PI); //ctx.fillStyle = 'red'; //ctx.fill(); //const quadradoSize = 20; // Tamanho do quadrado //const halfSize = quadradoSize / 2; //ctx.fillStyle = 'blue'; //ctx.fillRect(a, b, quadradoSize, quadradoSize); // Desenhar o quadrado azul no ponto inicial (pontoA) com o index da linha ctx.fillStyle = 'blue'; ctx.fillRect(a, b, 20, 20); ctx.font = '11px Arial'; ctx.fillStyle = 'white'; ctx.fillText(index, a + 5, b + 15); index++; }); function zoom_factor(value) { const zoom = MAPA.zoomLevel; return Math.round(value * zoom); } } static editaLinhaX(linha) { itemAtual = linha; FUNC.popularForm($('#editaLinha'), itemAtual); MAPA.pontoA_X = null; MAPA.pontoA_Y = null; MAPA.pontoB_X = null; MAPA.pontoB_Y = null; $('#coordenadas_linha').html(''); $('#editaLinha').modal('show'); } static modeloSeccao(seccao) { let el = { ...seccao } el.altura = el.altura * MAPA.proporcao; el.largura = el.largura * MAPA.proporcao; el.posicaoX = el.posicaoX * MAPA.proporcao + MAPA.margem_esquerda; el.posicaoY = el.posicaoY * MAPA.proporcao + MAPA.margem_topo; let _html = `
{titulo}
{nsepulturas}
`; _html = FUNC.popularHtml(_html, el); return _html; } static carregaAccoesSeccoes() { // Adiciona evento de clique em cada seção para redirecionar let seccoes = document.querySelectorAll('.seccao'); seccoes.forEach(seccao => { let accao = 'dblclick'; if (pageID == 'cemiterios.seccoes') { accao = 'click' } seccao.addEventListener(accao, (event) => { let _id = seccao.getAttribute('id'); if (accao == 'dblclick') { location.href = MAPA.linkItem + itemID + FUNC.separador + _id; } else { LOADPAGES.LoadPageLink(MAPA.linkItem + itemID + FUNC.separador + _id); } }); }); } static mostraSepulturas(podeZoom, podeDrag, podeEditar) { MAPA.zoom100(); let _html = ''; lista = dados.sepulturas; if (MAPA.arquivo) { lista = dados.arquivo; } lista.forEach((el) => { _html += MAPA.modeloSepultura(el); }); $('#mapa').html(_html); MAPA.configScrolleEventos(podeZoom, podeDrag, podeEditar); if (MAPA.arquivo == true) { $('#txt_arquivar').html('Eliminar'); $('#accao_right').html('Eliminar'); $('#accao_publicar').removeClass('hidden'); } else { $('#txt_arquivar').html('Arquivar'); $('#accao_right').html('Arquivar'); $('#accao_publicar').addClass('hidden'); } //MAPA.carregaAccoesSepulturas(); } static modeloSepultura(sep) { let el = { ...sep } el.altura = el.altura * MAPA.proporcao; el.largura = el.largura * MAPA.proporcao; el.posicaoX = el.posicaoX * MAPA.proporcao + MAPA.margem_esquerda; el.posicaoY = el.posicaoY * MAPA.proporcao + MAPA.margem_topo; let _html = `
{codigo}
`; if (pageID != 'cemiterios.sepulturas') { _html = `
{codigo}
`; } _html = FUNC.popularHtml(_html, el); return _html; } static carregaAccoesSepulturas() { MAPA.defineAcaoEliminarSepultura(); //definir acção quando clicar nos elementos com a classe sepultura $('.sepultura').off('click').click(function () { let _id = $(this).attr('id'); if (pageID == 'cemiterios.sepulturas') { LOADPAGES.LoadPageLink(MAPA.linkItem + itemID + FUNC.separador + _id); } else { MAPA.openModalEditarItem('sepultura', _id); } }); //$('.sepultura').off('click').click(function () { // console.log('click'); //}); // Adiciona evento de clique em cada seção para redirecionar //let itens = document.querySelectorAll('.sepultura'); //itens.forEach(el => { // el.addEventListener('click', (e) => { // let _id = el.getAttribute('id'); // if (pageID == 'cemiterios.sepulturas') { // LOADPAGES.LoadPageLink(MAPA.linkItem + itemID + FUNC.separador + _id); // } // else { // MAPA.openModalEditarItem('sepultura', _id); // } // }); //}); } static VerArquivo() { MAPA.arquivo = !MAPA.arquivo; MAPA.mostraSepulturas(false, true, true); } static defineAcaoEliminarSepultura() { if (MAPA.arquivo == true) { $('#Li_DEL_Item').html('Publicar'); $('#Li_DEL_Item1').removeClass('hidden'); $('#bt_arquivo').removeClass('btn-outline btn-outline-info'); $('#bt_arquivo').addClass('btn-info'); $('#arquivo').removeClass('hidden'); } else { $('#Li_DEL_Item1').addClass('hidden'); $('#Li_DEL_Item').html('Arquivar'); $('#bt_arquivo').addClass('btn-outline btn-outline-info'); $('#bt_arquivo').removeClass('btn-info'); $('#arquivo').addClass('hidden'); } } static carregaAccoesFerramentas() { $('#bt-quadricula').on('click', function () { if (MAPA.mostra_quadricula == true) { MAPA.pode_criar_linha = false; MAPA.pode_criar_item = false; MAPA.mostra_quadricula = false; } else { MAPA.pode_criar_linha = false; MAPA.pode_criar_item = true; MAPA.mostra_quadricula = true; } MAPA.activateBtMenu(); }); $('#bt-seccao').on('click', function () { if (!MAPA.pode_criar_item) { MAPA.pode_criar_linha = false; MAPA.pode_criar_item = true; MAPA.mostra_quadricula = true; } MAPA.activateBtMenu(); }); $('#bt-linha').on('click', function () { if (!MAPA.pode_criar_linha) { MAPA.pode_criar_linha = true; MAPA.pode_criar_item = false; MAPA.mostra_quadricula = true; } MAPA.activateBtMenu(); }); } static activateBtMenu() { if (MAPA.mostra_quadricula) { $('#bt-quadricula').addClass('active'); $('#fundo_mapa').addClass('quadricula'); //define cursor para cruz $('#mapa').css('cursor', 'crosshair'); } else { $('#bt-quadricula').removeClass('active'); $('#fundo_mapa').removeClass('quadricula'); } if (MAPA.pode_criar_item) { $('#bt-seccao').addClass('active'); } else { $('#bt-seccao').removeClass('active'); } if (MAPA.pode_criar_linha) { $('#bt-linha').addClass('active'); } else { $('#bt-linha').removeClass('active'); } } static openModalEditarItem(tipo, id) { let el = lista.find(x => x.id == id); MAPA.ItemAtual = el; FUNC.popularForm($('#editarItemMapa'), el); $('#editarItemMapa').modal('show'); } static eliminarItem(tipo, id) { if (tipo == 'seccao') { API.del('seccoes/' + itemID + FUNC.separador + id, null, function (res) { LOADPAGES.LoadPage(); }); } else { API.del('sepulturas/' + itemID + FUNC.separador + id, null, function (res) { LOADPAGES.LoadPage(); }); } } static arquivarItem(tipo, id) { if (tipo == 'sepultura') { API.put('sepulturas/arquivar/' + itemID + FUNC.separador + id, null, function (res) { FUNC.showAlert('success', 'Sepultura arquivada com sucesso!', ''); LOADPAGES.LoadPage(); }); } } static publicarItem(tipo, id) { if (tipo == 'sepultura') { API.put('sepulturas/publicar/' + itemID + FUNC.separador + id, null, function (res) { FUNC.showAlert('success', 'Sepultura publicada com sucesso!', ''); LOADPAGES.LoadPage(); }); } } static gravarSeccao() { MAPA.ItemAtual.titulo = $('#item_titulo').val(); MAPA.ItemAtual.posicaoX = $('#item_posicaoX').val(); MAPA.ItemAtual.posicaoY = $('#item_posicaoY').val(); MAPA.ItemAtual.altura = $('#item_altura').val(); MAPA.ItemAtual.largura = $('#item_largura').val(); API.put('seccoes/' + itemID, MAPA.ItemAtual, function (res) { if (res == 'OK') { FUNC.fechaModal(); MAPA.mostraSeccoes(false, true, true); } else { FUNC.showAlert('danger', res, ''); } }); // anula a secção atual MAPA.ItemAtual = null; } static gravarSepultura() { MAPA.ItemAtual.codigo = $('#item_codigo').val(); MAPA.ItemAtual.posicaoX = $('#item_posicaoX').val(); MAPA.ItemAtual.posicaoY = $('#item_posicaoY').val(); MAPA.ItemAtual.altura = $('#item_altura').val(); MAPA.ItemAtual.largura = $('#item_largura').val(); API.put('sepulturas/' + itemID, MAPA.ItemAtual, function (res) { if (res == 'OK') { FUNC.fechaModal(); MAPA.mostraSepulturas(false, true, true); } else { FUNC.showAlert('danger', res, ''); } }); // anula a secção atual MAPA.ItemAtual = null; } static gravarLinha() { FUNC.popularObjectoFormulario('editaLinha', itemAtual, 'novo_', ''); API.put('linhas/' + itemID, itemAtual, function (res) { itemAtual.id = res; dados.linhas.push(itemAtual); FUNC.fechaModal(); MAPA.desenharLinhasEditar(); }); } static eliminarLinha() { API.del('linhas/' + itemID + '=' + itemAtual.id, null, function (res) { if (res == 'OK') { FUNC.fechaModal(); dados.linhas = dados.linhas.filter(x => x.id != itemAtual.id); MAPA.desenharLinhasEditar(); } else { FUNC.showAlert('danger', res, ''); } }); } static novaSeccao() { let novo = { "id": FUNC.generateGuid(), "titulo": $('#novo_item_titulo').val(), "posicaoX": $('#novo_item_posicaoX').val(), "posicaoY": $('#novo_item_posicaoY').val(), "largura": $('#novo_item_largura').val(), "altura": $('#novo_item_altura').val(), "nsepulturas": 0, "arquivo": [], "linhas": [] }; API.post('seccoes/' + itemID, novo, function (res) { if (res == 'OK') { FUNC.fechaModal(); dados.seccoes.push(novo); MAPA.mostraSeccoes(false, true, true); } else { FUNC.showAlert('danger', res, ''); } }); } static novaSepultura() { let novo = { "id": FUNC.generateGuid(), "codigo": $('#novo_item_codigo').val(), "posicaoX": $('#novo_item_posicaoX').val(), "posicaoY": $('#novo_item_posicaoY').val(), "largura": $('#novo_item_largura').val(), "altura": $('#novo_item_altura').val(), "pode_enterrar": true, "estado": 0 }; API.post('sepulturas/' + itemID + FUNC.separador + MAPA.arquivo, novo, function (res) { if (res == 'OK') { FUNC.fechaModal(); if (MAPA.arquivo) { dados.arquivo.push(novo); } else { dados.sepulturas.push(novo); } MAPA.mostraSepulturas(false, true, true); } else { FUNC.showAlert('danger', res, ''); } }); } static clickSepultura(t) { let _id = $(t).attr('id'); if (pageID == 'cemiterios.sepulturas') { LOADPAGES.LoadPageLink(MAPA.linkItem + itemID + FUNC.separador + _id); } else { if (MAPA.mostra_quadricula == false) { MAPA.openModalEditarItem('sepultura', _id); } } } static rightClickSepultura(e, el) { const contextMenu = document.querySelector('.itemContext'); // Exibir o menu de contexto ao clicar com o botão direito em qualquer sepultura e.preventDefault(); // Torne o menu de contexto visível contextMenu.style.display = 'block'; // Defina a posição do menu em relação à tela contextMenu.style.top = `${e.clientY}px`; contextMenu.style.left = `${e.clientX}px`; // Guarde a referência da seção atual, se necessário let _id = el.getAttribute('id'); if (contextMenu != null) { // Ocultar o menu ao clicar fora document.addEventListener('click', () => { contextMenu.style.display = 'none'; }); // Exemplo de ação para cada item do menu contextMenu.addEventListener('click', (e) => { if (e.target.tagName === 'LI') { let accao = e.target.textContent; if (accao == 'Editar') { MAPA.openModalEditarItem('sepultura', _id); } if (accao == 'Eliminar') { MAPA.eliminarItem('sepultura', _id); } if (accao == 'Arquivar') { MAPA.arquivarItem('sepultura', _id); } if (accao == 'Publicar') { MAPA.publicarItem('sepultura', _id); } contextMenu.style.display = 'none'; } }); } } static arquivarSepultura() { FUNC.fechaModal(); if (MAPA.arquivo == true) { MAPA.eliminarItem('sepultura', MAPA.ItemAtual.id); } else { MAPA.arquivarItem('sepultura', MAPA.ItemAtual.id); } } } const MENU = class { static OnMenuClick() { $('.openMenu').on('click', function () { MENU.AbreMenu(); }); $('.closeMenu').on('click', function () { MENU.FechaMenu(); }); const _menu = document.querySelector('#menu'); _menu.addEventListener('mouseleave', () => MENU.FechaMenu()); //add event listener to the menu on mouse over _menu.addEventListener('mouseover', () => MENU.AbreMenu()); menu.addEventListener('transitionend', () => { // Verifica se o menu está na posição -248px if (window.getComputedStyle(menu).left === '-248px') { menu.classList.remove('closed'); } }); if (AUTH.localToken.userType != 'user' && AUTH.localToken.clientID != '') { $('#config-gerais').removeClass('hidden'); } else { $('#config-gerais').addClass('hidden'); } } static AbreMenu() { $('#menu').addClass('open'); $('#menu').removeClass('closed'); } static FechaMenu() { $('#menu').removeClass('open'); $('#menu').addClass('closed'); } } var rand = FUNC.newRand(); FUNC.ajaxLoading(); $(document).ready(function () { if (FUNC.getRouteAtIndex(3) != 'login') { AUTH.verifyToken(next); } else { AUTH.carregaLogin(); } // se o url tiver 'teste.gersi' definir $('#path') como teste if (window.location.href.indexOf('teste.gersi') > -1) { $('#path').html('Plataforma de TESTES'); $('#path').removeClass('hidden'); } }); function next() { JSpage.AUTH.CarregaDadosUtilizador(); LOADPAGES.LoadInicial(); MENU.OnMenuClick(); } if ($.fn.dataTable != null) { $.extend(true, $.fn.dataTable.defaults, { pagingType: 'full_numbers', language: { lengthMenu: "_MENU_ itens por página", zeroRecords: "Não foram encontrados resultados.", emptyTable: "-", info: "_PAGE_ / _PAGES_ de _TOTAL_ itens", search: "_INPUT_", searchPlaceholder: "Pesquisar...", thousands: " ", infoEmpty: "Não foram encontrados resultados.", infoFiltered: "(resultados filtrados de _MAX_ itens)", paginate: { first: '', previous: '', next: '', last: '' }, select: { rows: "%d itens selecionados" } } }); }