add order detial view

This commit is contained in:
Parsa Nazer
2026-05-28 10:30:33 +03:30
parent 9b58055360
commit 481452eea7
2 changed files with 47 additions and 8 deletions
+36 -2
View File
@@ -151,7 +151,7 @@ class OrderListSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = OrderModel model = OrderModel
fields = ['created_at', 'status', "images", "count", 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'] read_only_fields = ['count', 'images', 'order_id', 'verbose_status']
def get_verbose_status(self, obj): def get_verbose_status(self, obj):
@@ -172,12 +172,46 @@ class OrderListSerializer(serializers.ModelSerializer):
return filter(lambda x: x is not None, image_list) 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): class OrderGetSerializer(serializers.ModelSerializer):
count = serializers.SerializerMethodField() count = serializers.SerializerMethodField()
images = serializers.SerializerMethodField() images = serializers.SerializerMethodField()
order_id = serializers.SerializerMethodField() order_id = serializers.SerializerMethodField()
verbose_status = serializers.SerializerMethodField() verbose_status = serializers.SerializerMethodField()
items = OrderItemSerailzier(many=True) items = OrderItemDetailSerializer(many=True)
address = UserAddressSerializer() address = UserAddressSerializer()
discount_code = DiscountCodeSerializer() discount_code = DiscountCodeSerializer()
+11 -6
View File
@@ -214,11 +214,13 @@ class OrderlistView(APIView):
status_filter = request.query_params.get("status", None) status_filter = request.query_params.get("status", None)
sort = request.query_params.get('sort', None) sort = request.query_params.get('sort', None)
if status_filter in ['ADMIN_PENDING', 'PENDING', 'POSTED', 'RECEIVED', 'CANCELED', 'REFUNDED']: 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:
if sort not in ['created_at', '-created_at', 'final_price', '-final_price']: if sort not in ['created_at', '-created_at', 'final_price', '-final_price']:
return Response({'detail': 'پارامتر sort اشتباه است'}, status=status.HTTP_400_BAD_REQUEST) return Response({'detail': 'پارامتر sort اشتباه است'}, status=status.HTTP_400_BAD_REQUEST)
orders = orders.order_by(sort) orders = orders.order_by(sort)
else:
orders = orders.order_by('-created_at')
paginator = self.pagination_class() paginator = self.pagination_class()
paginated_orders = paginator.paginate_queryset(orders, request) paginated_orders = paginator.paginate_queryset(orders, request)
orders_ser = self.serializer_class( orders_ser = self.serializer_class(
@@ -544,11 +546,14 @@ class UserOrderInvoiceView(APIView):
bank_detail = Bank.objects.get(tracking_code=order_id) bank_detail = Bank.objects.get(tracking_code=order_id)
order = bank_detail.order order = bank_detail.order
order_id = order.id order_id = order.id
except OrderModel.DoesNotExist: except Bank.DoesNotExist:
return Response( try:
{'detail': 'سفارش مورد نظر یافت نشد'}, order = OrderModel.objects.get(id=order_id)
status=status.HTTP_404_NOT_FOUND, except OrderModel.DoesNotExist:
) return Response(
{'detail': 'سفارش مورد نظر یافت نشد'},
status=status.HTTP_404_NOT_FOUND,
)
if order.user != request.user: if order.user != request.user:
return Response( return Response(