feat: add functionality to manage employee status during point registration, preventing point logging for employees on vacation or leave; enhance UI alerts to inform users of their current status

This commit is contained in:
2025-12-09 15:06:36 -03:00
parent 248d7cd623
commit 73da995109
4 changed files with 119 additions and 20 deletions

View File

@@ -132,13 +132,37 @@
});
// Funções auxiliares
/**
* Converte string de data no formato "YYYY-MM-DD" (com ou sem parte de hora)
* para um objeto Date no fuso local, evitando o problema de "um dia a menos"
* causado por `new Date('YYYY-MM-DD')` em timezones como UTC-3.
*/
function parseDataLocal(data: string): Date {
if (!data) return new Date(NaN);
// Garante que só a parte da data seja usada (descarta "T...").
const apenasData = data.substring(0, 10);
const [anoStr, mesStr, diaStr] = apenasData.split('-');
const ano = Number(anoStr);
const mes = Number(mesStr);
const dia = Number(diaStr);
if (!ano || !mes || !dia) {
return new Date(NaN);
}
return new Date(ano, mes - 1, dia);
}
function formatarData(data: string) {
return new Date(data).toLocaleDateString('pt-BR');
const date = parseDataLocal(data);
if (isNaN(date.getTime())) return '';
return date.toLocaleDateString('pt-BR');
}
function calcularDias(dataInicio: string, dataFim: string): number {
const inicio = new Date(dataInicio);
const fim = new Date(dataFim);
const inicio = parseDataLocal(dataInicio);
const fim = parseDataLocal(dataFim);
const diffTime = Math.abs(fim.getTime() - inicio.getTime());
return Math.ceil(diffTime / (1000 * 60 * 60 * 24)) + 1;
}
@@ -508,7 +532,7 @@
!licencaMaternidade.ehProrrogacao &&
!licencaMaternidade.dataFim
) {
const inicio = new Date(licencaMaternidade.dataInicio);
const inicio = parseDataLocal(licencaMaternidade.dataInicio);
if (!isNaN(inicio.getTime())) {
inicio.setDate(inicio.getDate() + 120); // 120 dias
licencaMaternidade.dataFim = inicio.toISOString().split('T')[0];
@@ -522,7 +546,7 @@
licencaPaternidade.dataInicio &&
!licencaPaternidade.dataFim
) {
const inicio = new Date(licencaPaternidade.dataInicio);
const inicio = parseDataLocal(licencaPaternidade.dataInicio);
if (!isNaN(inicio.getTime())) {
inicio.setDate(inicio.getDate() + 20); // 20 dias
licencaPaternidade.dataFim = inicio.toISOString().split('T')[0];
@@ -574,11 +598,11 @@
// Filtro por período
if (filtroDataInicio && filtroDataFim) {
const inicio = new Date(filtroDataInicio);
const fim = new Date(filtroDataFim);
const inicio = parseDataLocal(filtroDataInicio);
const fim = parseDataLocal(filtroDataFim);
atestados = atestados.filter((a) => {
const aInicio = new Date(a.dataInicio);
const aFim = new Date(a.dataFim);
const aInicio = parseDataLocal(a.dataInicio);
const aFim = parseDataLocal(a.dataFim);
return (
(aInicio >= inicio && aInicio <= fim) ||
(aFim >= inicio && aFim <= fim) ||
@@ -586,8 +610,8 @@
);
});
licencas = licencas.filter((l) => {
const lInicio = new Date(l.dataInicio);
const lFim = new Date(l.dataFim);
const lInicio = parseDataLocal(l.dataInicio);
const lFim = parseDataLocal(l.dataFim);
return (
(lInicio >= inicio && lInicio <= fim) ||
(lFim >= inicio && lFim <= fim) ||
@@ -645,11 +669,11 @@
// Filtro por período
if (relatorioPeriodoInicio && relatorioPeriodoFim) {
const inicio = new Date(relatorioPeriodoInicio);
const fim = new Date(relatorioPeriodoFim);
const inicio = parseDataLocal(relatorioPeriodoInicio);
const fim = parseDataLocal(relatorioPeriodoFim);
atestados = atestados.filter((a) => {
const aInicio = new Date(a.dataInicio);
const aFim = new Date(a.dataFim);
const aInicio = parseDataLocal(a.dataInicio);
const aFim = parseDataLocal(a.dataFim);
return (
(aInicio >= inicio && aInicio <= fim) ||
(aFim >= inicio && aFim <= fim) ||
@@ -657,8 +681,8 @@
);
});
licencas = licencas.filter((l) => {
const lInicio = new Date(l.dataInicio);
const lFim = new Date(l.dataFim);
const lInicio = parseDataLocal(l.dataInicio);
const lFim = parseDataLocal(l.dataFim);
return (
(lInicio >= inicio && lInicio <= fim) ||
(lFim >= inicio && lFim <= fim) ||
@@ -759,7 +783,7 @@
doc.setFontSize(11);
doc.setTextColor(0, 0, 0);
doc.text(
`Período: ${format(new Date(relatorioPeriodoInicio), 'dd/MM/yyyy', { locale: ptBR })} até ${format(new Date(relatorioPeriodoFim), 'dd/MM/yyyy', { locale: ptBR })}`,
`Período: ${format(parseDataLocal(relatorioPeriodoInicio), 'dd/MM/yyyy', { locale: ptBR })} até ${format(parseDataLocal(relatorioPeriodoFim), 'dd/MM/yyyy', { locale: ptBR })}`,
105,
yPosition,
{ align: 'center' }