From 481452eea79380558c817d6cb2135cfde936df94 Mon Sep 17 00:00:00 2001 From: Parsa Nazer Date: Thu, 28 May 2026 10:30:33 +0330 Subject: [PATCH] add order detial view --- backend/order/serializers.py | 38 ++++++++++++++++++++++++++++++++++-- backend/order/views.py | 17 ++++++++++------ 2 files changed, 47 insertions(+), 8 deletions(-) diff --git a/backend/order/serializers.py b/backend/order/serializers.py index 80de7bb..b021374 100644 --- a/backend/order/serializers.py +++ b/backend/order/serializers.py @@ -151,7 +151,7 @@ class OrderListSerializer(serializers.ModelSerializer): class Meta: model = OrderModel fields = ['created_at', 'status', "images", "count", - "id", 'final_price', 'order_id', 'verbose_status'] + "id", 'final_price', 'order_id', 'verbose_status', 'is_paid'] read_only_fields = ['count', 'images', 'order_id', 'verbose_status'] def get_verbose_status(self, obj): @@ -172,12 +172,46 @@ class OrderListSerializer(serializers.ModelSerializer): return filter(lambda x: x is not None, image_list) +class OrderItemDetailSerializer(serializers.ModelSerializer): + product = serializers.SerializerMethodField() + price = serializers.SerializerMethodField() + final_price = serializers.SerializerMethodField() + discount_amount = serializers.SerializerMethodField() + special_discount = serializers.SerializerMethodField() + + class Meta: + model = OrderItemModel + fields = [ + 'id', 'product', 'quantity', 'price', 'final_price', + 'discount_amount', 'discount_percent', 'special_discount', + ] + + def get_product(self, obj): + return ProductVariantSerialzier( + instance=obj.product, context={'request': self.context.get('request')} + ).data + + def get_price(self, obj): + return f'{obj.total_price_before_discount():,.0f} تومانءءء' + + def get_final_price(self, obj): + return f'{obj.price_after_special_discount():,.0f} تومانءءء' + + def get_discount_amount(self, obj): + return f'{obj.total_product_discount_amount():,.0f} تومانءءء' + + def get_special_discount(self, obj): + if obj.special_discount_amount: + return f'{obj.special_discount_amount:,.0f} تومانءءء' + return None + + class OrderGetSerializer(serializers.ModelSerializer): count = serializers.SerializerMethodField() images = serializers.SerializerMethodField() order_id = serializers.SerializerMethodField() verbose_status = serializers.SerializerMethodField() - items = OrderItemSerailzier(many=True) + items = OrderItemDetailSerializer(many=True) address = UserAddressSerializer() discount_code = DiscountCodeSerializer() diff --git a/backend/order/views.py b/backend/order/views.py index e9e3ee6..a1c3523 100644 --- a/backend/order/views.py +++ b/backend/order/views.py @@ -214,11 +214,13 @@ class OrderlistView(APIView): status_filter = request.query_params.get("status", None) sort = request.query_params.get('sort', None) if status_filter in ['ADMIN_PENDING', 'PENDING', 'POSTED', 'RECEIVED', 'CANCELED', 'REFUNDED']: - orders.filter(status=status_filter) + orders = orders.filter(status=status_filter) if sort: if sort not in ['created_at', '-created_at', 'final_price', '-final_price']: return Response({'detail': 'پارامتر sort اشتباه است'}, status=status.HTTP_400_BAD_REQUEST) orders = orders.order_by(sort) + else: + orders = orders.order_by('-created_at') paginator = self.pagination_class() paginated_orders = paginator.paginate_queryset(orders, request) orders_ser = self.serializer_class( @@ -544,11 +546,14 @@ class UserOrderInvoiceView(APIView): bank_detail = Bank.objects.get(tracking_code=order_id) order = bank_detail.order order_id = order.id - except OrderModel.DoesNotExist: - return Response( - {'detail': 'سفارش مورد نظر یافت نشد'}, - status=status.HTTP_404_NOT_FOUND, - ) + except Bank.DoesNotExist: + try: + order = OrderModel.objects.get(id=order_id) + except OrderModel.DoesNotExist: + return Response( + {'detail': 'سفارش مورد نظر یافت نشد'}, + status=status.HTTP_404_NOT_FOUND, + ) if order.user != request.user: return Response(