diff --git a/apps/web/Dockerfile b/apps/web/Dockerfile index 71f9ef7..073d6e9 100644 --- a/apps/web/Dockerfile +++ b/apps/web/Dockerfile @@ -35,21 +35,17 @@ FROM oven/bun:1-slim AS production # Set working directory to match builder structure WORKDIR /app -# Create non-root user -RUN addgroup --system --gid 1001 sveltekit -RUN adduser --system --uid 1001 sveltekit - # Copy root node_modules (contains hoisted dependencies) -COPY --from=builder --chown=sveltekit:sveltekit /app/node_modules ./node_modules +COPY --from=builder /app/node_modules ./node_modules # Copy built application and workspace files -COPY --from=builder --chown=sveltekit:sveltekit /app/apps/web/build ./apps/web/build -COPY --from=builder --chown=sveltekit:sveltekit /app/apps/web/package.json ./apps/web/package.json +COPY --from=builder /app/apps/web/build ./apps/web/build +COPY --from=builder /app/apps/web/package.json ./apps/web/package.json # Copy workspace node_modules (contains symlinks to root node_modules) -COPY --from=builder --chown=sveltekit:sveltekit /app/apps/web/node_modules ./apps/web/node_modules +COPY --from=builder /app/apps/web/node_modules ./apps/web/node_modules # Copy any additional files needed for runtime -COPY --from=builder --chown=sveltekit:sveltekit /app/apps/web/static ./apps/web/static +COPY --from=builder /app/apps/web/static ./apps/web/static # Switch to non-root user USER sveltekit diff --git a/apps/web/src/routes/(dashboard)/gestao-pessoas/gestao-ausencias/+page.svelte b/apps/web/src/routes/(dashboard)/gestao-pessoas/gestao-ausencias/+page.svelte index bad2544..16875cf 100644 --- a/apps/web/src/routes/(dashboard)/gestao-pessoas/gestao-ausencias/+page.svelte +++ b/apps/web/src/routes/(dashboard)/gestao-pessoas/gestao-ausencias/+page.svelte @@ -5,7 +5,6 @@ import { goto } from '$app/navigation'; import { resolve } from '$app/paths'; import AprovarAusencias from '$lib/components/AprovarAusencias.svelte'; - import type { Id } from '@sgse-app/backend/convex/_generated/dataModel'; import { parseLocalDate } from '$lib/utils/datas'; import jsPDF from 'jspdf'; import autoTable from 'jspdf-autotable'; @@ -15,13 +14,14 @@ import logoGovPE from '$lib/assets/logo_governo_PE.png'; import { FileDown, FileSpreadsheet } from 'lucide-svelte'; import { toast } from 'svelte-sonner'; + import { SvelteDate } from 'svelte/reactivity'; const client = useConvexClient(); const currentUser = useQuery(api.auth.getCurrentUser, {}); // Buscar TODAS as solicitações de ausências const todasAusenciasQuery = useQuery(api.ausencias.listarTodas, {}); - + // Buscar funcionários para filtro const funcionariosQuery = useQuery(api.funcionarios.getAll, {}); @@ -34,7 +34,9 @@ const ausencias = $derived(todasAusenciasQuery?.data || []); const funcionarios = $derived( - Array.isArray(funcionariosQuery?.data) ? funcionariosQuery.data : funcionariosQuery?.data?.data || [] + Array.isArray(funcionariosQuery?.data) + ? funcionariosQuery.data + : funcionariosQuery?.data?.data || [] ); // Filtrar solicitações @@ -42,26 +44,26 @@ ausencias.filter((a) => { // Filtro de status if (filtroStatus !== 'todos' && a.status !== filtroStatus) return false; - + // Filtro por funcionário if (filtroFuncionario) { if (a.funcionario?._id !== filtroFuncionario) return false; } - + // Filtro por período if (filtroPeriodoInicio) { const inicioFiltro = new Date(filtroPeriodoInicio); const inicioAusencia = parseLocalDate(a.dataInicio); if (inicioAusencia < inicioFiltro) return false; } - + if (filtroPeriodoFim) { - const fimFiltro = new Date(filtroPeriodoFim); + const fimFiltro = new SvelteDate(filtroPeriodoFim); fimFiltro.setHours(23, 59, 59, 999); // Incluir o dia inteiro const fimAusencia = parseLocalDate(a.dataFim); if (fimAusencia > fimFiltro) return false; } - + return true; }) ); @@ -690,7 +692,7 @@ bind:value={filtroFuncionario} > - {#each funcionarios as funcionario} + {#each funcionarios as funcionario (funcionario._id)} {/each} @@ -761,7 +763,7 @@
- {#each ausenciasFiltradas as ausencia} + {#each ausenciasFiltradas as ausencia (ausencia._id)}- Defina o texto base que será usado em chat e na versão - HTML de email com o estilo padrão do SGSE. + Defina o texto base que será usado em chat e na + versão HTML de email com o estilo padrão do SGSE.