feat: added tests for orders creation
This commit is contained in:
+38
-1
@@ -1,5 +1,9 @@
|
||||
from decimal import Decimal
|
||||
|
||||
from django.db.models.deletion import ProtectedError
|
||||
from django.utils.text import gettext_lazy as _
|
||||
from django.shortcuts import get_object_or_404
|
||||
from django.db import transaction
|
||||
|
||||
from rest_framework.viewsets import ModelViewSet
|
||||
from rest_framework.exceptions import ValidationError
|
||||
@@ -101,5 +105,38 @@ class OrderLineViewSet(ModelViewSet):
|
||||
serializer_class = OrderLineSerializer
|
||||
queryset = OrderLine.objects.all()
|
||||
|
||||
def perform_create(self, serializer):
|
||||
with transaction.atomic():
|
||||
order = get_object_or_404(Order, uuid=self.kwargs.get('order_id'))
|
||||
product = serializer.validated_data.get('product')
|
||||
price = product.prices.last()
|
||||
tax = price.tax.value
|
||||
quantity = serializer.validated_data.get('quantity')
|
||||
base_total = quantity * price.price
|
||||
taxes = base_total * (tax / Decimal('100'))
|
||||
total = base_total + taxes
|
||||
|
||||
instance = serializer.save(
|
||||
order=order,
|
||||
price=price.price,
|
||||
base_total=base_total,
|
||||
tax_value=tax,
|
||||
taxes=taxes,
|
||||
total=total,
|
||||
)
|
||||
|
||||
order.base_total += instance.base_total
|
||||
order.total += instance.total
|
||||
order.save()
|
||||
|
||||
def perform_destroy(self, instance):
|
||||
order = instance.order
|
||||
|
||||
with transaction.atomic():
|
||||
order.base_total -= instance.base_total
|
||||
order.total -= instance.total
|
||||
instance.delete()
|
||||
order.save()
|
||||
|
||||
def get_queryset(self):
|
||||
return super().get_queryset().filter(order_id=self.kwargs.get("order_id"))
|
||||
return super().get_queryset().select_related('order').filter(order__uuid=self.kwargs.get("order_id"))
|
||||
|
||||
Reference in New Issue
Block a user