feat: implement automatic adjustment removal for deleted records in absence and atestado mutations, enhancing data integrity and recalculating work hours for specific periods
This commit is contained in:
@@ -941,10 +941,13 @@ export const excluirSolicitacao = mutation({
|
||||
throw new Error('Solicitação não encontrada');
|
||||
}
|
||||
|
||||
// Apenas solicitações ainda não processadas podem ser excluídas
|
||||
if (solicitacao.status !== 'aguardando_aprovacao') {
|
||||
throw new Error('Apenas solicitações pendentes podem ser excluídas');
|
||||
}
|
||||
// IMPORTANTE: Salvar o período exato da ausência ANTES de excluir
|
||||
// para recalcular o banco de horas apenas para esse período específico
|
||||
const funcionarioId = solicitacao.funcionarioId;
|
||||
const dataInicio = solicitacao.dataInicio;
|
||||
const dataFim = solicitacao.dataFim;
|
||||
const statusOriginal = solicitacao.status;
|
||||
const ausenciaId = args.solicitacaoId.toString(); // ID da ausência para remover ajustes
|
||||
|
||||
// Verificar se o usuário é o criador original da solicitação
|
||||
const usuario = await ctx.db.get(args.usuarioId);
|
||||
@@ -963,7 +966,34 @@ export const excluirSolicitacao = mutation({
|
||||
throw new Error('Você não tem permissão para excluir esta solicitação');
|
||||
}
|
||||
|
||||
// Permitir exclusão de ausências aprovadas (não apenas pendentes)
|
||||
// Se estiver aprovada, o gestor pode excluir para corrigir erros
|
||||
if (statusOriginal === 'aprovado' && !usuarioEhGestor) {
|
||||
throw new Error('Apenas o gestor pode excluir ausências aprovadas');
|
||||
}
|
||||
|
||||
// Excluir o registro do banco de dados
|
||||
await ctx.db.delete(args.solicitacaoId);
|
||||
|
||||
// Remover ajustes automáticos relacionados à ausência excluída (apenas se estava aprovada)
|
||||
if (statusOriginal === 'aprovado') {
|
||||
try {
|
||||
await ctx.runMutation(internal.pontos.removerAjustesAutomaticosInternal, {
|
||||
funcionarioId,
|
||||
motivoTipo: 'ausencia',
|
||||
motivoId: ausenciaId,
|
||||
dataInicio,
|
||||
dataFim
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('[excluirSolicitacao] Erro ao remover ajustes automáticos:', error);
|
||||
}
|
||||
|
||||
// Recalcular banco de horas APENAS para o período específico da ausência excluída
|
||||
// Isso garante que os dias da ausência sejam removidos corretamente dos registros de ponto
|
||||
await recalcularBancoHorasPeriodo(ctx, funcionarioId, dataInicio, dataFim);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user