const url = new URL(window.location.href); const path = url.pathname; const IS_PROD = !path.includes("consulta-agendamento-h"); var optVazio = ["", null, undefined]; var dataAtual, tenant; var idPessoa; $("#cpf").mask("999.999.999-99"); location.href.includes("nd-") ? (tenant = "https://nd-embasa.mtxapi.io/") : (tenant = "https://servicos.embasa.ba.gov.br/"); const arrayConsulta = ["#cpf", "#btn-consulta"]; const arrayTabela = ["#info", "#tabelaAgendamentos"]; const arrayCamposObrigatorios = ["#cpf"]; const btnConsultar = document.querySelector("#btn-consulta"); ocultarCampos(arrayTabela); document.querySelector("#cpf").addEventListener("change", function (e) { if (e.target.value != "") { btnConsultar.style.display = "block"; return; } btnConsultar.style.display = "none"; }); btnConsultar.addEventListener("click", function () { const cpfInputValue = document.querySelector("#cpf").value; optVazio.includes(cpfInputValue) ? mostrarAlerta("O CPF é obrigatório.", "error") : getPessoa(cpfInputValue); }); async function getPessoa(cpf) { var url = `${tenant}api/v1/get-usuario`; const response = await fetch(url, { method: "POST", headers: { "Content-Type": "application/json", "prod": Boolean(IS_PROD) }, body: JSON.stringify({ cpf }), }); if (response.ok) { const data = await response.json(); const NOT_FOUND_ON_CUBE = !Object.keys(data).length > 0; if (NOT_FOUND_ON_CUBE) { mostrarAlerta("Não localizamos o seu cadastro.", "warning"); return; } idPessoa = data.id; getAgendamentos(idPessoa); } } async function getAgendamentos(idPessoa) { var url = `${tenant}buscar-agendamentos`; const response = await fetch(url, { method: "POST", headers: { "Content-Type": "application/json", "prod": Boolean(IS_PROD) }, body: JSON.stringify({ idPessoa }), }); if (response.ok) { const data = await response.json(); if (Object.keys(data).length > 0) { populaTabela(data); ocultarCampos(arrayConsulta); mostrarCampos(arrayTabela); document.querySelector("#cpf").value = ""; } } else { mostrarAlerta("Não localizamos seus agendamentos.", "warning"); } } function populaTabela(dadosAgendamento) { const tableBody = document.getElementById("dadosAgendamentos"); tableBody.innerHTML = ""; var link; var senha; dadosAgendamento.forEach((dado) => { const row = document.createElement("tr"); var dataFim = new Date(dado.dataFinal); var idEvento = dado.idEvento; var dataInicio = new Date(dado.dataInicio) .toISOString() .split("T")[0] .split("-") .reverse() .join("/"); var horario = new Date(dado.dataInicio).toLocaleTimeString("pt-BR", { hour: "2-digit", minute: "2-digit", hour12: false, }); if (dado.link != "Fora do horário de atendimento") { if (dataFim < dataAtual) { link = "Expirado"; senha = "Expirado"; } else { link = `Clique aqui`; senha = dado.senha; } } else { link = dado.link; senha = dado.senha; } row.innerHTML = ` ${dataInicio} ${horario} ${link} ${senha} `; tableBody.appendChild(row); }); } async function cancelarAgendamentosSelecionados() { const agendamentosSelecionados = Array.from(document.getElementsByName("eventos")).filter(item => item.checked) .map(item => item.value); const totalDeAgendamentos = Array.from(document.getElementsByName("eventos")).length; if (agendamentosSelecionados.length === 0) { mostrarAlerta("Por favor, selecione ao menos um agendamento para cancelar.", "warning"); return; } Swal.fire({ text: "Você tem certeza de que deseja cancelar este(s) agendamento(s)?", icon: "warning", showCancelButton: true, cancelButtonText: "Não", confirmButtonColor: "#3085d6", cancelButtonColor: "#d33", confirmButtonText: "Sim", }).then(async (result) => { if (result.isConfirmed) { try { await Promise.all(agendamentosSelecionados.map(async (item) => { const response = await fetch("/api/v1/cancela-agendamento", { method: "PATCH", headers: { "prod": Boolean(IS_PROD) }, body: JSON.stringify({ id: +item, }), }); if (!response.ok) { const errorData = await response.json(); throw new Error(errorData.message || `Falha ao cancelar o agendamento ${item}`); } })); mostrarAlerta("Agendamento(s) cancelado(s) com sucesso.", "success").then(result => { // Se só há um agendamento e ela cancela, volta para tela de inserir cpf. if (result.isConfirmed && (agendamentosSelecionados.length == totalDeAgendamentos)) { mostrarCampos(arrayConsulta); ocultarCampos(arrayTabela); return; } // Caso contrário, renderiza os agendamentos na tela, removendo os cancelados getAgendamentos(idPessoa); }); } catch (error) { mostrarAlerta("Erro ao cancelar agendamento(s), tente novamente mais tarde!", "warning"); } } }); } document.querySelector("#cancelar-agendamento").addEventListener("click", function () { cancelarAgendamentosSelecionados(); }); document.querySelector("#voltar").addEventListener("click", function () { mostrarCampos(arrayConsulta); ocultarCampos(arrayTabela); }); function mostrarCampos(array) { array.forEach((item) => { document.querySelector(item).classList.remove("hide"); document.querySelector(item).parentElement.classList.remove("hide"); document .querySelector(item) .parentElement.parentElement.classList.remove("hide"); }); } function ocultarCampos(array) { array.forEach((item) => { document.querySelector(item).classList.add("hide"); document.querySelector(item).parentElement.classList.add("hide"); document .querySelector(item) .parentElement.parentElement.classList.add("hide"); }); } function limpaCampo(field) { $(`#${field}`).val(""); } async function isValidCPF(cpf) { cpf = cpf.value.replace(/[^\d]/g, ""); if (cpf.length !== 11 || /^(\d)\1+$/.test(cpf)) { mostrarAlerta( "O CPF fornecido é inválido. Digite um válido para prosseguir!" ); setTimeout(() => { ["cpf"].forEach((i) => { limpaCampo(i); }); }, 200); return (cpf.value = ""); } let sum = 0; for (let i = 0; i < 9; i++) { sum += parseInt(cpf.charAt(i)) * (10 - i); } let firstVerifier = 11 - (sum % 11); if (firstVerifier > 9) firstVerifier = 0; if (parseInt(cpf.charAt(9)) !== firstVerifier) { mostrarAlerta( "O CPF fornecido é inválido. Digite um válido para prosseguir!" ); setTimeout(() => { ["cpf"].forEach((i) => { limpaCampo(i); }); }, 200); return (cpf.value = ""); } sum = 0; for (let i = 0; i < 10; i++) { sum += parseInt(cpf.charAt(i)) * (11 - i); } let secondVerifier = 11 - (sum % 11); if (secondVerifier > 9) secondVerifier = 0; if (parseInt(cpf.charAt(10)) !== secondVerifier) { mostrarAlerta( "O CPF fornecido é inválido. Digite um válido para prosseguir!" ); setTimeout(() => { ["cpf"].forEach((i) => { limpaCampo(i); }); }, 200); return (cpf.value = ""); } return cpf.value; } function mostrarAlerta(mensagem, icon) { return Swal.fire({ icon, title: "Atenção", text: mensagem, confirmButtonText: "OK", }); }