# 订单编辑 API 概览 用于更新业务订单(销售单、销售退货单、采购单、采购退货单)的共同约束: - 仅允许 **审批中**(`PENDING`)状态编辑;若订单已审批/作废,服务层会抛出错误 `"{实体}当前状态不可修改"`。 - 更新接口统一使用 `PUT/PATCH /api/v1///`,请求体必须包含 `items`,且为非空数组。 - 数量校验与创建逻辑一致:严进仓需 `numbers`,宽进仓需 `quantity + num_of_rolls`,严进严出(出库)需 `consume_detail_ids`。 - 订单字段(客户/供应商、仓库、备注、日期等)可被更新,未提供的字段沿用原值。 ## SalesOrder 更新 - 路径:`PUT/PATCH /api/v1/sales-orders//` - 请求体字段(全部可选,但 `items` 必须存在且非空): - `customer`:客户 ID - `warehouse` / `warehouse_id`:仓库 ID - `order_date`:`YYYY-MM-DD` - `remarks` - `items`:与创建时一致(支持可选 `printing_job`) - 响应:`200 OK`,返回最新销售单详情(同 `GET` 列表项,额外包含 `quantity_of_rolls` 数组) - 错误: - `400`:参数缺失或状态不可编辑(`{"error": "销售单当前状态不可修改"}`) - `404`:订单不存在 > 其余订单(SalesReturn/Purchase/PurchaseReturn)的编辑接口,请在实现后按同一规范补充到本文件。 ## SalesReturnOrder 更新 - 路径:`PUT/PATCH /api/v1/sales-return-orders//` - 请求体字段: - `customer`、`warehouse`、`return_date`、`remarks`(可选) - `sales_order`:可重新绑定关联销售单,同样必须属于当前客户 - `items`:与创建规则一致(严进模式需 `numbers`,宽进模式 `quantity/num_of_rolls` 等) - 响应:`200 OK`,结构同 `GET /sales-return-orders/` + `quantity_of_rolls` - 错误示例: - `{"error": "销售退货单当前状态不可修改"}`(状态非 PENDING) - `{"error": "销售退货单的客户必须与原销售单一致"}`(客户不匹配) ## PurchaseOrder 更新 - 路径:`PUT/PATCH /api/v1/purchase-orders//` - 请求体字段: - `supplier`、`warehouse`、`order_date`、`remarks` - `items`:与创建规则相同(严进模式 `numbers`,宽进 `quantity/num_of_rolls`) - 响应:`200 OK`,返回最新采购单,新增 `quantity_of_rolls` 字段 - 错误示例: - `{"error": "采购单当前状态不可修改"}`(状态非 PENDING) ## PurchaseReturnOrder 更新 - 路径:`PUT/PATCH /api/v1/purchase-return-orders//` - 请求体字段: - `supplier`、`warehouse`、`return_date`、`remarks` - `purchase_order`:可重新绑定关联采购单,必须属于当前供应商 - `items`:结构同创建(严出仓仍需 `consume_detail_ids`) - 响应:`200 OK`,返回采购退货单详情(含 `quantity_of_rolls`) - 错误示例: - `{"error": "采购退货单当前状态不可修改"}` - `{"error": "采购退货单的供应商必须与原采购单一致"}`