diff --git a/apps/web/src/routes/(dashboard)/pedidos/[id]/+page.svelte b/apps/web/src/routes/(dashboard)/pedidos/[id]/+page.svelte
index 24adb6a..b2b665b 100644
--- a/apps/web/src/routes/(dashboard)/pedidos/[id]/+page.svelte
+++ b/apps/web/src/routes/(dashboard)/pedidos/[id]/+page.svelte
@@ -31,6 +31,7 @@
const objetosQuery = $derived.by(() => useQuery(api.objetos.list, {}));
const acoesQuery = $derived.by(() => useQuery(api.acoes.list, {}));
const permissionsQuery = $derived.by(() => useQuery(api.pedidos.getPermissions, { pedidoId }));
+ const requestsQuery = $derived.by(() => useQuery(api.pedidos.getItemRequests, { pedidoId }));
// Derived state
let pedido = $derived(pedidoQuery.data);
@@ -39,6 +40,7 @@
let objetos = $derived(objetosQuery.data || []);
let acoes = $derived(acoesQuery.data || []);
let permissions = $derived(permissionsQuery.data);
+ let requests = $derived(requestsQuery.data || []);
type Modalidade = 'dispensa' | 'inexgibilidade' | 'adesao' | 'consumo';
@@ -116,8 +118,10 @@
itemsQuery.isLoading ||
historyQuery.isLoading ||
objetosQuery.isLoading ||
+ objetosQuery.isLoading ||
acoesQuery.isLoading ||
- permissionsQuery.isLoading
+ permissionsQuery.isLoading ||
+ requestsQuery.isLoading
);
let error = $derived(
@@ -207,7 +211,7 @@
});
async function handleAddItem() {
- if (!newItem.objetoId || !newItem.valorEstimado) return;
+ if (!pedido || !newItem.objetoId || !newItem.valorEstimado) return;
addingItem = true;
try {
await client.mutation(api.pedidos.addItem, {
@@ -228,6 +232,9 @@
ataId: ''
};
showAddItem = false;
+ if (pedido.status === 'em_analise') {
+ alert('Solicitação de adição enviada para análise.');
+ }
} catch (e) {
alert('Erro ao adicionar item: ' + (e as Error).message);
} finally {
@@ -236,6 +243,8 @@
}
async function handleUpdateQuantity(itemId: Id<'objetoItems'>, novaQuantidade: number) {
+ if (!pedido) return;
+
if (novaQuantidade < 1) {
alert('Quantidade deve ser pelo menos 1.');
return;
@@ -245,15 +254,22 @@
itemId,
novaQuantidade
});
+ if (pedido.status === 'em_analise') {
+ alert('Solicitação de alteração de quantidade enviada para análise.');
+ }
} catch (e) {
alert('Erro ao atualizar quantidade: ' + (e as Error).message);
}
}
async function handleRemoveItem(itemId: Id<'objetoItems'>) {
+ if (!pedido) return;
if (!confirm('Remover este item?')) return;
try {
await client.mutation(api.pedidos.removeItem, { itemId });
+ if (pedido.status === 'em_analise') {
+ alert('Solicitação de remoção enviada para análise.');
+ }
} catch (e) {
alert('Erro ao remover item: ' + (e as Error).message);
}
@@ -625,6 +641,32 @@
alert('Erro: ' + (e as Error).message);
}
}
+
+ async function handleApproveRequest(requestId: Id<'solicitacoesItens'>) {
+ if (!confirm('Aprovar esta solicitação?')) return;
+ try {
+ await client.mutation(api.pedidos.approveItemRequest, { requestId });
+ } catch (e) {
+ alert('Erro ao aprovar: ' + (e as Error).message);
+ }
+ }
+
+ async function handleRejectRequest(requestId: Id<'solicitacoesItens'>) {
+ if (!confirm('Rejeitar esta solicitação?')) return;
+ try {
+ await client.mutation(api.pedidos.rejectItemRequest, { requestId });
+ } catch (e) {
+ alert('Erro ao rejeitar: ' + (e as Error).message);
+ }
+ }
+
+ function parseRequestData(json: string) {
+ try {
+ return JSON.parse(json);
+ } catch {
+ return {};
+ }
+ }
@@ -998,7 +1121,7 @@
{/if}
{getObjetoName(item.objetoId)} |
- {#if pedido.status === 'em_rascunho' || pedido.status === 'precisa_ajustes'}
+ {#if pedido.status === 'em_rascunho' || pedido.status === 'precisa_ajustes' || pedido.status === 'em_analise'}
- {#if pedido.status === 'em_rascunho' || pedido.status === 'precisa_ajustes'}
+ {#if pedido.status === 'em_rascunho' || pedido.status === 'precisa_ajustes' || pedido.status === 'em_analise'}
|