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;
|
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 dia = String(dataObj.getUTCDate()).padStart(2, '0');
|
||||||
const data = `${ano}-${mes}-${dia}`;
|
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
|
// Verificar se já existe registro no mesmo minuto
|
||||||
const funcionarioId = usuario.funcionarioId; // Já verificado acima, não é undefined
|
const funcionarioId = usuario.funcionarioId; // Já verificado acima, não é undefined
|
||||||
const registrosMinuto = await ctx.db
|
const registrosMinuto = await ctx.db
|
||||||
|
|||||||
Reference in New Issue
Block a user