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}