forked from erp-dev/erp
feat: added area field into shipments model
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user