1
0
forked from erp-dev/erp

feat: added put/patch api to main oobject of business module

This commit is contained in:
2025-12-12 14:45:51 +08:00
parent 1a8c446365
commit 9e1f994416
14 changed files with 11611 additions and 0 deletions

View File

@@ -27,6 +27,7 @@
|-----|------|------|
| `/purchase-orders/` | GET | 分页列表。 |
| `/purchase-orders/` | POST | 创建采购单。 |
| `/purchase-orders/<id>/` | PUT/PATCH | 编辑采购单(仅限审批中)。 |
| `/purchase-orders/<id>/review/` | POST | 审批或作废。 |
### 2.1 创建请求体
@@ -75,6 +76,7 @@
| API | 方法 | 描述 |
|-----|------|------|
| `/purchase-return-orders/` | GET/POST | 与采购单相同的查询/创建接口,字段改为 `return_date`。 |
| `/purchase-return-orders/<id>/` | PUT/PATCH | 编辑采购退货单(仅限审批中)。 |
| `/purchase-return-orders/<id>/review/` | POST | 审批或作废,流程与采购单一致。 |
- **创建字段**`supplier``warehouse``return_date``items`、可选 `purchase_order``items` 结构沿用采购单;当仓库 `mode=RESTRICT_IN_OUT` 时必须提供 `consume_detail_ids`,指明要冲销的入库明细。
@@ -90,6 +92,7 @@
|-----|------|------|
| `/sales-orders/` | GET | 分页列表。 |
| `/sales-orders/` | POST | 创建销售单。 |
| `/sales-orders/<id>/` | PUT/PATCH | 编辑销售单(仅限审批中)。 |
| `/sales-orders/<id>/review/` | POST | 审批或作废。 |
### 3.1 创建请求体
@@ -137,6 +140,7 @@
| API | 方法 | 描述 |
|-----|------|------|
| `/sales-return-orders/` | GET/POST | 创建 / 列表接口。 |
| `/sales-return-orders/<id>/` | PUT/PATCH | 编辑销售退货单(仅限审批中)。 |
| `/sales-return-orders/<id>/review/` | POST | 审批或作废。 |
- **创建字段**`customer``warehouse``return_date``items`、可选 `sales_order`。因退货为入库动作,严出仓不再需要 `consume_detail_ids`

58
docs/orders_edit_api.md Normal file
View File

@@ -0,0 +1,58 @@
# 订单编辑 API 概览
用于更新业务订单(销售单、销售退货单、采购单、采购退货单)的共同约束:
- 仅允许 **审批中**`PENDING`)状态编辑;若订单已审批/作废,服务层会抛出错误 `"{实体}当前状态不可修改"`
- 更新接口统一使用 `PUT/PATCH /api/v1/<order-type>/<id>/`,请求体必须包含 `items`,且为非空数组。
- 数量校验与创建逻辑一致:严进仓需 `numbers`,宽进仓需 `quantity + num_of_rolls`,严进严出(出库)需 `consume_detail_ids`
- 订单字段(客户/供应商、仓库、备注、日期等)可被更新,未提供的字段沿用原值。
## SalesOrder 更新
- 路径:`PUT/PATCH /api/v1/sales-orders/<id>/`
- 请求体字段(全部可选,但 `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/<id>/`
- 请求体字段:
- `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/<id>/`
- 请求体字段:
- `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/<id>/`
- 请求体字段:
- `supplier``warehouse``return_date``remarks`
- `purchase_order`:可重新绑定关联采购单,必须属于当前供应商
- `items`:结构同创建(严出仓仍需 `consume_detail_ids`
- 响应:`200 OK`,返回采购退货单详情(含 `quantity_of_rolls`
- 错误示例:
- `{"error": "采购退货单当前状态不可修改"}`
- `{"error": "采购退货单的供应商必须与原采购单一致"}`

View File

@@ -0,0 +1,62 @@
# Printing 模块字段说明2025-12-12
## PrintingJob
来源:`api_v1/views/printing/serializers.py` 中的 `PrintingJobDetailSerializer`
| 字段 | 说明 |
|------|------|
| `id` | 主键 |
| `printing_order` / `printing_order_id` | 关联的印染主订单 ID 与人类可读编号 |
| `product` / `product_name` / `product_code` | 关联产品 |
| `quantity` / `unit` | 生产数量与单位 |
| `size` | 一段尺寸 |
| `pieces` | 件数 |
| `description` | 备注 |
| `work_state` | 业务进展枚举值,详见下表 |
| `work_state_display` | 业务进展的中文描述 |
| `status` / `status_id` | stateflow 状态显示值与下一步节点 ID |
| `is_completed` / `has_started` | 是否完成、是否已开始 |
| `business_object_id` | 关联流程实例 ID |
| `created_at` / `updated_at` | 创建、更新时间戳 |
### `work_state` 枚举
定义于 `printing.models.PrintingJobWorkStateEnum`
| 值 | 标识 |
|----|------|
| `0` | 生产中 |
| `1` | 待送货 |
| `2` | 待开单 |
| `3` | 已完结 |
Serializer 与 Model 完全同步,`work_state` 可在创建/更新接口提交(字段可选),返回时携带 `work_state_display`
## PlateOrder
来源:`api_v1/views/printing/serializers.py` 中的 `PlateOrderDetailSerializer`
PlateOrder 模型当前 **没有 `work_state` 字段**。主要字段如下(按序列化器顺序):
| 字段 | 说明 |
|------|------|
| `id` / `design_code` | 主键与设计编号(空则回退为主键字符串) |
| `plate_type` / `plate_date` / `plate_method` | 开版类型、时间、方式 |
| `plate_image` / `plate_image_url` | JSONField 存储的图片信息及其对外地址 |
| `image_name` / `plate_notes` / `reprint_reason` | 图片名称、注意事项、复版原因 |
| `urgency_level` / `is_invalid` | 紧急程度、是否作废 |
| `customer` / `customer_name` / `customer_phone` / `area` / `default_address` | 客户与地址信息 |
| `salesperson` / `merchandiser` / `designer` 及对应 `*_name` | 关联员工 |
| `style_name` / `fabric` / `fabric_source` / `width` / `production_method` | 款式与面料信息 |
| `is_mark_frame` / `drawing_rating` / `color_matching_rating` / `sample_rating` / `difficulty_rating` | 标记及评分字段 |
| `sample_meter` / `required_sample_meters` | 样品米数及需求 |
| `required_completion_date` / `completion_date` | 要求完成与实际完成时间 |
| `approval_result` / `is_ordered` / `customer_feedback` | 审批结果、下单状态、客户反馈 |
| `process` / `process_name` | 关联流程 ID 与名称 |
| `status` / `status_id` / `is_completed` / `has_started` / `progress_percentage` / `business_object_id` / `last_completed_state` | stateflow 状态相关字段 |
| `print_count` | 打印次数 |
| `created_at` / `updated_at` | 创建、更新时间戳 |
由于 PlateOrder 未包含 `work_state`,前端无需提交该字段;若后续业务需要,可在模型与序列化器中新增字段并同步更新本文档。