diff --git a/apps/web/src/routes/(dashboard)/almoxarifado/+page.svelte b/apps/web/src/routes/(dashboard)/almoxarifado/+page.svelte index c0efc11..b145af0 100644 --- a/apps/web/src/routes/(dashboard)/almoxarifado/+page.svelte +++ b/apps/web/src/routes/(dashboard)/almoxarifado/+page.svelte @@ -2,6 +2,7 @@ import { api } from '@sgse-app/backend/convex/_generated/api'; import { useConvexClient, useQuery } from 'convex-svelte'; import { goto } from '$app/navigation'; + import { resolve } from '$app/paths'; import { Package, AlertTriangle, @@ -14,69 +15,114 @@ const statsQuery = useQuery(api.almoxarifado.obterEstatisticas, {}); const alertasQuery = useQuery(api.almoxarifado.listarAlertas, { status: 'ativo' }); const materiaisQuery = useQuery(api.almoxarifado.listarMateriais, {}); + + // Criar mapa de materiais para lookup eficiente + const materiaisMap = $derived.by(() => { + if (!materiaisQuery.data) return new Map(); + const map = new Map(); + for (const material of materiaisQuery.data) { + map.set(material._id, material); + } + return map; + }); -
+
+ + +
-

Almoxarifado

-

- Controle de estoque e gestão de materiais -

+
+
+ +
+
+

Almoxarifado

+

+ Controle de estoque e gestão de materiais +

+
+
- {#if statsQuery.data} -
-
-
-
- + {#if statsQuery === undefined} +
+ +
+ {:else if statsQuery.data} +
+
+
+
+
+
Total de Materiais
+
+ {statsQuery.data.totalMateriais} +
+
Materiais cadastrados
+
+
+ +
-
Total de Materiais
-
- {statsQuery.data.totalMateriais} -
-
Materiais cadastrados
-
-
-
- +
+
+
+
+
Materiais Ativos
+
+ {statsQuery.data.totalMateriaisAtivos} +
+
Em estoque
+
+
+ +
-
Materiais Ativos
-
- {statsQuery.data.totalMateriaisAtivos} -
-
Em estoque
-
-
-
- +
+
+
+
+
Alertas Ativos
+
+ {statsQuery.data.totalAlertasAtivos} +
+
Estoque baixo
+
+
+ +
-
Alertas Ativos
-
- {statsQuery.data.totalAlertasAtivos} -
-
Estoque baixo
-
-
-
- +
+
+
+
+
Movimentações
+
+ {statsQuery.data.movimentacoesMes} +
+
Este mês
+
+
+ +
-
Movimentações
-
- {statsQuery.data.movimentacoesMes} -
-
Este mês
@@ -84,45 +130,58 @@
-
+
-

- - Alertas de Estoque +

+
+ +
+ Alertas de Estoque

- {#if alertasQuery.data && alertasQuery.data.length > 0} + {#if alertasQuery === undefined} +
+ +
+ {:else if alertasQuery.data && alertasQuery.data.length > 0}
- +
- - - - - - + + + + + + {#each alertasQuery.data.slice(0, 5) as alerta} - {@const material = materiaisQuery.data?.find(m => m._id === alerta.materialId)} - + {@const material = materiaisMap.get(alerta.materialId)} + - - + +
MaterialTipoQuantidade AtualQuantidade MínimaAções
MaterialTipoQuantidade AtualQuantidade MínimaAções
- {material?.nome || 'Carregando...'} +
{material?.nome || 'Carregando...'}
+ {#if material?.codigo} +
{material.codigo}
+ {/if}
{#if alerta.tipo === 'estoque_zerado'} - Zerado + Zerado {:else if alerta.tipo === 'estoque_minimo'} - Mínimo + Mínimo {:else} - Reposição + Reposição {/if} {alerta.quantidadeAtual}{alerta.quantidadeMinima} + {alerta.quantidadeAtual} + + {alerta.quantidadeMinima} +
-
+
{:else} -
+
- Nenhum alerta ativo no momento! + Nenhum alerta ativo no momento!
{/if}
@@ -152,43 +211,49 @@
-
+
diff --git a/apps/web/src/routes/(dashboard)/almoxarifado/alertas/+page.svelte b/apps/web/src/routes/(dashboard)/almoxarifado/alertas/+page.svelte index 74e4c8f..3a82f52 100644 --- a/apps/web/src/routes/(dashboard)/almoxarifado/alertas/+page.svelte +++ b/apps/web/src/routes/(dashboard)/almoxarifado/alertas/+page.svelte @@ -77,15 +77,10 @@ } -
+
-