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",
});
}