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
|
// 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();
|
||||||
|
|||||||
Reference in New Issue
Block a user