From 880ab60facfd5b8ddc233b9324a21631ca3ff631 Mon Sep 17 00:00:00 2001 From: Parsa Nazer Date: Tue, 25 Feb 2025 00:54:50 +0330 Subject: [PATCH] order list view and serilaizer --- backend/order/models.py | 20 +++++++++++--------- backend/order/serializers.py | 10 ++++++++-- backend/order/urls.py | 3 ++- backend/order/views.py | 19 ++++++++++++------- 4 files changed, 33 insertions(+), 19 deletions(-) diff --git a/backend/order/models.py b/backend/order/models.py index 570351b..3f37b5b 100644 --- a/backend/order/models.py +++ b/backend/order/models.py @@ -59,21 +59,23 @@ class OrderModel(models.Model): print('didnt send') super().save(*args, **kwargs) - def total_with_discount(self): - total_with_item_discount = sum(item.total_with_discount() for item in self.items.all()) - if self.discount_code: - if not self.discount_code.is_valid(): - raise DiscountNotAvailableError('این کد تخفیف دیگر معتبر نیست') - discount_percent = self.discount_code.percent - return total_with_item_discount * ((100 - discount_percent) / 100) - return total_with_item_discount + def discount(self): + pass + # total_with_item_discount = sum(item.total_with_discount() for item in self.items.all()) + # if self.discount_code: + # if not self.discount_code.is_valid(): + # raise DiscountNotAvailableError('این کد تخفیف دیگر معتبر نیست') + # discount_percent = self.discount_code.percent + # return total_with_item_discount * ((100 - discount_percent) / 100) + # return total_with_item_discount def tax(self): return self.total_without_tax() * 0.2 def total(self): - return self.total_with_discount() + self.tax() + pass + # return self.total_with_discount() + self.tax() def remove_order_item(self, item_pk, quantity): pass diff --git a/backend/order/serializers.py b/backend/order/serializers.py index 093c002..880b064 100644 --- a/backend/order/serializers.py +++ b/backend/order/serializers.py @@ -8,8 +8,14 @@ class OrderItemSerailzier(serializers.ModelSerializer): fields = "__all__" read_only_fields = ('order', 'product') -class OrderModelSerializer(serializers.ModelSerializer): +class CartSerializer(serializers.ModelSerializer): items = OrderItemSerailzier(many=True) class Meta: model = OrderModel - fields = ['address', 'created_at', 'is_paid', 'status', 'discount_code', 'items'] \ No newline at end of file + fields = ['address', 'created_at', 'is_paid', 'status', 'discount_code', 'items'] + + +class OrderSerializer(serializers.ModelSerializer): + class Meta: + model = OrderModel + fields = ['address', 'created_at', 'is_paid', 'status', 'discount_code',] \ No newline at end of file diff --git a/backend/order/urls.py b/backend/order/urls.py index a4d4dbd..325e1a5 100644 --- a/backend/order/urls.py +++ b/backend/order/urls.py @@ -1,9 +1,10 @@ from django.conf.urls.static import static from django.contrib import admin from django.urls import path, include -from .views import CartItemViews, CartView +from .views import CartItemViews, CartView, OrderlistView urlpatterns = [ + path('list', OrderlistView.as_view(), name='order-list'), path('cart', CartView.as_view()), path('cart/item/', CartItemViews.as_view(), name='change-item-cart'), # path('payment', CartView.as_view()), diff --git a/backend/order/views.py b/backend/order/views.py index 7f5971c..bb21f5a 100644 --- a/backend/order/views.py +++ b/backend/order/views.py @@ -4,7 +4,7 @@ from rest_framework.views import APIView, Response from django.shortcuts import get_object_or_404 from product.models import ProductVariant from rest_framework.permissions import IsAuthenticated -from .serializers import OrderItemSerailzier, OrderModelSerializer +from .serializers import * # from cart.models import from rest_framework import status from .models import OrderItemModel, OrderModel @@ -53,11 +53,6 @@ class CartItemViews(APIView): user=request.user, status='CART' ) - # order_item, created = OrderItemModel.objects.get_or_create( - # order=cart_order, - # product=product_variant, - # defaults={'quantity': request.data.get('quantity', 1)} - # ) order_item = get_object_or_404(OrderItemModel, order=cart_order, product=product_variant) order_item.delete() return Response({'detail': f'محصول {product_variant.product.name} از سبد خرید پاک شد'}, status=status.HTTP_204_NO_CONTENT) @@ -66,9 +61,19 @@ class CartItemViews(APIView): class CartView(APIView): permission_classes = [IsAuthenticated] - serializer_class = OrderModelSerializer + serializer_class = CartSerializer def get(self, request): user = request.user cart_instance, created = OrderModel.objects.get_or_create(user=user, status='CART') cart_ser = self.serializer_class(instance=cart_instance, context={'request': request}) return Response(cart_ser.data, status=status.HTTP_200_OK) + + +class OrderlistView(APIView): + permission_classes = [IsAuthenticated] + serializer_class = OrderSerializer + def get(self, request): + user = request.user + orders = OrderModel.objects.filter(user=user).exclude(status="CART") + orders_ser = self.serializer_class(instance=orders, many=True, context={'request': request}) + return Response(orders_ser.data, status=status.HTTP_200_OK) \ No newline at end of file