diff --git a/apps/web/src/routes/(dashboard)/pedidos/[id]/+page.svelte b/apps/web/src/routes/(dashboard)/pedidos/[id]/+page.svelte
index ae244a3..76263d2 100644
--- a/apps/web/src/routes/(dashboard)/pedidos/[id]/+page.svelte
+++ b/apps/web/src/routes/(dashboard)/pedidos/[id]/+page.svelte
@@ -30,6 +30,7 @@
const historyQuery = $derived.by(() => useQuery(api.pedidos.getHistory, { pedidoId }));
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 }));
// Derived state
let pedido = $derived(pedidoQuery.data);
@@ -37,6 +38,7 @@
let history = $derived(historyQuery.data || []);
let objetos = $derived(objetosQuery.data || []);
let acoes = $derived(acoesQuery.data || []);
+ let permissions = $derived(permissionsQuery.data);
type Modalidade = 'dispensa' | 'inexgibilidade' | 'adesao' | 'consumo';
@@ -114,7 +116,8 @@
itemsQuery.isLoading ||
historyQuery.isLoading ||
objetosQuery.isLoading ||
- acoesQuery.isLoading
+ acoesQuery.isLoading ||
+ permissionsQuery.isLoading
);
let error = $derived(
@@ -256,23 +259,48 @@
}
}
- async function updateStatus(
- novoStatus:
- | 'cancelado'
- | 'concluido'
- | 'em_rascunho'
- | 'aguardando_aceite'
- | 'em_analise'
- | 'precisa_ajustes'
- ) {
- if (!confirm(`Confirmar alteração de status para: ${novoStatus}?`)) return;
+ async function handleEnviarParaAceite() {
+ if (!confirm('Enviar para aceite?')) return;
try {
- await client.mutation(api.pedidos.updateStatus, {
- pedidoId,
- novoStatus
- });
+ await client.mutation(api.pedidos.enviarParaAceite, { pedidoId });
} catch (e) {
- alert('Erro ao atualizar status: ' + (e as Error).message);
+ alert('Erro: ' + (e as Error).message);
+ }
+ }
+
+ async function handleIniciarAnalise() {
+ if (!confirm('Iniciar análise?')) return;
+ try {
+ await client.mutation(api.pedidos.iniciarAnalise, { pedidoId });
+ } catch (e) {
+ alert('Erro: ' + (e as Error).message);
+ }
+ }
+
+ async function handleConcluir() {
+ if (!confirm('Concluir pedido?')) return;
+ try {
+ await client.mutation(api.pedidos.concluirPedido, { pedidoId });
+ } catch (e) {
+ alert('Erro: ' + (e as Error).message);
+ }
+ }
+
+ async function handleSolicitarAjustes() {
+ if (!confirm('Solicitar ajustes?')) return;
+ try {
+ await client.mutation(api.pedidos.solicitarAjustes, { pedidoId });
+ } catch (e) {
+ alert('Erro: ' + (e as Error).message);
+ }
+ }
+
+ async function handleCancelar() {
+ if (!confirm('Cancelar pedido?')) return;
+ try {
+ await client.mutation(api.pedidos.cancelarPedido, { pedidoId });
+ } catch (e) {
+ alert('Erro: ' + (e as Error).message);
}
}
@@ -635,42 +663,45 @@
- {#if pedido.status === 'em_rascunho' || pedido.status === 'precisa_ajustes'}
+ {#if permissions?.canSendToAcceptance}
{/if}
- {#if pedido.status === 'aguardando_aceite'}
+ {#if permissions?.canStartAnalysis}
{/if}
- {#if pedido.status === 'em_analise'}
+ {#if permissions?.canConclude}
+ {/if}
+
+ {#if permissions?.canRequestAdjustments}
{/if}
- {#if pedido.status !== 'cancelado' && pedido.status !== 'concluido'}
+ {#if permissions?.canCancel}