mirror of
https://github.com/ae-utbm/sith.git
synced 2024-11-30 04:54:23 +00:00
39 lines
1.6 KiB
Python
39 lines
1.6 KiB
Python
|
from django.shortcuts import get_object_or_404
|
||
|
from ninja_extra import ControllerBase, api_controller, route
|
||
|
from ninja_extra.exceptions import NotFound, PermissionDenied
|
||
|
from ninja_extra.permissions import IsAuthenticated
|
||
|
from pydantic import NonNegativeInt
|
||
|
|
||
|
from core.models import User
|
||
|
from counter.models import BillingInfo, Customer
|
||
|
from eboutic.models import Basket
|
||
|
from eboutic.schemas import BillingInfoSchema
|
||
|
|
||
|
|
||
|
@api_controller("/etransaction", permissions=[IsAuthenticated])
|
||
|
class EtransactionInfoController(ControllerBase):
|
||
|
@route.put("/billing-info/{user_id}", url_name="put_billing_info")
|
||
|
def put_user_billing_info(self, user_id: NonNegativeInt, info: BillingInfoSchema):
|
||
|
"""Update or create the billing info of this user."""
|
||
|
if user_id == self.context.request.user.id:
|
||
|
user = self.context.request.user
|
||
|
elif self.context.request.user.is_root:
|
||
|
user = get_object_or_404(User, pk=user_id)
|
||
|
else:
|
||
|
raise PermissionDenied
|
||
|
customer, _ = Customer.get_or_create(user)
|
||
|
BillingInfo.objects.update_or_create(
|
||
|
customer=customer, defaults=info.model_dump(exclude_none=True)
|
||
|
)
|
||
|
|
||
|
@route.get("/data", url_name="etransaction_data", include_in_schema=False)
|
||
|
def fetch_etransaction_data(self):
|
||
|
"""Generate the data to pay an eboutic command with paybox.
|
||
|
|
||
|
The data is generated with the basket that is used by the current session.
|
||
|
"""
|
||
|
basket = Basket.from_session(self.context.request.session)
|
||
|
if basket is None:
|
||
|
raise NotFound
|
||
|
return dict(basket.get_e_transaction_data())
|