from django.shortcuts import render from rest_framework.views import APIView from rest_framework.generics import ListAPIView from rest_framework.response import Response from rest_framework import status 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 from apps.ticket.services import create_ticket, create_comment_ticket from apps.ticket.models import Ticket as TicketModel, TicketComment as TicketCommentModel, TicketCommentFile as TicketCommentFileModel from apps.cuser.models import CuserRole as CuserRoleModel from rest_framework.permissions import IsAuthenticated from utils import custom_permissions from utils.get_cuser_role import get_cuser_role_uuid from utils.get_user_workspace import get_user_workspace_uuid from apps.ticket.selectors import list_ticket, retrieve_ticket_comments # Create your views here. class TicketCreateApi(APIView): permission_classes = (IsAuthenticated, custom_permissions.WorkspaceCustomerPermission) class InputSerializer(serializers.Serializer): title = serializers.CharField(max_length=100) desc = serializers.CharField(max_length=500) files = serializers.ListField( child=serializers.FileField(required=False, max_length=10000000, allow_empty_file=False), required=False ) class OutputSerializer(serializers.ModelSerializer): class Meta: model = TicketModel exclude = ('sys_ws', 'cuser_role') def post(self, request): serializer = self.InputSerializer(data=request.data) try: serializer.is_valid(raise_exception=True) except Exception as exp: print("exp...") print(exp) user_workspace = get_user_workspace(request=request) cuser_role_obj = get_cuser_role(request=request) print("3") ticket = create_ticket(**serializer.validated_data, cuser_role=cuser_role_obj, workspace=user_workspace) print("4") output = self.OutputSerializer(ticket) return Response(data=output.data, status=status.HTTP_201_CREATED) class TicketListApi(ListAPIView): permission_classes = (IsAuthenticated, custom_permissions.WorkspaceCustomerPermission) class OutputSerializer(serializers.ModelSerializer): class Meta: model = TicketModel 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_ticket(cuser_role_uuid=cuser_role_uuid, workspace_uuid=user_workspace_uuid) class TicketCommentsListApi(APIView): permission_classes = (IsAuthenticated, custom_permissions.WorkspaceCustomerPermission) class OutputSerializer(serializers.ModelSerializer): class TicketSerializer(serializers.ModelSerializer): class Meta: model = TicketModel exclude = ('sys_ws', 'cuser_role') class CuserRoleSerializer(serializers.ModelSerializer): class Meta: model = CuserRoleModel fields = '__all__' class TicketCommentFileSerializer(serializers.ModelSerializer): class Meta: model = TicketCommentFileModel fields = '__all__' ticket = TicketSerializer(many=False, read_only=True) comment_files = TicketCommentFileSerializer(many=True, read_only=True, source='ticketcommentfile_set') cuser_role = CuserRoleSerializer() class Meta: model = TicketCommentModel exclude = ('sys_ws',) def get(self, request, ticket_id: int): print("ok22") cuser_role_uuid = get_cuser_role_uuid(request=request) user_workspace_uuid = get_user_workspace_uuid(request=request) print("ok") #return Response({"javad":"salam"}) ticket_comments = retrieve_ticket_comments(ticket_id=ticket_id, cuser_role_uuid=cuser_role_uuid, workspace_uuid=user_workspace_uuid) output = self.OutputSerializer(ticket_comments, many=True) return Response(data=output.data, status=status.HTTP_200_OK) class TicketCommentCreateApi(APIView): permission_classes = (IsAuthenticated, custom_permissions.WorkspaceCustomerPermission) class InputSerializer(serializers.Serializer): files = serializers.ListField( child=serializers.FileField( max_length=100000, allow_empty_file=False, allow_null=True, ), required=False ) desc = serializers.CharField(max_length=500) class OutputSerializer(serializers.ModelSerializer): class Meta: model = TicketCommentModel exclude = ('sys_ws', 'cuser_role') def post(self, request, ticket_id): serializer = self.InputSerializer(data=request.data) serializer.is_valid(raise_exception=True) user_workspace = get_user_workspace(request=request) cuser_role_obj = get_cuser_role(request=request) ticket_comment = create_comment_ticket(**serializer.validated_data, ticket_id=ticket_id, cuser_role=cuser_role_obj, workspace=user_workspace) output = self.OutputSerializer(ticket_comment) return Response(data=output.data, status=status.HTTP_201_CREATED)