From fd7d3729c159ec9b4ac02f4460bc3313aa6e276b Mon Sep 17 00:00:00 2001 From: deyvisonwanderley Date: Thu, 13 Nov 2025 06:25:22 -0300 Subject: [PATCH] feat: add validation for vacation request approval and adjustments - Implemented validation checks to ensure employee and vacation period data are valid before approval. - Enhanced error handling to provide specific feedback for invalid requests. - Added checks for adjusted vacation periods to ensure all required dates are present. - Improved overall user experience by ensuring only valid requests can be processed. --- .../src/lib/components/AprovarFerias.svelte | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/apps/web/src/lib/components/AprovarFerias.svelte b/apps/web/src/lib/components/AprovarFerias.svelte index 7dc924e..8a8cdac 100644 --- a/apps/web/src/lib/components/AprovarFerias.svelte +++ b/apps/web/src/lib/components/AprovarFerias.svelte @@ -63,6 +63,28 @@ processando = true; erro = ''; + // Validar se as datas e condições estão dentro do regime do funcionário + if (!solicitacao.funcionario?._id) { + erro = 'Funcionário não encontrado'; + processando = false; + return; + } + + const validacao = await client.query(api.saldoFerias.validarSolicitacao, { + funcionarioId: solicitacao.funcionario._id, + anoReferencia: solicitacao.anoReferencia, + periodos: solicitacao.periodos.map((p) => ({ + dataInicio: p.dataInicio, + dataFim: p.dataFim + })) + }); + + if (!validacao.valido) { + erro = `Não é possível aprovar: ${validacao.erros.join('; ')}`; + processando = false; + return; + } + await client.mutation(api.ferias.aprovar, { solicitacaoId: solicitacao._id, gestorId: gestorId @@ -105,6 +127,37 @@ processando = true; erro = ''; + // Validar se as datas ajustadas e condições estão dentro do regime do funcionário + if (!solicitacao.funcionario?._id) { + erro = 'Funcionário não encontrado'; + processando = false; + return; + } + + // Validar todos os períodos ajustados + for (const periodo of periodos) { + if (!periodo.dataInicio || !periodo.dataFim) { + erro = 'Todos os períodos devem ter data de início e fim'; + processando = false; + return; + } + } + + const validacao = await client.query(api.saldoFerias.validarSolicitacao, { + funcionarioId: solicitacao.funcionario._id, + anoReferencia: solicitacao.anoReferencia, + periodos: periodos.map((p) => ({ + dataInicio: p.dataInicio, + dataFim: p.dataFim + })) + }); + + if (!validacao.valido) { + erro = `Não é possível aprovar com ajuste: ${validacao.erros.join('; ')}`; + processando = false; + return; + } + await client.mutation(api.ferias.ajustarEAprovar, { solicitacaoId: solicitacao._id, gestorId: gestorId,