This commit is contained in:
javad committed 2024-01-22 13:01:42 +03:30
commit 89a5d70512
284 files changed
+8364

No files matched your search

+16
View File
@@ -0,0 +1,16 @@
from .product_category import (
ProductCategoryCreateApi, ProductCategoryRetrieveApi, ProductCategoryDeleteApi, ProductCategoryListApi,
ProductCategoryUpdateApi, ProductsCategoryApi
)
from .product import (
ProductCreateApi, ProductRetrieveApi, ProductDeleteApi, ProductUpdateApi, ProductListApi, ProductListCategoryApi
)
from .order import (
OrderCreateApi, OrderUpdateApi, OrderDeleteApi, OrderRetrieveApi, OrderListApi, OrderAndItemCreateApi
)
from .cart import (CartListApi, CartCreateApi, CartDeleteApi)
from .order_item import (OrderItemsListApi, )
+85
View File
@@ -0,0 +1,85 @@
from rest_framework import generics, views
from apps.shop.models import Cart as CartModel, Product as ProductModel
from utils.get_user_workspace import get_user_workspace_uuid
from utils.get_cuser_role import get_cuser_role_uuid
from apps.shop.selectors import list_cart
from rest_framework import serializers
from rest_framework.permissions import IsAuthenticated
from utils import custom_permissions
from utils.get_user_workspace import get_user_workspace_uuid, get_user_workspace
from utils.get_cuser_role import get_cuser_role
from rest_framework.response import Response
from apps.shop.services import add_to_cart, delete_cart_iteam
from rest_framework import status
class CartListApi(generics.ListAPIView):
class OutputSerializer(serializers.ModelSerializer):
class ProductSerializer(serializers.ModelSerializer):
class CategorySerializer(serializers.Serializer):
name = serializers.CharField()
category = CategorySerializer()
class Meta:
model = ProductModel
exclude = ('sys_ws', 'created_at', 'updated_at', 'acc_code', 'attr')
product = ProductSerializer()
class Meta:
model = CartModel
exclude = ('sys_ws', 'created_at', 'updated_at', 'cuser_role')
serializer_class = OutputSerializer
def get_queryset(self):
user_workspace_uuid = get_user_workspace_uuid(self.request)
cuser_role_uuid = get_cuser_role_uuid(self.request)
return list_cart(workspace_uuid=user_workspace_uuid, cuser_role_uuid=cuser_role_uuid)
class CartCreateApi(views.APIView):
permission_classes = (IsAuthenticated, custom_permissions.WorkspaceCustomerPermission)
class InputSerializer(serializers.Serializer):
product_id = serializers.IntegerField(required=True)
quantity = serializers.IntegerField(required=True)
class OutputSerializer(serializers.ModelSerializer):
class Meta:
model = CartModel
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)
cuser_role = get_cuser_role(request)
cart_obj = add_to_cart(**serializer.validated_data, workspace=user_workspace, cuser_role=cuser_role)
output = self.OutputSerializer(cart_obj)
return Response(data=output.data, status=status.HTTP_201_CREATED)
class CartDeleteApi(views.APIView):
def delete(self, request, cart_id: int):
user_workspace_uuid = get_user_workspace_uuid(request=request)
cuser_role_uuid = get_cuser_role_uuid(request=request)
cart_obj = delete_cart_iteam(cart_id=cart_id, cuser_role_uuid=cuser_role_uuid, workspace_uuid=user_workspace_uuid)
output = {
'order_id': cart_obj,
'message': 'deleted successfully'
}
return Response(data=output, status=status.HTTP_200_OK)
+152
View File
@@ -0,0 +1,152 @@
from apps.shop.models import Order as OrderModel
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 utils.get_cuser_role import get_cuser_role_uuid
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 apps.customer.models import Customer as CustomerModel
from rest_framework.permissions import IsAuthenticated
from utils import custom_permissions
class OrderCreateApi(APIView):
permission_classes = (IsAuthenticated, custom_permissions.WorkspaceAdminPermission)
class InputSerializer(serializers.Serializer):
responsible_group_id = serializers.IntegerField(required=True)
customer_id = serializers.IntegerField(required=True)
total_amount = serializers.DecimalField(max_digits=20, decimal_places=2)
factor_type = serializers.IntegerField(required=True)
factor_status = serializers.IntegerField(required=True)
class OutputSerializer(serializers.ModelSerializer):
class Meta:
model = OrderModel
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)
order_obj = create_order(**serializer.validated_data, workspace=user_workspace)
output = self.OutputSerializer(order_obj)
return Response(data=output.data, status=status.HTTP_201_CREATED)
class OrderAndItemCreateApi(APIView):
permission_classes = (IsAuthenticated, custom_permissions.WorkspaceCustomerPermission)
class InputSerializer(serializers.Serializer):
items = serializers.CharField(required=True)
class OutputSerializer(serializers.ModelSerializer):
class Meta:
model = OrderModel
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)
cuser_role_uuid = get_cuser_role_uuid(request)
try:
customer_obj = CustomerModel.objects.get(cuser_role__uuid=cuser_role_uuid)
except Exception as exp:
raise exceptions.ValidationError({'error': f'customer obj not found: {exp}'})
order_obj = create_order_and_items(**serializer.validated_data, customer=customer_obj, workspace=user_workspace)
clean_cart(cuser_role_uuid=cuser_role_uuid,workspace_uuid=user_workspace.uuid)
output = self.OutputSerializer(order_obj)
return Response(data=output.data, status=status.HTTP_201_CREATED)
class OrderRetrieveApi(APIView):
permission_classes = (IsAuthenticated, custom_permissions.WorkspaceCustomerPermission)
class OutputSerializer(serializers.ModelSerializer):
class Meta:
model = OrderModel
exclude = ('sys_ws', )
def get(self, request, order_id):
user_workspace_uuid = get_user_workspace_uuid(request=request)
cuser_role_uuid = get_cuser_role_uuid(request=request)
request_user = request.user
order_obj = retrieve_order(cuser_role_uuid=cuser_role_uuid, order_id=order_id, workspace_uuid=user_workspace_uuid)
output = self.OutputSerializer(order_obj)
return Response(data=output.data, status=status.HTTP_200_OK)
class OrderUpdateApi(APIView):
class InputSerializer(serializers.Serializer):
responsible_group_id = serializers.IntegerField(required=False)
customer_id = serializers.IntegerField(required=False)
total_amount = serializers.DecimalField(max_digits=20, decimal_places=2, required=False)
factor_type = serializers.IntegerField(required=False)
factor_status = serializers.IntegerField(required=False)
class OutputSerializer(serializers.ModelSerializer):
class Meta:
model = OrderModel
exclude = ('sys_ws', )
def patch(self, request, order_id):
serializer = self.InputSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
user_workspace_uuid = get_user_workspace_uuid(request)
order_obj = update_order(order_id=order_id, **serializer.validated_data, workspace_uuid=user_workspace_uuid)
output = self.OutputSerializer(order_obj)
return Response(data=output.data, status=status.HTTP_200_OK)
class OrderDeleteApi(APIView):
def delete(self, request, order_id: int):
user_workspace_uuid = get_user_workspace_uuid(request=request)
order_obj = delete_order(order_id=order_id, workspace_uuid=user_workspace_uuid)
output = {
'order_id': order_id,
'message': 'deleted successfully'
}
return Response(data=output, status=status.HTTP_200_OK)
class OrderListApi(generics.ListAPIView):
class OutputSerializer(serializers.ModelSerializer):
class Meta:
model = OrderModel
exclude = ('sys_ws', )
serializer_class = OutputSerializer
def get_queryset(self):
cuser_role_uuid = get_cuser_role_uuid(request=self.request)
user_workspace_uuid = get_user_workspace_uuid(request=self.request)
return list_order(cuser_role_uuid=cuser_role_uuid, workspace_uuid=user_workspace_uuid)
+30
View File
@@ -0,0 +1,30 @@
from rest_framework.views import APIView
from rest_framework import generics
from rest_framework import serializers
from apps.shop.models import OrderItem as OrderItemModel
from utils.get_user_workspace import get_user_workspace_uuid, get_user_workspace
from utils.get_cuser_role import get_cuser_role_uuid
from apps.shop.selectors import list_order_item
class OrderItemsListApi(generics.ListAPIView):
class OutputSerializer(serializers.ModelSerializer):
category_name = serializers.SerializerMethodField()
class Meta:
model = OrderItemModel
fields = '__all__'
def get_category_name(self, obj):
return obj.product.category.name
serializer_class = OutputSerializer
def get_queryset(self):
cuser_role_uuid = get_cuser_role_uuid(request=self.request)
#user_workspace_uuid = get_user_workspace_uuid(request=self.request)
order_id = self.kwargs.get('order_id')
return list_order_item(order_id=order_id, cuser_role_uuid=cuser_role_uuid)
+165
View File
@@ -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
+162
View File
@@ -0,0 +1,162 @@
from apps.shop.models import ProductCategory as ProductCategoryModel, 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 django.db.models import Count
from utils.tools import inline_serializer
from utils import custom_permissions
class ProductCategoryCreateApi(APIView):
permission_classes = (IsAuthenticated, custom_permissions.WorkspaceAdminPermission)
class InputSerializer(serializers.Serializer):
name = serializers.CharField(required=True, max_length=20)
parent = serializers.IntegerField(required=False)
class OutputSerializer(serializers.ModelSerializer):
class Meta:
model = ProductCategoryModel
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_category_obj = create_product_category(**serializer.validated_data, workspace=user_workspace)
output = self.OutputSerializer(product_category_obj)
return Response(data=output.data, status=status.HTTP_201_CREATED)
class ProductCategoryRetrieveApi(APIView):
permission_classes = (IsAuthenticated, custom_permissions.WorkspaceCustomerPermission)
class OutputSerializer(serializers.ModelSerializer):
class Meta:
model = ProductCategoryModel
exclude = ('sys_ws', )
def get(self, request, category_id: int):
user_workspace_uuid = get_user_workspace_uuid(request)
product_category_obj = retrieve_product_category(category_id=category_id, workspace_uuid=user_workspace_uuid)
output = self.OutputSerializer(product_category_obj)
return Response(data=output.data, status=status.HTTP_200_OK)
class ProductCategoryUpdateApi(APIView):
permission_classes = (IsAuthenticated, custom_permissions.WorkspaceAdminPermission)
class InputSerializer(serializers.Serializer):
name = serializers.CharField(required=True)
class OutputSerializer(serializers.ModelSerializer):
class Meta:
model = ProductCategoryModel
exclude = ('sys_ws', )
def put(self, request, category_id: int):
serializer = self.InputSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
name = serializer.validated_data.get
user_workspace_uuid = get_user_workspace_uuid(request)
product_category_obj = update_product_category(name=name, category_id=category_id, workspace_uuid=user_workspace_uuid)
output = self.OutputSerializer(product_category_obj)
return Response(data=output.data, status=status.HTTP_200_OK)
class ProductCategoryDeleteApi(APIView):
permission_classes = (IsAuthenticated, custom_permissions.WorkspaceAdminPermission)
class OutputSerializer(serializers.ModelSerializer):
class Meta:
model = ProductCategoryModel
exclude = ('sys_ws', )
def delete(self, request, category_id: int):
user_workspace_uuid = get_user_workspace_uuid(request=request)
product_category_obj = delete_product_category(category_id=category_id, workspace_uuid=user_workspace_uuid)
output = {
'id': category_id,
'status': 'deleted successfully'
}
return Response(data=output, status=status.HTTP_200_OK)
class ProductCategoryListApi(generics.ListAPIView):
permission_classes = (IsAuthenticated, custom_permissions.WorkspaceCustomerPermission)
class OutputSerializer(serializers.ModelSerializer):
class Meta:
model = ProductCategoryModel
exclude = ('sys_ws', )
def list(self, request):
# 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)
print(workspace_uuid)
category = list_product_category(workspace_uuid=workspace_uuid)
categorysList = []
for cate in category:
count_prd = count_product_in_category(category_id=cate.id, workspace_uuid=workspace_uuid)
if count_prd >= 1:
tmp_cat = {
"name": cate.name,
"count": count_prd,
"id": cate.id,
}
categorysList.append(tmp_cat)
return Response(categorysList)
def get_queryset(self):
user_workspace_uuid = get_user_workspace_uuid(self.request)
return list_product_category(workspace_uuid=user_workspace_uuid)
serializer_class = OutputSerializer
class ProductsCategoryApi(APIView):
class OutputSerializer(serializers.ModelSerializer):
product_count = serializers.IntegerField()
class Meta:
model = ProductCategoryModel
fields = '__all__'
def get(self, request):
p_cate = ProductCategoryModel.objects.annotate(product_count=Count('product')).filter(product_count__gte=1)
output = self.OutputSerializer(p_cate, many=True)
return Response(data=output.data, status=status.HTTP_200_OK)