Features: 1) Add handling for business user attributes in order logic; 2) Update HTTP response codes for business order creation to 201.

Fixes: 1) Fix typo `business_inn` to `business_identificator`.

Extra: 1) Improve exception handling with specific error cases for invalid `force` values; 2) Minor formatting adjustments in `models.py`.
This commit is contained in:
Egor Pavlovich Gorbunov 2025-09-01 13:17:51 +03:00
parent 06b88254e0
commit a44b8fb652
4 changed files with 10 additions and 5 deletions

View file

@ -91,7 +91,7 @@ BUY_AS_BUSINESS_SCHEMA = {
summary=_("purchase an order as a business"), summary=_("purchase an order as a business"),
request=BuyAsBusinessOrderSerializer, request=BuyAsBusinessOrderSerializer,
responses={ responses={
200: TransactionProcessSerializer, 201: TransactionProcessSerializer,
400: error, 400: error,
}, },
description=( description=(

View file

@ -1640,6 +1640,11 @@ class Order(ExportModelOperationsMixin("order"), NiceModel): # type: ignore [mi
if not order.user: if not order.user:
raise ValueError(_("you cannot buy an order without a user")) raise ValueError(_("you cannot buy an order without a user"))
if order.user.attributes.get("is_business", False):
if type(order.attributes) is not dict:
order.attributes = {}
order.attributes.update({"is_business": True})
if not order.user.payments_balance: if not order.user.payments_balance:
raise ValueError(_("a user without a balance cannot buy with balance")) raise ValueError(_("a user without a balance cannot buy with balance"))
@ -1663,8 +1668,8 @@ class Order(ExportModelOperationsMixin("order"), NiceModel): # type: ignore [mi
currency=CURRENCY_CODE, currency=CURRENCY_CODE,
order=order, order=order,
) )
case _:
return order raise ValueError(_("invalid force value"))
def buy_without_registration(self, products: list, promocode_uuid, **kwargs) -> Transaction | None: def buy_without_registration(self, products: list, promocode_uuid, **kwargs) -> Transaction | None:
if config.DISABLED_COMMERCE: if config.DISABLED_COMMERCE:

View file

@ -176,7 +176,7 @@ class BuyUnregisteredOrderSerializer(Serializer):
class BuyAsBusinessOrderSerializer(Serializer): class BuyAsBusinessOrderSerializer(Serializer):
products = ListField(child=AddOrderProductSerializer(), required=True) products = ListField(child=AddOrderProductSerializer(), required=True)
business_inn = CharField(required=True) business_identificator = CharField(required=True)
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

@ -445,7 +445,7 @@ class BuyAsBusinessView(APIView):
is_business=True, is_business=True,
) )
return Response( return Response(
status=status.HTTP_202_ACCEPTED, status=status.HTTP_201_CREATED,
data=TransactionProcessSerializer(transaction).data, data=TransactionProcessSerializer(transaction).data,
) )