diff --git a/apps/web/src/lib/components/ponto/RegistroPonto.svelte b/apps/web/src/lib/components/ponto/RegistroPonto.svelte index 801507b..6ea6ff4 100644 --- a/apps/web/src/lib/components/ponto/RegistroPonto.svelte +++ b/apps/web/src/lib/components/ponto/RegistroPonto.svelte @@ -34,6 +34,12 @@ funcionarioId && dataHoje ? { funcionarioId, data: dataHoje } : 'skip' ); + // Query para verificar dispensa ativa + const dispensaQuery = useQuery( + api.pontos.verificarDispensaAtiva, + funcionarioId && dataHoje ? { funcionarioId, data: dataHoje } : 'skip' + ); + // Estados let mostrandoWebcam = $state(false); let registrando = $state(false); @@ -150,6 +156,22 @@ async function registrarPonto() { if (registrando) return; + // Verificar se tem funcionário associado + if (!temFuncionarioAssociado) { + mensagemErroModal = 'Usuário não possui funcionário associado'; + detalhesErroModal = 'Você não possui um funcionário associado à sua conta. Entre em contato com o administrador do sistema.'; + mostrarModalErro = true; + return; + } + + // Verificar se está dispensado antes de registrar + if (estaDispensado) { + mensagemErroModal = 'Registro dispensado pelo gestor'; + detalhesErroModal = motivoDispensa || 'Você está dispensado de registrar ponto no momento.'; + mostrarModalErro = true; + return; + } + // Verificar permissões antes de registrar const permissoes = await verificarPermissoes(); if (!permissoes.localizacao || !permissoes.webcam) { @@ -296,6 +318,22 @@ async function iniciarRegistroComFoto() { if (registrando || coletandoInfo) return; + // Verificar se tem funcionário associado + if (!temFuncionarioAssociado) { + mensagemErroModal = 'Usuário não possui funcionário associado'; + detalhesErroModal = 'Você não possui um funcionário associado à sua conta. Entre em contato com o administrador do sistema.'; + mostrarModalErro = true; + return; + } + + // Verificar se está dispensado antes de abrir webcam + if (estaDispensado) { + mensagemErroModal = 'Registro dispensado pelo gestor'; + detalhesErroModal = motivoDispensa || 'Você está dispensado de registrar ponto no momento.'; + mostrarModalErro = true; + return; + } + // Verificar permissões antes de abrir webcam const permissoes = await verificarPermissoes(); if (!permissoes.localizacao || !permissoes.webcam) { @@ -542,8 +580,13 @@ } } + const dispensaAtiva = $derived(dispensaQuery?.data); + const estaDispensado = $derived(dispensaAtiva?.dispensado ?? false); + const motivoDispensa = $derived(dispensaAtiva?.motivo ?? null); + const temFuncionarioAssociado = $derived(funcionarioId !== null); + const podeRegistrar = $derived.by(() => { - return !registrando && !coletandoInfo && config !== undefined; + return !registrando && !coletandoInfo && config !== undefined && !estaDispensado && temFuncionarioAssociado; }); // Referência para o modal @@ -650,6 +693,60 @@
+ Tem certeza que deseja excluir esta homologação? Esta ação não pode ser desfeita. +
+