1
0
forked from erp-dev/erp

feat: mission replied calling task

This commit is contained in:
2026-04-17 23:26:33 +08:00
parent e109c00837
commit 8b1afc64c5
22 changed files with 1056 additions and 95 deletions

View File

@@ -625,7 +625,7 @@ def modify_status(
规则:
- 草稿 -> 只能已发布
- 已发布 -> 已审核 / 已驳回 / 已取消
- 已驳回 -> 已审核 / 已取消
- 已驳回 -> 已取消
- 已审核 -> 已取消
- 已取消 -> 不可再变
- 重复设置同一状态保持幂等,直接返回
@@ -642,7 +642,9 @@ def modify_status(
ShipmentStatus.CANCELLED,
},
ShipmentStatus.REJECTED: {
ShipmentStatus.APPROVED,
# 驳回现在会解绑销售品并回退到待分配池。
# 在没有重新绑定流程前,暂时关闭 REJECTED -> APPROVED避免审核空出货单。
# ShipmentStatus.APPROVED,
ShipmentStatus.CANCELLED,
},
ShipmentStatus.APPROVED: {
@@ -660,6 +662,22 @@ def modify_status(
if target_status == ShipmentStatus.APPROVED and approved_by is None:
raise ValueError("目标状态为已审核时approved_by 不能为空")
update_fields = [
"status",
"status_modified_at",
"cancelled_by",
"approved_by",
"updated_at",
]
if target_status == ShipmentStatus.REJECTED:
bound_sales_item_qs = SalesItem.objects.select_for_update().filter(shipment=shipment)
shipment.rejected_sales_item_ids = list(
bound_sales_item_qs.order_by("id").values_list("id", flat=True)
)
bound_sales_item_qs.update(shipment=None)
update_fields.append("rejected_sales_item_ids")
shipment.status = target_status
shipment.status_modified_at = timezone.now()
@@ -669,15 +687,7 @@ def modify_status(
if target_status == ShipmentStatus.APPROVED:
shipment.approved_by = approved_by
shipment.save(
update_fields=[
"status",
"status_modified_at",
"cancelled_by",
"approved_by",
"updated_at",
]
)
shipment.save(update_fields=update_fields)
return shipment