diff --git a/apps/web/src/routes/(dashboard)/compras/atas/+page.svelte b/apps/web/src/routes/(dashboard)/compras/atas/+page.svelte index 9e9c107..999152d 100644 --- a/apps/web/src/routes/(dashboard)/compras/atas/+page.svelte +++ b/apps/web/src/routes/(dashboard)/compras/atas/+page.svelte @@ -44,6 +44,11 @@ dataFim: '' }); let selectedObjetos = $state[]>([]); + type ObjetoAtaConfig = { + quantidadeTotal: number | undefined; + limitePercentual: number | undefined; + }; + let objetosConfig = $state>({}); let searchObjeto = $state(''); let saving = $state(false); @@ -73,6 +78,15 @@ const linkedObjetos = await client.query(api.atas.getObjetos, { id: ata._id }); selectedObjetos = linkedObjetos.map((o) => o._id); + const linkedConfigs = await client.query(api.atas.getObjetosConfig, { id: ata._id }); + objetosConfig = {}; + for (const cfg of linkedConfigs) { + objetosConfig[String(cfg.objetoId)] = { + quantidadeTotal: cfg.quantidadeTotal ?? undefined, + limitePercentual: cfg.limitePercentual ?? 50 + }; + } + // Fetch attachments attachments = await client.query(api.atas.getDocumentos, { ataId: ata._id }); } else { @@ -85,6 +99,7 @@ dataFim: '' }; selectedObjetos = []; + objetosConfig = {}; attachments = []; } attachmentFiles = []; @@ -97,11 +112,22 @@ editingId = null; } + function getObjetoConfig(id: Id<'objetos'>): ObjetoAtaConfig { + const key = String(id); + if (!objetosConfig[key]) { + objetosConfig[key] = { quantidadeTotal: 1, limitePercentual: 50 }; + } + return objetosConfig[key]; + } + function toggleObjeto(id: Id<'objetos'>) { + const key = String(id); if (selectedObjetos.includes(id)) { selectedObjetos = selectedObjetos.filter((oid) => oid !== id); + delete objetosConfig[key]; } else { selectedObjetos = [...selectedObjetos, id]; + objetosConfig[key] = { quantidadeTotal: 1, limitePercentual: 50 }; } } @@ -124,13 +150,37 @@ } saving = true; try { + const objetos = selectedObjetos.map((objetoId) => { + const cfg = objetosConfig[String(objetoId)]; + if ( + !cfg || + cfg.quantidadeTotal === undefined || + !Number.isFinite(cfg.quantidadeTotal) || + cfg.quantidadeTotal <= 0 + ) { + throw new Error( + 'Informe a quantidade (maior que zero) para todos os objetos vinculados.' + ); + } + const limitePercentual = + cfg.limitePercentual === undefined || !Number.isFinite(cfg.limitePercentual) + ? 50 + : cfg.limitePercentual; + + return { + objetoId, + quantidadeTotal: cfg.quantidadeTotal, + limitePercentual + }; + }); + const payload = { numero: formData.numero, numeroSei: formData.numeroSei, empresaId: formData.empresaId as Id<'empresas'>, dataInicio: formData.dataInicio || undefined, dataFim: formData.dataFim || undefined, - objetosIds: selectedObjetos + objetos }; let ataId: Id<'atas'>; @@ -537,6 +587,54 @@ {/if} + {#if selectedObjetos.length > 0} +
+
Configuração por objeto
+

+ Defina a quantidade total do objeto na ata e o limite de uso em % (padrão 50%). +

+
+ {#each selectedObjetos as objetoId (objetoId)} + {@const obj = objetos.find((o) => o._id === objetoId)} + {@const cfg = getObjetoConfig(objetoId)} +
+
{obj?.nome || 'Objeto'}
+
+
+ + +
+
+ + +
+
+
+ {/each} +
+
+ {/if} +
Anexos
diff --git a/apps/web/src/routes/(dashboard)/pedidos/[id]/+page.svelte b/apps/web/src/routes/(dashboard)/pedidos/[id]/+page.svelte index a84366b..8b17615 100644 --- a/apps/web/src/routes/(dashboard)/pedidos/[id]/+page.svelte +++ b/apps/web/src/routes/(dashboard)/pedidos/[id]/+page.svelte @@ -1,6 +1,7 @@