first
This commit is contained in:
commit
89a5d70512
284 files changed
+8364
No files matched your search
@@ -0,0 +1,165 @@
|
||||
from apps.shop.models import Product as ProductModel
|
||||
from rest_framework.views import APIView
|
||||
from rest_framework import serializers
|
||||
from utils.get_user_workspace import get_user_workspace_uuid, get_user_workspace
|
||||
from rest_framework.response import Response
|
||||
from rest_framework import status
|
||||
from apps.shop.services import *
|
||||
from apps.shop.selectors import *
|
||||
from rest_framework import generics
|
||||
from rest_framework.permissions import IsAuthenticated
|
||||
from utils import custom_permissions
|
||||
|
||||
|
||||
class ProductCreateApi(APIView):
|
||||
|
||||
permission_classes = (IsAuthenticated, custom_permissions.WorkspaceAdminPermission)
|
||||
|
||||
class InputSerializer(serializers.Serializer):
|
||||
name = serializers.CharField(required=True, max_length=20)
|
||||
price = serializers.DecimalField(required=True, max_digits=20, decimal_places=2)
|
||||
category = serializers.IntegerField(required=True)
|
||||
acc_code = serializers.CharField(required=False)
|
||||
attr = serializers.CharField(required=False)
|
||||
|
||||
class OutputSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = ProductModel
|
||||
exclude = ('sys_ws', )
|
||||
|
||||
def post(self, request):
|
||||
|
||||
serializer = self.InputSerializer(data=request.data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
|
||||
user_workspace = get_user_workspace(request)
|
||||
|
||||
product_obj = create_product(**serializer.validated_data, workspace=user_workspace)
|
||||
|
||||
output = self.OutputSerializer(product_obj)
|
||||
|
||||
return Response(data=output.data, status=status.HTTP_201_CREATED)
|
||||
|
||||
|
||||
class ProductRetrieveApi(APIView):
|
||||
|
||||
permission_classes = (IsAuthenticated, custom_permissions.WorkspaceCustomerPermission)
|
||||
|
||||
class OutputSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = ProductModel
|
||||
exclude = ('sys_ws', )
|
||||
|
||||
def get(self, request, product_id: int):
|
||||
|
||||
user_workspace_uuid = get_user_workspace_uuid(request)
|
||||
product_obj = retrieve_product(product_id, workspace_uuid=user_workspace_uuid)
|
||||
output = self.OutputSerializer(product_obj)
|
||||
|
||||
return Response(data=output.data, status=status.HTTP_200_OK)
|
||||
|
||||
|
||||
class ProductUpdateApi(APIView):
|
||||
|
||||
permission_classes = (IsAuthenticated, custom_permissions.WorkspaceAdminPermission)
|
||||
|
||||
class InputSerializer(serializers.Serializer):
|
||||
name = serializers.CharField(required=True, max_length=20)
|
||||
price = serializers.DecimalField(required=True, max_digits=20, decimal_places=2)
|
||||
category = serializers.IntegerField(required=True)
|
||||
acc_code = serializers.CharField(required=False)
|
||||
attr = serializers.CharField(required=False)
|
||||
|
||||
class OutputSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = ProductModel
|
||||
exclude = ('sys_ws', )
|
||||
|
||||
def put(self, request, product_id: int):
|
||||
|
||||
serializer = self.InputSerializer(data=request.data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
|
||||
user_workspace_uuid = get_user_workspace_uuid(request)
|
||||
|
||||
product_obj = update_product(product_id=product_id, **serializer.validated_data, workspace_uuid=user_workspace_uuid)
|
||||
output = self.OutputSerializer(product_obj)
|
||||
|
||||
return Response(data=output.data, status=status.HTTP_200_OK)
|
||||
|
||||
|
||||
class ProductDeleteApi(APIView):
|
||||
|
||||
permission_classes = (IsAuthenticated, custom_permissions.WorkspaceAdminPermission)
|
||||
|
||||
class OutputSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = ProductModel
|
||||
exclude = ('sys_ws', )
|
||||
|
||||
def delete(self, request, product_id: int):
|
||||
|
||||
user_workspace_uuid = get_user_workspace_uuid(request=request)
|
||||
product_obj = delete_product(product_id=product_id, workspace_uuid=user_workspace_uuid)
|
||||
|
||||
output = {
|
||||
'id': product_id,
|
||||
'status': 'deleted successfully'
|
||||
}
|
||||
|
||||
return Response(data=output, status=status.HTTP_200_OK)
|
||||
|
||||
|
||||
class ProductListApi(generics.ListAPIView):
|
||||
|
||||
permission_classes = (IsAuthenticated, custom_permissions.WorkspaceCustomerPermission)
|
||||
|
||||
class OutputSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = ProductCategoryModel
|
||||
exclude = ('sys_ws', )
|
||||
|
||||
def get_queryset(self):
|
||||
user_workspace_uuid = get_user_workspace_uuid(self.request)
|
||||
return list_product(workspace_uuid=user_workspace_uuid)
|
||||
|
||||
serializer_class = OutputSerializer
|
||||
|
||||
|
||||
class ProductListCategoryApi(generics.ListAPIView):
|
||||
|
||||
permission_classes = (IsAuthenticated, custom_permissions.WorkspaceCustomerPermission)
|
||||
|
||||
class OutputSerializer(serializers.Serializer):
|
||||
id = serializers.IntegerField()
|
||||
name = serializers.CharField()
|
||||
price = serializers.FloatField()
|
||||
|
||||
class Meta:
|
||||
exclude = ('sys_ws', )
|
||||
|
||||
def list(self, request, category_id):
|
||||
# Note the use of `get_queryset()` instead of `self.queryset`
|
||||
queryset_data = self.get_queryset()
|
||||
serializer = self.get_serializer(queryset_data, many=True)
|
||||
workspace_uuid = get_user_workspace_uuid(request=request)
|
||||
category = retrieve_product_category(category_id=category_id, workspace_uuid=workspace_uuid)
|
||||
|
||||
if len(serializer.data) == 0:
|
||||
return Response(
|
||||
status=404,
|
||||
)
|
||||
data = {
|
||||
"category_name": category.name,
|
||||
"products": serializer.data
|
||||
}
|
||||
|
||||
return Response(data)
|
||||
|
||||
def get_queryset(self):
|
||||
user_workspace_uuid = get_user_workspace_uuid(self.request)
|
||||
category_id = self.kwargs.get('category_id')
|
||||
|
||||
return list_product_by_category(workspace_uuid=user_workspace_uuid, category_id=category_id)
|
||||
|
||||
serializer_class = OutputSerializer
|
||||
Reference in new issue
Block a user