1
0
forked from erp-dev/erp

feat: added area field into shipments model

This commit is contained in:
2026-01-16 17:58:17 +08:00
parent 2e0b7dc335
commit c73014f69c
7 changed files with 123 additions and 1 deletions

View File

@@ -16,6 +16,7 @@ from .serializers import (
ShipmentSerializer,
ShipmentCreateNormalSerializer,
ShipmentCreateExternalSerializer,
ShipmentUpdateSerializer,
)
@@ -122,6 +123,7 @@ class ShipmentListCreateView(ListModelMixin, GenericAPIView):
sales_item_ids=data['sales_items'],
created_by=request.user,
remark=data.get('remark', ''),
area=data.get('area', ''),
)
except ValueError as e:
return Response({'detail': str(e)}, status=status.HTTP_400_BAD_REQUEST)
@@ -161,6 +163,47 @@ class ShipmentDetailView(RetrieveModelMixin, GenericAPIView):
def get(self, request, pk: int):
return self.retrieve(request, pk=pk)
def patch(self, request, pk: int):
"""
更新出货单(部分更新)
PATCH /api/v1/shipment/shipments/<id>/
"""
shipment = self.get_object()
serializer = ShipmentUpdateSerializer(data=request.data, partial=True)
if not serializer.is_valid():
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
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
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):
"""
更新出货单(全量更新,当前实现允许缺省字段,等同于 PATCH
PUT /api/v1/shipment/shipments/<id>/
"""
return self.patch(request, pk=pk)
class ShipmentExternalCreateView(APIView):
"""
@@ -191,6 +234,7 @@ class ShipmentExternalCreateView(APIView):
external_finished_products=data['external_finished_products'],
created_by=request.user,
remark=data.get('remark', ''),
area=data.get('area', ''),
)
except ValueError as e:
return Response({'detail': str(e)}, status=status.HTTP_400_BAD_REQUEST)