first
This commit is contained in:
commit
89a5d70512
284 files changed
+8364
No files matched your search
@@ -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)
|
||||
|
||||
Reference in new issue
Block a user