forked from erp-dev/erp
fix: DISABLE_SERVER_SIDE_CURSORS
This commit is contained in:
@@ -1307,6 +1307,29 @@ class ShipmentQueryAPITestCase(TestCase):
|
||||
self.shipment1.refresh_from_db()
|
||||
self.assertEqual(getattr(self.shipment1, "area", ""), "更新地区")
|
||||
|
||||
def test_patch_shipment_rejects_non_draft(self):
|
||||
"""
|
||||
非草稿状态的出货单不允许修改业务数据。
|
||||
"""
|
||||
from shipment.services import modify_status
|
||||
|
||||
modify_status(
|
||||
self.shipment1,
|
||||
target_status=shipment_models.ShipmentStatus.PUBLISHED,
|
||||
operator=self.user1,
|
||||
)
|
||||
|
||||
resp = self.client.patch(
|
||||
f"/api/v1/shipment/shipments/{self.shipment1.id}/",
|
||||
data={"area": "不允许修改"},
|
||||
format="json",
|
||||
)
|
||||
self.assertEqual(resp.status_code, status.HTTP_400_BAD_REQUEST)
|
||||
self.assertIn("仅草稿状态", resp.json()["detail"])
|
||||
|
||||
self.shipment1.refresh_from_db()
|
||||
self.assertEqual(self.shipment1.area, "A1")
|
||||
|
||||
def test_list_shipments_includes_external_finished_product_remark(self):
|
||||
"""
|
||||
Shipments list 需要附带 external_finished_products 明细数据(包含 remark 字段)。
|
||||
|
||||
@@ -239,33 +239,20 @@ class ShipmentDetailView(RetrieveModelMixin, GenericAPIView):
|
||||
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
||||
data = serializer.validated_data
|
||||
|
||||
# customer 变更需校验 merchant 一致
|
||||
if "customer" in data:
|
||||
from basic_info.models import Customer
|
||||
from shipment.services import update_shipment
|
||||
|
||||
try:
|
||||
customer = Customer.objects.get(id=data["customer"])
|
||||
except Customer.DoesNotExist:
|
||||
return Response(
|
||||
{"detail": f"客户 {data['customer']} 不存在"},
|
||||
status=status.HTTP_400_BAD_REQUEST,
|
||||
)
|
||||
if customer.merchant_id != shipment.merchant_id:
|
||||
return Response(
|
||||
{"detail": "无权限绑定该客户"}, status=status.HTTP_400_BAD_REQUEST
|
||||
)
|
||||
shipment.customer = customer
|
||||
try:
|
||||
shipment = update_shipment(
|
||||
shipment,
|
||||
customer_id=data.get("customer"),
|
||||
shipment_date=data.get("shipment_date"),
|
||||
area=data.get("area"),
|
||||
remark=data.get("remark"),
|
||||
external_id=data.get("external_id"),
|
||||
)
|
||||
except ValueError as e:
|
||||
return Response({"detail": str(e)}, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
if "shipment_date" in data:
|
||||
shipment.shipment_date = data["shipment_date"]
|
||||
if "area" in data:
|
||||
shipment.area = (data.get("area") or "").strip()
|
||||
if "remark" in data:
|
||||
shipment.remark = data.get("remark") or ""
|
||||
if "external_id" in data:
|
||||
shipment.external_id = (data.get("external_id") or "").strip() or None
|
||||
|
||||
shipment.save()
|
||||
return Response(ShipmentSerializer(shipment).data, status=status.HTTP_200_OK)
|
||||
|
||||
def put(self, request, pk: int):
|
||||
|
||||
Reference in New Issue
Block a user