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:
@@ -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' }
|
||||
|
||||
Reference in New Issue
Block a user