forked from erp-dev/erp
feat: retry haobuye sync order
This commit is contained in:
@@ -14,6 +14,7 @@ from shipment.models import Shipment, ShipmentDelivery
|
||||
|
||||
from .serializers import (
|
||||
SalesItemDetailSerializer,
|
||||
SalesItemRebuildSerializer,
|
||||
SalesItemSerializer,
|
||||
SalesItemUpdateSerializer,
|
||||
ShipmentStatusUpdateSerializer,
|
||||
@@ -984,6 +985,7 @@ class SalesItemDetailView(GenericAPIView):
|
||||
serializer_class = SalesItemDetailSerializer
|
||||
|
||||
def get_queryset(self):
|
||||
from shipment.models import SalesItem
|
||||
from shipment.services import get_active_sales_items_queryset
|
||||
|
||||
qs = (
|
||||
@@ -1079,3 +1081,81 @@ class SalesItemDetailView(GenericAPIView):
|
||||
except ValueError as e:
|
||||
return Response({"detail": str(e)}, status=status.HTTP_400_BAD_REQUEST)
|
||||
return Response({"detail": "销售品已标记为删除"}, status=status.HTTP_200_OK)
|
||||
|
||||
|
||||
class SalesItemRebuildView(GenericAPIView):
|
||||
"""
|
||||
销售品重建。
|
||||
|
||||
POST /api/v1/shipment/sales-items/<id>/rebuild/
|
||||
"""
|
||||
|
||||
permission_classes = [IsAuthenticated]
|
||||
|
||||
def get_queryset(self):
|
||||
from shipment.services import get_active_sales_items_queryset
|
||||
|
||||
qs = (
|
||||
get_active_sales_items_queryset()
|
||||
.select_related("shipment", "created_by")
|
||||
.order_by("id")
|
||||
)
|
||||
|
||||
user = self.request.user
|
||||
if getattr(user, "is_superuser", False):
|
||||
return qs
|
||||
|
||||
emp = getattr(user, "employee", None)
|
||||
merchant = getattr(emp, "merchant", None) if emp else None
|
||||
if not merchant:
|
||||
return SalesItem.objects.none()
|
||||
return qs.filter(merchant=merchant)
|
||||
|
||||
def post(self, request, pk: int):
|
||||
sales_item = self.get_queryset().filter(id=pk).first()
|
||||
if sales_item is None:
|
||||
return Response({"detail": "Not found."}, status=status.HTTP_404_NOT_FOUND)
|
||||
|
||||
if sales_item.created_by_id != request.user.id:
|
||||
return Response(
|
||||
{"detail": "只有销售品创建者才能执行重建"},
|
||||
status=status.HTTP_403_FORBIDDEN,
|
||||
)
|
||||
|
||||
serializer = SalesItemRebuildSerializer(data=request.data)
|
||||
if not serializer.is_valid():
|
||||
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
from shipment.models import SalesItemRebuildRecord
|
||||
from shipment.services import rebuild_sales_item
|
||||
|
||||
try:
|
||||
new_sales_item = rebuild_sales_item(
|
||||
sales_item,
|
||||
new_printing_job_id=serializer.validated_data["new_printing_job_id"],
|
||||
operator=request.user,
|
||||
quantity=serializer.validated_data.get("quantity"),
|
||||
)
|
||||
except ValueError as e:
|
||||
return Response({"detail": str(e)}, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
rebuild_record = SalesItemRebuildRecord.objects.filter(
|
||||
new_sales_item_id=new_sales_item.id
|
||||
).order_by("-id").first()
|
||||
response_serializer = SalesItemDetailSerializer(
|
||||
new_sales_item,
|
||||
context={
|
||||
**_build_sales_item_serializer_context([new_sales_item]),
|
||||
"request": request,
|
||||
},
|
||||
)
|
||||
return Response(
|
||||
{
|
||||
"detail": "销售品已重建",
|
||||
"old_sales_item_id": sales_item.id,
|
||||
"new_sales_item_id": new_sales_item.id,
|
||||
"rebuild_record_id": rebuild_record.id if rebuild_record else None,
|
||||
"data": response_serializer.data,
|
||||
},
|
||||
status=status.HTTP_201_CREATED,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user