Features: 1) Add promocode_uuid field to BuyAsBusinessOrderSerializer; 2) Enhance error handling in buy_without_registration by wrapping in a try-except block and returning appropriate HTTP

This commit is contained in:
Egor Pavlovich Gorbunov 2025-10-01 17:59:06 +03:00
parent 330177f6e4
commit b1c022b974
4 changed files with 17 additions and 13 deletions

View file

@ -1831,7 +1831,7 @@ class CustomerRelationshipManagementProvider(ExportModelOperationsMixin("crm_pro
verbose_name_plural = _("CRMs") verbose_name_plural = _("CRMs")
class OrderCrmLink(ExportModelOperationsMixin("order_crm_link"), NiceModel): class OrderCrmLink(ExportModelOperationsMixin("order_crm_link"), NiceModel): # type: ignore
order = ForeignKey(to=Order, on_delete=PROTECT, related_name="crm_links") order = ForeignKey(to=Order, on_delete=PROTECT, related_name="crm_links")
crm = ForeignKey(to=CustomerRelationshipManagementProvider, on_delete=PROTECT, related_name="order_links") crm = ForeignKey(to=CustomerRelationshipManagementProvider, on_delete=PROTECT, related_name="order_links")
crm_lead_id = CharField(max_length=30, unique=True, db_index=True) crm_lead_id = CharField(max_length=30, unique=True, db_index=True)

View file

@ -177,6 +177,7 @@ class BuyUnregisteredOrderSerializer(Serializer):
class BuyAsBusinessOrderSerializer(Serializer): class BuyAsBusinessOrderSerializer(Serializer):
products = AddOrderProductSerializer(many=True, required=True) products = AddOrderProductSerializer(many=True, required=True)
business_identificator = CharField(required=True) business_identificator = CharField(required=True)
promocode_uuid = UUIDField(required=False)
business_email = CharField(required=True) business_email = CharField(required=True)
business_phone_number = CharField(required=True) business_phone_number = CharField(required=True)
billing_business_address_uuid = CharField(required=False) billing_business_address_uuid = CharField(required=False)

View file

@ -455,7 +455,7 @@ class BuyAsBusinessView(APIView):
order.save() order.save()
return Response( return Response(
status=status.HTTP_400_BAD_REQUEST, status=status.HTTP_400_BAD_REQUEST,
data={"error": str(e)}, data={"detail": str(e)},
) )

View file

@ -846,6 +846,7 @@ class OrderViewSet(EvibesViewSet):
serializer.is_valid(raise_exception=True) serializer.is_valid(raise_exception=True)
order = Order.objects.create(status="MOMENTAL") order = Order.objects.create(status="MOMENTAL")
products = [p["product_uuid"] for p in serializer.validated_data["products"]] products = [p["product_uuid"] for p in serializer.validated_data["products"]]
try:
transaction = order.buy_without_registration( transaction = order.buy_without_registration(
products=products, products=products,
promocode_uuid=serializer.validated_data.get("promocode_uuid"), promocode_uuid=serializer.validated_data.get("promocode_uuid"),
@ -856,7 +857,9 @@ class OrderViewSet(EvibesViewSet):
shipping_customer_address=serializer.validated_data.get("shipping_customer_address_uuid"), shipping_customer_address=serializer.validated_data.get("shipping_customer_address_uuid"),
payment_method=serializer.validated_data.get("payment_method"), payment_method=serializer.validated_data.get("payment_method"),
) )
return Response(status=status.HTTP_202_ACCEPTED, data=TransactionProcessSerializer(transaction).data) return Response(status=status.HTTP_201_CREATED, data=TransactionProcessSerializer(transaction).data)
except Exception as e:
return Response(status=status.HTTP_400_BAD_REQUEST, data={"detail": str(e)})
@action(detail=True, methods=["post"], url_path="add_order_product") @action(detail=True, methods=["post"], url_path="add_order_product")
def add_order_product(self, request, **kwargs): def add_order_product(self, request, **kwargs):