Altera status do pedido
PUT/orders/:idorder/status
Move o pedido de um status para outro, respeitando as transições configuradas em TypeStatusOrderRule para a empresa. Usado pelo botão Cancelar da tela Outbound com IDOrderStatusTo=90, mas serve a todas as transições disparadas pelas telas de operação (Pedidos, Picking-List, Romaneio, Tracking, etc.).
Fluxo do handler (orderStatusPut, Node):
- Localiza o pedido pelo
IDOrderda rota +AccountNamedo contexto (Company.AccountName = prefix). - Lê
IDStatusOrderatual +IDCarrierType,IDStatusInvoiceda NF principal,IDOrdersCarrierCollectionList,IDPickingList. - Consulta
TypeStatusOrderRule(transições permitidas saindo do status atual) e valida queIDOrderStatusToestá na lista. Se não estiver, retorna[BadRequest] - Status não permite alteração. - Aplica validações específicas do status destino (cada
IDOrderStatusTotem o seucase). Os casos mais relevantes:0Aberto — reverte para Aberto. Quando a NF principal está em statusIN (2, 3, 4, 5, 7, 8)(Enviada/Emitida/Processando/Pendente conciliação EPEC/Cancelada/Denegada) e a parametrizaçãoAllowOpenOrderInvoiced != 1, bloqueia com[BadRequest] - Desvincular nota fiscal antes de alterar status. ResetaBalanceChangeem movimentos eBudget=0quando o status origem está em margem/crédito.1Fechado — só permitido a partir de11(Falta produto) ou93(Em produção).90Cancelado (botão da tela Outbound) — bloqueia quandoOrders.IDOrdersCarrierCollectionList > 0([BadRequest] - Pedido esta em romaneio X, retirar antes de mudar status) ouOrders.IDPickingList > 0([BadRequest] - Pedido esta na Picking List X, retirar antes de mudar status). Caso liberado: zeraBalanceChangedos movimentos, deletaPackages, ajustaAccountsPayableReceivable(status4Cancelado quando ainda em aberto; mantém status quando pago; cria contra-lançamento emAccountsPayableReceivableBankStatementquando pagamento foi em dinheiro /TypePayment.Category=7), zeraPickingBasket/IDOrdersCarrierCollectionList/IDPickingListno pedido e atualizaIDStatusOrder=90.91Extraviado,92Extraviado parcialmente,94Devolvido,95Em devolução,97Reversa finalizada — disponíveis para transições típicas do pós-envio. Bloqueio depende da regra cadastrada emTypeStatusOrderRule.
- Grava um evento em
OrderEvents(IDEvent=35para Aberto,19para Cancelado, etc.) comRecordUserCreatedeStatusDate.
Validações de body comuns:
IDOrderStatusToprecisa estar na lista de transições permitidas a partir do status atual.- Quando o
TypeStatusOrder.CommentsRequired=1para o destino eStatusCommentestá vazio, retorna[BadRequest] - Comentário precisa ser preenchido. StatusDatenão pode ser mais de 5 min no futuro ([BadRequest] - Data Evento não pode ser superior a data atual).
Request
Responses
- 200
- 400
- 404
- 500
Transição aplicada. Body de resposta é a string literal "sucesso".
Validação falhou. Mensagens emitidas pelo handler:
[BadRequest] - não localizado(pathidorderausente/inválido).[BadRequest] - Status não permite alteração(transição não cadastrada emTypeStatusOrderRulepara a empresa).[BadRequest] - Comentário precisa ser preenchido(quando o destino exige comentário eStatusCommentveio vazio).[BadRequest] - Data Evento não pode ser superior a data atual(StatusDate> agora + 5 min).[BadRequest] - Desvincular nota fiscal antes de alterar status(transição →0Aberto com NF em status conflitante).[BadRequest] - Pedido esta em romaneio X, retirar antes de mudar status(transição →90Cancelado com pedido amarrado em romaneio).[BadRequest] - Pedido esta na Picking List X, retirar antes de mudar status(transição →90com pedido em picking-list ativa).
Pedido não encontrado. Mensagens emitidas pelo handler começam com [NotFound].
Erro inesperado. Mensagens começam com Error:.