class GERAL {
static listas = [];
static agencias = [];
static localizacoes = [];
static Load_select_agencias(id) {
let opcoes = GERAL.agencias;
let _html = ' ';
opcoes.forEach(x => {
_html += '' + x.nome + ' ';
});
$(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 += '' + x.titulo + ' ';
});
$('#' + 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 += '' + x.titulo + ' ';
});
$('#' + 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 += '' + x.codigo + ' ';
});
$('#' + 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 += '' + x.valor + ' ';
});
$('#edit_tipo').html(_html);
}
}
static CarregaAlvara() {
$('#edit_alvara_link').html(' ');
$('#txt_alvara_link').html(' ');
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 += '' + x.valor + ' ';
});
$('#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(' ');
API.putFile('application/pdf', null, 'sepulturas/inumacao/boletim/' + itemID + '=' + itemAtual.id, function (res) {
$('#edit_boletim').html(res);
LOADPAGES.dadosObjetosListas();
});
}
static AnexaRequerimento() {
$('#edit_requerimento').html(' ');
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(' ');
API.putFile('application/pdf', null, 'sepulturas/exumacao/declaracao/' + itemID + '=' + itemAtual.id, function (res) {
$('#edit_declaracao').html(res);
LOADPAGES.dadosObjetosListas();
});
}
static AnexaRequerimento() {
$('#edit_requerimento').html(' ');
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(' ');
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 += '' + x.valor + ' ';
});
$('#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 += '' + x.valor + ' ';
});
$('#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 += '' + x.defunto + ' ';
});
$('#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 += '' + x.valor + ' ';
});
$('#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 += '' + x.valor + ' ';
});
$('#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 += '' + x.valor + ' ';
});
$('#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 += '' + x.titulo + ' ';
});
$('#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 += '' + x.titulo + ' ';
});
_html = 'Todos ' + _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: O ficheiro será eliminado automaticamente dentro de 5 minutos.
' +
'
Fechar ';
$('#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 = `
Cemitérios: ${dados.cemiterios}
Seções: ${dados.seccoes}
Sepulturas: ${dados.sepulturas}
Averbamentos: ${dados.averbamentos}
Inumações: ${dados.inumacoes}
Exumações: ${dados.exumacoes}
Anexos: ${dados.anexos}
Financeiros: ${dados.financeiros}
Espaço: ${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 = 'Fotos sepulturas
';
resultados.sepulturas.filter(x => x.encontrado == false).forEach(x => {
_html2 += '' + x.cemiterioTitulo + ' > ' + x.seccaoTitulo + ' > ' + x.sepulturaCodigo + '
';
});
_html2 += 'Impressos
';
resultados.impressos.filter(x => x.encontrado == false && x.nome != '').forEach(x => {
_html2 += '' + x.nome + '
';
});
_html2 += 'Alvarás
';
resultados.alvaras.filter(x => x.encontrado == false && x.nome != '').forEach(x => {
_html2 += '' + x.cemiterioTitulo + ' > ' + x.seccaoTitulo + ' > ' + x.sepulturaCodigo + ' > ' + x.nome + '
';
});
_html2 += 'Averbamentos
';
resultados.averbamentos.filter(x => x.encontrado == false && x.nome != '').forEach(x => {
_html2 += '' + x.cemiterioTitulo + ' > ' + x.seccaoTitulo + ' > ' + x.sepulturaCodigo + ' > ' + x.nome + '
';
});
_html2 += 'Inumação Boletins
';
resultados.inumacoes.boletins.filter(x => x.encontrado == false && x.nome != '').forEach(x => {
_html2 += '' + x.cemiterioTitulo + ' > ' + x.seccaoTitulo + ' > ' + x.sepulturaCodigo + ' > ' + x.nome + '
';
});
_html2 += 'Inumação Requerimentos
';
resultados.inumacoes.requerimentos.filter(x => x.encontrado == false && x.nome != '').forEach(x => {
_html2 += '' + x.cemiterioTitulo + ' > ' + x.seccaoTitulo + ' > ' + x.sepulturaCodigo + ' > ' + x.nome + '
';
});
_html2 += 'Exumação Declarações
';
resultados.exumacoes.declaracoes.filter(x => x.encontrado == false && x.nome != '').forEach(x => {
_html2 += '' + x.cemiterioTitulo + ' > ' + x.seccaoTitulo + ' > ' + x.sepulturaCodigo + ' > ' + x.nome + '
';
});
_html2 += 'Exumação Requerimentos
';
resultados.exumacoes.requerimentos.filter(x => x.encontrado == false && x.nome != '').forEach(x => {
_html2 += '' + x.cemiterioTitulo + ' > ' + x.seccaoTitulo + ' > ' + x.sepulturaCodigo + ' > ' + x.nome + '
';
});
_html2 += 'Anexos
';
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('' + x.nome + ' ');
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"
}
}
});
}