# Ações do Menu por Linha — Pedidos de Vendas

Este documento descreve as funcionalidades implementadas no menu de ações por linha da grid de `/vendas/pedidos`, incluindo integrações de API, requisitos de permissão, comportamento da UI e especificações técnicas.

## Visão Geral
- Local: `views/vendas/pedidos/index.php`
- Estrutura: cada linha possui um botão de menu com ações contextuais (RBAC e estado do pedido)
- Ícones: 24x24, seguindo `docs/ui_style_guide.md` (aplicados via mapeamentos locais, compatíveis com `iconMap`)
- Feedback: `showLoading`, `showAlert`, e logs de erros em console para falhas

## Ações Implementadas
- Editar pedido: abre a tela de edição (`/vendas/pedidos/{id}/editar`) — permissão `vendas.update`
- Conferência de pedido: marca `status = confirmado` via `PUT /api/vendas/pedidos/{id}` — `vendas.update`
- Relatório de separação: gera PDF com itens para picking — `vendas.read`
- Relatório de entrega: gera resumo com endereços do cliente — `vendas.read`
- Etiquetas de volumes: gera PDF com etiquetas — `vendas.read`
- NF-e (placeholder): botão presente; aguardando endpoint de NF-e — `fiscal.nfe.autorizar`
- NFC-e: `POST /api/fiscal/nfce/autorizar` e exibe status — `fiscal.nfce.autorizar`
- Status fiscal: abre pré-visualização/lista — `fiscal.read`
- Duplicar pedido: cria novo pedido com mesmos itens — `vendas.create`
- Cópia PDF e térmica: gera PDF simplificado do pedido (A4 e térmica) — `vendas.read`
- Cobranças: integra com links Asaas (quando disponível) — `financeiro.cobrancas`
- Cadastro do cliente: redireciona para `/clientes/{id}` — `cadastros.clientes.read`
- CRM do cliente: abre link CRM associado — `crm.read`
- Exportar CSV do pedido: gera arquivo CSV por pedido — `vendas.read`
- Marcar lido/não lido: flag local (UI) por pedido — `vendas.read`
- Excluir pedido: `DELETE /api/vendas/pedidos/{id}` — `vendas.delete`

## Endpoints Usados
- `POST /api/vendas/pedidos` — criação (duplicação)
- `GET /api/vendas/pedidos/{id}` — detalhes (itens e totais)
- `PUT /api/vendas/pedidos/{id}` — atualização de status/observações
- `DELETE /api/vendas/pedidos/{id}` — exclusão com remoção de itens (ajustado)
- `POST /api/fiscal/nfce/autorizar` — emissão NFC-e
- `GET /api/clientes/{id}` — dados e endereços do cliente

## Alteração no Backend
- Ajuste em `modules/Vendas/Controllers/SalesOrdersController::delete`:
  - Agora usa transação, removendo `sales_order_items` antes de `sales_orders`, evitando erro de FK.
  - Em caso de falha, retorna `500` com detalhes.

## Especificações de UI
- RBAC: elementos do menu possuem `data-required-perm` e respeitam a lógica de `_layout.php`
- Estados: algumas ações dependem de `status` (`novo`, `confirmado`, `faturado`)
- Loading: overlay enquanto ações assíncronas executam; alertas em sucesso/erro
- Navegação: link seguro com validação de contexto e permissões

## Testes
- `tests/SalesOrdersActionsTest.php` valida:
  - Criação de cliente e produto
  - Checkout (`PUT` status `confirmado`)
  - Edição de observações
  - Duplicação do pedido (novo `POST`)
  - Exclusão do pedido duplicado (corrigido com remoção de itens)

## Limitações e Próximos Passos
- NF-e: pendente de endpoints (`/api/fiscal/nfe/...`). Ao expor serviço similar ao `NfceService`, conectar `generateNFe()` na UI.
- Auditoria: já integrada via `AuditLogger`; considerar logs adicionais para ações de UI críticas.
- Acessibilidade: o menu segue foco e teclado básicos; avaliar navegação por setas/ARIA em dropdown.

## Consistência Visual
- Ícones e classes seguem guias `docs/ui_style_guide.md` e `views/_layout.php`
- Tamanhos e espaçamentos consistentes na grid e dropdown de ações