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:
@@ -2994,22 +2994,23 @@ export const excluirHomologacao = mutation({
|
||||
|
||||
// Se for um ajuste de banco de horas, remover completamente do banco de dados
|
||||
if (homologacao.tipoAjuste && homologacao.ajusteMinutos !== undefined) {
|
||||
// Converter criadoEm da homologação para data (YYYY-MM-DD)
|
||||
const dataHomologacao = new Date(homologacao.criadoEm).toISOString().split('T')[0]!;
|
||||
// Buscar ajustes criados próximo ao tempo da homologação (dentro de 5 minutos antes)
|
||||
// O ajuste é criado logo antes da homologação em ajustarBancoHoras
|
||||
const tempoLimite = homologacao.criadoEm - 5 * 60 * 1000; // 5 minutos antes
|
||||
|
||||
// Buscar o ajuste correspondente
|
||||
// Procurar ajustes manuais do mesmo funcionário, gestor, tipo, valor e data
|
||||
// Buscar todos os ajustes do funcionário com os mesmos critérios
|
||||
// e criados próximo ao tempo da homologação
|
||||
const ajustes = await ctx.db
|
||||
.query('ajustesBancoHoras')
|
||||
.withIndex('by_funcionario_data', (q) =>
|
||||
q.eq('funcionarioId', homologacao.funcionarioId).eq('dataAplicacao', dataHomologacao)
|
||||
)
|
||||
.withIndex('by_funcionario', (q) => q.eq('funcionarioId', homologacao.funcionarioId))
|
||||
.filter((q) =>
|
||||
q.and(
|
||||
q.eq(q.field('motivoTipo'), 'manual'),
|
||||
q.eq(q.field('tipo'), homologacao.tipoAjuste),
|
||||
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();
|
||||
@@ -3084,6 +3085,17 @@ export const excluirHomologacao = mutation({
|
||||
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
|
||||
const mes = ajuste.dataAplicacao.substring(0, 7); // YYYY-MM
|
||||
const hojeDate = new Date();
|
||||
|
||||
Reference in New Issue
Block a user