feat: added tests for orders creation

This commit is contained in:
2024-05-13 13:23:01 +02:00
parent 9d83c3b30f
commit d8fa4dd5e1
5 changed files with 224 additions and 5 deletions
+1 -1
View File
@@ -181,9 +181,9 @@ class OrderLineSerializer(serializers.ModelSerializer):
class Meta:
model = OrderLine
fields = (
"id",
"product",
"quantity",
"order",
"price",
"base_total",
"total",
+38 -1
View File
@@ -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"))