feat: add mutation to exclude absence requests and enhance point registration by blocking entries during approved absences
This commit is contained in:
@@ -922,3 +922,48 @@ export const marcarComoLida = mutation({
|
||||
return null;
|
||||
}
|
||||
});
|
||||
|
||||
// Mutation: Excluir solicitação de ausência
|
||||
export const excluirSolicitacao = mutation({
|
||||
args: {
|
||||
solicitacaoId: v.id('solicitacoesAusencias'),
|
||||
usuarioId: v.id('usuarios')
|
||||
},
|
||||
returns: v.null(),
|
||||
handler: async (ctx, args) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'ausencias',
|
||||
acao: 'reprovar'
|
||||
});
|
||||
|
||||
const solicitacao = await ctx.db.get(args.solicitacaoId);
|
||||
if (!solicitacao) {
|
||||
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');
|
||||
}
|
||||
|
||||
// Verificar se o usuário é o criador original da solicitação
|
||||
const usuario = await ctx.db.get(args.usuarioId);
|
||||
if (!usuario) {
|
||||
throw new Error('Usuário não encontrado');
|
||||
}
|
||||
|
||||
const usuarioEhFuncionario = usuario.funcionarioId === solicitacao.funcionarioId;
|
||||
const gestorIdDoFuncionario = await encontrarGestorDoFuncionario(
|
||||
ctx,
|
||||
solicitacao.funcionarioId
|
||||
);
|
||||
const usuarioEhGestor = gestorIdDoFuncionario === args.usuarioId;
|
||||
|
||||
if (!usuarioEhFuncionario && !usuarioEhGestor) {
|
||||
throw new Error('Você não tem permissão para excluir esta solicitação');
|
||||
}
|
||||
|
||||
await ctx.db.delete(args.solicitacaoId);
|
||||
return null;
|
||||
}
|
||||
});
|
||||
|
||||
@@ -605,6 +605,15 @@ export const registrarPonto = mutation({
|
||||
const dia = String(dataObj.getUTCDate()).padStart(2, '0');
|
||||
const data = `${ano}-${mes}-${dia}`;
|
||||
|
||||
// Bloquear registro de ponto quando houver ausência aprovada ativa na data
|
||||
const ausenciaInfo = await verificarAusenciaAprovada(ctx, usuario.funcionarioId, data);
|
||||
if (ausenciaInfo.temAusencia) {
|
||||
throw new Error(
|
||||
ausenciaInfo.motivo ||
|
||||
'Não é possível registrar ponto: existe uma ausência aprovada ativa para esta data.'
|
||||
);
|
||||
}
|
||||
|
||||
// Verificar se já existe registro no mesmo minuto
|
||||
const funcionarioId = usuario.funcionarioId; // Já verificado acima, não é undefined
|
||||
const registrosMinuto = await ctx.db
|
||||
|
||||
Reference in New Issue
Block a user