1
0
forked from erp-dev/erp

fix: order_description change to copy by rolling_warn of printing_order

This commit is contained in:
2026-04-23 23:55:06 +08:00
parent d4fbb2c7fe
commit 80805ba312
6 changed files with 16 additions and 9 deletions

View File

@@ -101,7 +101,8 @@ def _resolve_shipment_order_description(shipment: Shipment) -> str | None:
) )
if printing_job is None or printing_job.printing_order is None: if printing_job is None or printing_job.printing_order is None:
return None return None
return printing_job.printing_order.description # 目前滚筒预警字段被放在了 printing_order 上,暂时沿用这个字段来返回订单描述;
return printing_job.printing_order.rolling_warn
class ShipmentSerializer(serializers.ModelSerializer): class ShipmentSerializer(serializers.ModelSerializer):

View File

@@ -1634,6 +1634,7 @@ class ShipmentQueryAPITestCase(TestCase):
created_by=self.user1, created_by=self.user1,
external_order_id="QUERY-PO-001", external_order_id="QUERY-PO-001",
description="查询订单备注", description="查询订单备注",
rolling_warn="查询滚筒预警",
) )
self.printing_job1 = printing_models.PrintingJob.objects.create( self.printing_job1 = printing_models.PrintingJob.objects.create(
merchant=self.merchant1, merchant=self.merchant1,
@@ -1694,7 +1695,7 @@ class ShipmentQueryAPITestCase(TestCase):
self.assertIn("delivery_id", item) self.assertIn("delivery_id", item)
self.assertIsNone(item["delivery_id"]) self.assertIsNone(item["delivery_id"])
self.assertEqual(item["fabric"], "查询面料") self.assertEqual(item["fabric"], "查询面料")
self.assertEqual(item["order_description"], "查询订单备注") self.assertEqual(item["order_description"], "查询滚筒预警")
self.assertEqual(item["area"], "A1") self.assertEqual(item["area"], "A1")
self.assertEqual(item["status"], shipment_models.ShipmentStatus.DRAFT) self.assertEqual(item["status"], shipment_models.ShipmentStatus.DRAFT)
self.assertEqual(item["status_display"], "草稿(未发布)") self.assertEqual(item["status_display"], "草稿(未发布)")
@@ -1841,7 +1842,7 @@ class ShipmentQueryAPITestCase(TestCase):
self.assertIn("delivery_id", result) self.assertIn("delivery_id", result)
self.assertIsNone(result["delivery_id"]) self.assertIsNone(result["delivery_id"])
self.assertEqual(result["fabric"], "查询面料") self.assertEqual(result["fabric"], "查询面料")
self.assertEqual(result["order_description"], "查询订单备注") self.assertEqual(result["order_description"], "查询滚筒预警")
self.assertEqual(result["id"], self.shipment1.id) self.assertEqual(result["id"], self.shipment1.id)
self.assertIn("area", result) self.assertIn("area", result)
self.assertEqual(result["area"], "A1") self.assertEqual(result["area"], "A1")
@@ -3052,6 +3053,8 @@ class ShipmentDeliveryAPITestCase(APITestCase):
vehicle_trip="KD-007-D", vehicle_trip="KD-007-D",
created_by=self.user, created_by=self.user,
) )
self.shipment1.delivery = delivery
self.shipment1.save(update_fields=["delivery", "updated_at"])
permission = Permission.objects.get(codename="cancel_shipmentdelivery") permission = Permission.objects.get(codename="cancel_shipmentdelivery")
self.user.user_permissions.add(permission) self.user.user_permissions.add(permission)
@@ -3071,9 +3074,11 @@ class ShipmentDeliveryAPITestCase(APITestCase):
self.assertIsNotNone(data["cancelled_at"]) self.assertIsNotNone(data["cancelled_at"])
delivery.refresh_from_db() delivery.refresh_from_db()
self.shipment1.refresh_from_db()
self.assertEqual(delivery.status, shipment_models.ShipmentDeliveryStatus.CANCELLED) self.assertEqual(delivery.status, shipment_models.ShipmentDeliveryStatus.CANCELLED)
self.assertEqual(delivery.cancelled_by_id, self.user.id) self.assertEqual(delivery.cancelled_by_id, self.user.id)
self.assertIsNotNone(delivery.cancelled_at) self.assertIsNotNone(delivery.cancelled_at)
self.assertEqual(self.shipment1.delivery_id, delivery.id)
def test_bind_shipments_to_existing_delivery_success(self): def test_bind_shipments_to_existing_delivery_success(self):
delivery = shipment_models.ShipmentDelivery.objects.create( delivery = shipment_models.ShipmentDelivery.objects.create(

View File

@@ -170,7 +170,7 @@ class AgentShipmentListSerializer(serializers.ModelSerializer):
) )
if printing_job is None or printing_job.printing_order is None: if printing_job is None or printing_job.printing_order is None:
return None return None
return printing_job.printing_order.description return printing_job.printing_order.rolling_warn
def get_sales_items(self, obj): def get_sales_items(self, obj):
items = [i for i in obj.items.all() if i.delete_at is None] items = [i for i in obj.items.all() if i.delete_at is None]

View File

@@ -46,7 +46,7 @@ Authorization: <AGENT_ACCESS_KEY>
"customer": 5, "customer": 5,
"customer_name": "客户A", "customer_name": "客户A",
"fabric": "棉布 40S", "fabric": "棉布 40S",
"order_description": "订单备注", "order_description": "滚筒预警",
"shipment_date": "2026-04-14", "shipment_date": "2026-04-14",
"address": "广州市天河区", "address": "广州市天河区",
"contact_name": "张三", "contact_name": "张三",
@@ -157,7 +157,7 @@ Authorization: <AGENT_ACCESS_KEY>
- "未出货"定义:`delivery` 为空,即尚未关联送货单 - "未出货"定义:`delivery` 为空,即尚未关联送货单
- `delivery_id` 始终返回送货单ID未关联时为 `null` - `delivery_id` 始终返回送货单ID未关联时为 `null`
- `fabric` 来自该出货单所关联销售品对应生产订单的 `fabric`;若当前出货单没有销售品则返回 `null` - `fabric` 来自该出货单所关联销售品对应生产订单的 `fabric`;若当前出货单没有销售品则返回 `null`
- `order_description` 来自该出货单所关联销售品对应生产订单的 `description`;若当前出货单没有销售品则返回 `null` - `order_description` 当前来自该出货单所关联销售品对应生产订单的 `rolling_warn`;若当前出货单没有销售品则返回 `null`
- 结果按 `created_at` 降序排列 - 结果按 `created_at` 降序排列
- 只返回 `merchant_id` 对应商户的数据 - 只返回 `merchant_id` 对应商户的数据
- `sales_items` 包含该出货单的所有销售品(软删除的条目自动排除) - `sales_items` 包含该出货单的所有销售品(软删除的条目自动排除)

View File

@@ -54,7 +54,7 @@
"customer": 1, "customer": 1,
"customer_name": "客户A", "customer_name": "客户A",
"fabric": "棉布 40S", "fabric": "棉布 40S",
"order_description": "订单备注", "order_description": "滚筒预警",
"shipment_date": "2026-01-14", "shipment_date": "2026-01-14",
"status": 1, "status": 1,
"status_display": "草稿(未发布)", "status_display": "草稿(未发布)",
@@ -82,7 +82,7 @@
- `sales_items` 现在返回的是带图片字段的销售品详情结构 - `sales_items` 现在返回的是带图片字段的销售品详情结构
- `delivery_id` 始终返回送货单ID未绑定送货单时为 `null` - `delivery_id` 始终返回送货单ID未绑定送货单时为 `null`
- `fabric` 来自该出货单所关联销售品对应生产订单的 `fabric`;若当前出货单没有销售品,则返回 `null` - `fabric` 来自该出货单所关联销售品对应生产订单的 `fabric`;若当前出货单没有销售品,则返回 `null`
- `order_description` 来自该出货单所关联销售品对应生产订单的 `description`;若当前出货单没有销售品,则返回 `null` - `order_description` 当前返回该出货单所关联销售品对应生产订单的 `rolling_warn`;若当前出货单没有销售品,则返回 `null`
- `delivery_id=null` 不会触发过滤;如需按是否绑定送货单筛选,请使用 `delivery_isnull` - `delivery_id=null` 不会触发过滤;如需按是否绑定送货单筛选,请使用 `delivery_isnull`
- 若销售品关联的 `PrintingJob.product` 存在主图,则会返回 `product_image_url` - 若销售品关联的 `PrintingJob.product` 存在主图,则会返回 `product_image_url`
- 若无关联图片,则 `product_image_url``null` - 若无关联图片,则 `product_image_url``null`
@@ -231,7 +231,7 @@
| customer | int | 客户ID | | customer | int | 客户ID |
| customer_name | string | 客户名称 | | customer_name | string | 客户名称 |
| fabric | string/null | 面料;来自关联生产订单,若当前出货单没有销售品则为 null | | fabric | string/null | 面料;来自关联生产订单,若当前出货单没有销售品则为 null |
| order_description | string/null | 订单备注;来自关联生产订单的 `description`,若当前出货单没有销售品则为 null | | order_description | string/null | 滚筒预警;来自关联生产订单的 `rolling_warn`,若当前出货单没有销售品则为 null |
| shipment_date | string | 出货日期 | | shipment_date | string | 出货日期 |
| delivery_id | int/null | 关联送货单ID未绑定时为 null | | delivery_id | int/null | 关联送货单ID未绑定时为 null |
| address | string | 地址 | | address | string | 地址 |

View File

@@ -273,6 +273,7 @@ GET /api/v1/shipment/deliveries/?status=2&driver_name=张&vehicle_trip=001&limit
- 写入 `cancelled_at` - 写入 `cancelled_at`
- 写入 `cancelled_by` - 写入 `cancelled_by`
- 同时会根据 `request.user.employee` 更新 `operator` - 同时会根据 `request.user.employee` 更新 `operator`
- 取消不会释放或解绑当前已关联的出货单;如需解绑,需显式删除送货单或通过修改接口改绑
- 已取消的送货单再次取消保持幂等 - 已取消的送货单再次取消保持幂等
### 8. 追加绑定出货单到已有送货单 ### 8. 追加绑定出货单到已有送货单