83 lines
3.1 KiB
Python
83 lines
3.1 KiB
Python
from rest_framework import mixins, permissions, viewsets
|
|
from rest_framework.decorators import action
|
|
from rest_framework.response import Response
|
|
|
|
from . import models, serializers
|
|
|
|
|
|
class ProductPublicViewSet(viewsets.ReadOnlyModelViewSet):
|
|
"""Public storefront products."""
|
|
|
|
queryset = models.Product.objects.filter(is_active=True).select_related("category")
|
|
serializer_class = serializers.ProductSerializer
|
|
permission_classes = [permissions.AllowAny]
|
|
lookup_field = "slug"
|
|
|
|
|
|
class ProductAdminViewSet(viewsets.ModelViewSet):
|
|
queryset = models.Product.objects.select_related("category").all()
|
|
serializer_class = serializers.ProductSerializer
|
|
permission_classes = [permissions.IsAuthenticated]
|
|
|
|
|
|
class ProductCategoryPublicViewSet(viewsets.ReadOnlyModelViewSet):
|
|
queryset = models.ProductCategory.objects.filter(is_active=True)
|
|
serializer_class = serializers.ProductCategorySerializer
|
|
permission_classes = [permissions.AllowAny]
|
|
lookup_field = "slug"
|
|
|
|
|
|
class ProductCategoryAdminViewSet(viewsets.ModelViewSet):
|
|
queryset = models.ProductCategory.objects.all()
|
|
serializer_class = serializers.ProductCategorySerializer
|
|
permission_classes = [permissions.IsAuthenticated]
|
|
|
|
|
|
class DeliveryZonePublicViewSet(viewsets.ReadOnlyModelViewSet):
|
|
queryset = models.DeliveryZone.objects.filter(is_active=True)
|
|
serializer_class = serializers.DeliveryZoneSerializer
|
|
permission_classes = [permissions.AllowAny]
|
|
|
|
|
|
class DeliveryZoneAdminViewSet(viewsets.ModelViewSet):
|
|
queryset = models.DeliveryZone.objects.all()
|
|
serializer_class = serializers.DeliveryZoneSerializer
|
|
permission_classes = [permissions.IsAuthenticated]
|
|
|
|
|
|
class DeliveryOverrideCodeAdminViewSet(viewsets.ModelViewSet):
|
|
queryset = models.DeliveryOverrideCode.objects.all()
|
|
serializer_class = serializers.DeliveryOverrideCodeSerializer
|
|
permission_classes = [permissions.IsAuthenticated]
|
|
lookup_field = "code"
|
|
|
|
@action(methods=["post"], detail=True, permission_classes=[permissions.IsAuthenticated])
|
|
def activate(self, request, code=None):
|
|
override_code = self.get_object()
|
|
override_code.is_active = True
|
|
override_code.save(update_fields=["is_active"])
|
|
return Response(self.get_serializer(override_code).data)
|
|
|
|
@action(methods=["post"], detail=True, permission_classes=[permissions.IsAuthenticated])
|
|
def deactivate(self, request, code=None):
|
|
override_code = self.get_object()
|
|
override_code.is_active = False
|
|
override_code.save(update_fields=["is_active"])
|
|
return Response(self.get_serializer(override_code).data)
|
|
|
|
|
|
class OrderPublicViewSet(mixins.CreateModelMixin, viewsets.GenericViewSet):
|
|
queryset = models.Order.objects.all()
|
|
serializer_class = serializers.OrderSerializer
|
|
permission_classes = [permissions.AllowAny]
|
|
|
|
|
|
class OrderAdminViewSet(viewsets.ModelViewSet):
|
|
queryset = (
|
|
models.Order.objects.select_related("delivery_override_code")
|
|
.prefetch_related("items")
|
|
.all()
|
|
)
|
|
serializer_class = serializers.OrderAdminSerializer
|
|
permission_classes = [permissions.IsAuthenticated]
|