feat: enhance Banco de Horas management with new reporting features, including adjustments and inconsistencies tracking, advanced filters, and Excel export functionality
This commit is contained in:
@@ -4,6 +4,7 @@ import { Id } from './_generated/dataModel';
|
||||
import type { QueryCtx, MutationCtx } from './_generated/server';
|
||||
import { registrarAtividade } from './logsAtividades';
|
||||
import { getCurrentUserFunction } from './auth';
|
||||
import { internal } from './_generated/api';
|
||||
|
||||
// ========== HELPERS ==========
|
||||
|
||||
@@ -26,6 +27,38 @@ function calcularDias(dataInicio: string, dataFim: string): number {
|
||||
return diffDays;
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper para recalcular banco de horas em um período
|
||||
*/
|
||||
async function recalcularBancoHorasPeriodo(
|
||||
ctx: MutationCtx,
|
||||
funcionarioId: Id<'funcionarios'>,
|
||||
dataInicio: string,
|
||||
dataFim: string
|
||||
): Promise<void> {
|
||||
// Gerar todas as datas do período
|
||||
const dataInicioObj = new Date(dataInicio);
|
||||
const dataFimObj = new Date(dataFim);
|
||||
const datas: string[] = [];
|
||||
const dataAtual = new Date(dataInicioObj);
|
||||
|
||||
while (dataAtual <= dataFimObj) {
|
||||
const ano = dataAtual.getFullYear();
|
||||
const mes = String(dataAtual.getMonth() + 1).padStart(2, '0');
|
||||
const dia = String(dataAtual.getDate()).padStart(2, '0');
|
||||
datas.push(`${ano}-${mes}-${dia}`);
|
||||
dataAtual.setDate(dataAtual.getDate() + 1);
|
||||
}
|
||||
|
||||
// Recalcular para cada data usando a mutation interna (agendar para execução assíncrona)
|
||||
for (let i = 0; i < datas.length; i++) {
|
||||
await ctx.scheduler.runAfter(i * 100, internal.pontos.recalcularBancoHorasData, {
|
||||
funcionarioId,
|
||||
data: datas[i]!
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// ========== QUERIES ==========
|
||||
|
||||
/**
|
||||
@@ -780,6 +813,9 @@ export const criarAtestadoMedico = mutation({
|
||||
atestadoId
|
||||
);
|
||||
|
||||
// Recalcular banco de horas para todas as datas do período do atestado
|
||||
await recalcularBancoHorasPeriodo(ctx, args.funcionarioId, args.dataInicio, args.dataFim);
|
||||
|
||||
return atestadoId;
|
||||
}
|
||||
});
|
||||
@@ -825,6 +861,9 @@ export const criarDeclaracaoComparecimento = mutation({
|
||||
atestadoId
|
||||
);
|
||||
|
||||
// Recalcular banco de horas para todas as datas do período da declaração
|
||||
await recalcularBancoHorasPeriodo(ctx, args.funcionarioId, args.dataInicio, args.dataFim);
|
||||
|
||||
return atestadoId;
|
||||
}
|
||||
});
|
||||
@@ -878,6 +917,9 @@ export const criarLicencaMaternidade = mutation({
|
||||
licencaId
|
||||
);
|
||||
|
||||
// Recalcular banco de horas para todas as datas do período da licença
|
||||
await recalcularBancoHorasPeriodo(ctx, args.funcionarioId, args.dataInicio, args.dataFim);
|
||||
|
||||
return licencaId;
|
||||
}
|
||||
});
|
||||
@@ -924,6 +966,9 @@ export const criarLicencaPaternidade = mutation({
|
||||
licencaId
|
||||
);
|
||||
|
||||
// Recalcular banco de horas para todas as datas do período da licença
|
||||
await recalcularBancoHorasPeriodo(ctx, args.funcionarioId, args.dataInicio, args.dataFim);
|
||||
|
||||
return licencaId;
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user