from django.shortcuts import render from .execptions import DiscountNotAvailableError 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 * # from cart.models import from rest_framework import status from .models import OrderItemModel, OrderModel, DiscountCode try: pass except DiscountNotAvailableError: pass """ add post remove delete show get pay """ class ApplyDiscountView(APIView): serializer_class = DiscountCodeSerializer permission_classes = [IsAuthenticated] def post(self, request): cart_order, created = OrderModel.objects.get_or_create( user=request.user, status='CART' ) discount_code = get_object_or_404(DiscountCode, code=request.data.get('code')) if not discount_code.is_valid(): return Response({'detail': discount_code.not_valid_reason()}, status=status.HTTP_400_BAD_REQUEST) cart_order.discount_code = discount_code cart_order.save() return Response({'detail': 'کد تخفیف با موفقیت اعمال شد'}, status=status.HTTP_200_OK) class CartItemClear(APIView): permission_classes = [IsAuthenticated] serializer_class = OrderItemSerailzier def delete(self, request): cart_order, created = OrderModel.objects.get_or_create( user=request.user, status='CART' ) cart_order.items.all().delete() return Response({'detail': f'سبد خرید با موفقیت خالی شد'}, status=status.HTTP_204_NO_CONTENT) class CartItemViews(APIView): permission_classes = [IsAuthenticated] serializer_class = OrderItemSerailzier def post(self, request, pk): product_variant = get_object_or_404(ProductVariant, pk=pk) response = 'محصول با موفقیت به سبد خرید اضافه شد' quantity = request.data.get('quantity', 1) quantity = max(quantity, 0) if product_variant.in_stock < quantity: quantity = product_variant.in_stock response = 'تعداد درخواستی بیشتر از موجودی محصول میباشد' cart_order, created = OrderModel.objects.get_or_create(user=request.user, status='CART') order_item, created = OrderItemModel.objects.get_or_create(order=cart_order, product=product_variant, defaults={'quantity': quantity}) if not created and order_item.quantity: order_item.quantity = quantity order_item.save() if not order_item.quantity: order_item.delete() return Response({'detail': response, 'count': quantity}, status=status.HTTP_202_ACCEPTED) def delete(self, request, pk): product_variant = get_object_or_404(ProductVariant, pk=pk) cart_order, created = OrderModel.objects.get_or_create( user=request.user, status='CART' ) 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) class CartView(APIView): permission_classes = [IsAuthenticated] 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)