75 lines
2.8 KiB
Python
75 lines
2.8 KiB
Python
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 OrderItemSerailzier, OrderModelSerializer
|
|
# from cart.models import
|
|
from rest_framework import status
|
|
from .models import OrderItemModel, OrderModel
|
|
try:
|
|
pass
|
|
except DiscountNotAvailableError:
|
|
pass
|
|
|
|
"""
|
|
|
|
add post
|
|
remove delete
|
|
show get
|
|
|
|
pay
|
|
"""
|
|
|
|
|
|
|
|
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)
|
|
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, 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)
|
|
|
|
|
|
|
|
class CartView(APIView):
|
|
permission_classes = [IsAuthenticated]
|
|
serializer_class = OrderModelSerializer
|
|
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)
|