feat: refine homologation deletion logic to include time-based filtering for adjustments and ensure accurate recalculation of work hours, enhancing data integrity

This commit is contained in:
2025-12-24 11:01:11 -03:00
parent 3ee405a002
commit b965514e53

View File

@@ -2994,22 +2994,23 @@ export const excluirHomologacao = mutation({
// Se for um ajuste de banco de horas, remover completamente do banco de dados // Se for um ajuste de banco de horas, remover completamente do banco de dados
if (homologacao.tipoAjuste && homologacao.ajusteMinutos !== undefined) { if (homologacao.tipoAjuste && homologacao.ajusteMinutos !== undefined) {
// Converter criadoEm da homologação para data (YYYY-MM-DD) // Buscar ajustes criados próximo ao tempo da homologação (dentro de 5 minutos antes)
const dataHomologacao = new Date(homologacao.criadoEm).toISOString().split('T')[0]!; // O ajuste é criado logo antes da homologação em ajustarBancoHoras
const tempoLimite = homologacao.criadoEm - 5 * 60 * 1000; // 5 minutos antes
// Buscar o ajuste correspondente // Buscar todos os ajustes do funcionário com os mesmos critérios
// Procurar ajustes manuais do mesmo funcionário, gestor, tipo, valor e data // e criados próximo ao tempo da homologação
const ajustes = await ctx.db const ajustes = await ctx.db
.query('ajustesBancoHoras') .query('ajustesBancoHoras')
.withIndex('by_funcionario_data', (q) => .withIndex('by_funcionario', (q) => q.eq('funcionarioId', homologacao.funcionarioId))
q.eq('funcionarioId', homologacao.funcionarioId).eq('dataAplicacao', dataHomologacao)
)
.filter((q) => .filter((q) =>
q.and( q.and(
q.eq(q.field('motivoTipo'), 'manual'), q.eq(q.field('motivoTipo'), 'manual'),
q.eq(q.field('tipo'), homologacao.tipoAjuste), q.eq(q.field('tipo'), homologacao.tipoAjuste),
q.eq(q.field('valorMinutos'), homologacao.ajusteMinutos), q.eq(q.field('valorMinutos'), homologacao.ajusteMinutos),
q.eq(q.field('gestorId'), homologacao.gestorId) q.eq(q.field('gestorId'), homologacao.gestorId),
q.gte(q.field('criadoEm'), tempoLimite),
q.lte(q.field('criadoEm'), homologacao.criadoEm)
) )
) )
.collect(); .collect();
@@ -3084,6 +3085,17 @@ export const excluirHomologacao = mutation({
tipoDia: novoTipoDia tipoDia: novoTipoDia
}); });
// Recalcular banco de horas do dia específico para garantir consistência
const config = await ctx.db
.query('configuracaoPonto')
.withIndex('by_ativo', (q) => q.eq('ativo', true))
.first();
if (config) {
// Recalcular banco de horas do dia para atualizar valores baseados nos registros
await atualizarBancoHoras(ctx, homologacao.funcionarioId, ajuste.dataAplicacao, config);
}
// Recalcular banco de horas mensal após remover ajuste // Recalcular banco de horas mensal após remover ajuste
const mes = ajuste.dataAplicacao.substring(0, 7); // YYYY-MM const mes = ajuste.dataAplicacao.substring(0, 7); // YYYY-MM
const hojeDate = new Date(); const hojeDate = new Date();