def post(self, request, *args, **kwargs): params = request.query_params if len( request.data) == 0 else request.data serializer = CaseCreateSerializer(data=params, request_obj=request) if serializer.is_valid(): cases_obj = serializer.save( created_by=request.profile, org=request.org, closed_on=params.get("closed_on"), case_type=params.get("type_of_case"), ) if params.get("contacts"): contacts_list = json.loads(params.get("contacts")) contacts = Contact.objects.filter( id__in=contacts_list, org=request.org) if contacts: cases_obj.contacts.add(*contacts) if params.get("teams"): teams_list = json.loads(params.get("teams")) teams = Teams.objects.filter( id__in=teams_list, org=request.org) if teams.exists(): cases_obj.teams.add(*teams) if params.get("assigned_to"): assinged_to_list = json.loads( params.get("assigned_to")) profiles = Profile.objects.filter( id__in=assinged_to_list, org=request.org, is_active=True) if profiles: cases_obj.assigned_to.add(*profiles) if self.request.FILES.get("case_attachment"): attachment = Attachments() attachment.created_by = self.request.profile attachment.file_name = self.request.FILES.get( "case_attachment").name attachment.cases = cases_obj attachment.attachment = self.request.FILES.get( "case_attachment") attachment.save() recipients = list( cases_obj.assigned_to.all().values_list("id", flat=True) ) send_email_to_assigned_user.delay( recipients, cases_obj.id, ) return Response( {"error": False, "message": "Case Created Successfully"}, status=status.HTTP_200_OK, ) return Response( {"error": True, "errors": serializer.errors}, status=status.HTTP_400_BAD_REQUEST, )
def put(self, request, pk, format=None): params = request.query_params if len( request.data) == 0 else request.data cases_object = self.get_object(pk=pk) data = {} if cases_object.company != request.company: return Response( { "error": True, "errors": "User company doesnot match with header...." }, status=status.HTTP_404_NOT_FOUND, ) if self.request.user.role != "ADMIN" and not self.request.user.is_superuser: if not ((self.request.user == cases_object.created_by) or (self.request.user in cases_object.assigned_to.all())): return Response( { "error": True, "errors": "You do not have Permission to perform this action", }, status=status.HTTP_401_UNAUTHORIZED, ) serializer = CaseCreateSerializer( cases_object, data=params, request_obj=request, case=True, ) if serializer.is_valid(): cases_object = serializer.save( closed_on=params.get("closed_on"), case_type=params.get("type_of_case")) previous_assigned_to_users = list( cases_object.assigned_to.all().values_list("id", flat=True)) cases_object.contacts.clear() if params.get("contacts"): contacts = json.loads(params.get("contacts")) for contact in contacts: obj_contact = Contact.objects.filter( id=contact, company=request.company) if obj_contact: cases_object.contacts.add(contact) else: data["contacts"] = "Please enter valid Contact" return Response({"error": True, "errors": data}) if self.request.user.role == "ADMIN": cases_object.teams.clear() if params.get("teams"): teams = json.loads(params.get("teams")) for team in teams: obj_team = Teams.objects.filter( id=team, company=request.company) if obj_team: cases_object.teams.add(team) else: data["team"] = "Please enter valid Team" return Response({"error": True, "errors": data}) cases_object.assigned_to.clear() if params.get("assigned_to"): assinged_to_users_ids = json.loads( params.get("assigned_to")) for user_id in assinged_to_users_ids: user = User.objects.filter(id=user_id, company=request.company) if user: cases_object.assigned_to.add(user_id) else: data["assigned_to"] = "Please enter valid User" return Response({"error": True, "errors": data}) if self.request.FILES.get("case_attachment"): attachment = Attachments() attachment.created_by = self.request.user attachment.file_name = self.request.FILES.get( "case_attachment").name attachment.cases = cases_object attachment.attachment = self.request.FILES.get( "case_attachment") attachment.save() assigned_to_list = list(cases_object.assigned_to.all().values_list( "id", flat=True)) current_site = get_current_site(self.request) recipients = list( set(assigned_to_list) - set(previous_assigned_to_users)) send_email_to_assigned_user.delay( recipients, cases_object.id, domain=current_site.domain, protocol=self.request.scheme, ) return Response( { "error": False, "message": "Case Updated Successfully" }, status=status.HTTP_200_OK, ) return Response( { "error": True, "errors": serializer.errors }, status=status.HTTP_400_BAD_REQUEST, )
def post(self, request, *args, **kwargs): params = request.query_params if len( request.data) == 0 else request.data data = {} serializer = CaseCreateSerializer(data=params, request_obj=request) if serializer.is_valid(): cases_obj = serializer.save( created_by=request.user, company=request.company, closed_on=params.get("closed_on"), case_type=params.get("type_of_case"), ) if params.get("contacts"): contacts = json.loads(params.get("contacts")) for contact in contacts: obj_contact = Contact.objects.filter( id=contact, company=request.company) if obj_contact: cases_obj.contacts.add(contact) else: cases_obj.delete() data["contacts"] = "Please enter valid contact" return Response({"error": True, "errors": data}) if self.request.user.role == "ADMIN": if params.get("teams"): teams = json.loads(params.get("teams")) for team in teams: obj_team = Teams.objects.filter( id=team, company=request.company) if obj_team: cases_obj.teams.add(team) else: cases_obj.delete() data["team"] = "Please enter valid Team" return Response({"error": True, "errors": data}) if params.get("assigned_to"): assinged_to_users_ids = json.loads( params.get("assigned_to")) for user_id in assinged_to_users_ids: user = User.objects.filter(id=user_id, company=request.company) if user: cases_obj.assigned_to.add(user_id) else: cases_obj.delete() data["assigned_to"] = "Please enter valid user" return Response({"error": True, "errors": data}) if self.request.FILES.get("case_attachment"): attachment = Attachments() attachment.created_by = self.request.user attachment.file_name = self.request.FILES.get( "case_attachment").name attachment.cases = cases_obj attachment.attachment = self.request.FILES.get( "case_attachment") attachment.save() assigned_to_list = list(cases_obj.assigned_to.all().values_list( "id", flat=True)) current_site = get_current_site(request) recipients = assigned_to_list send_email_to_assigned_user.delay( recipients, cases_obj.id, domain=current_site.domain, protocol=self.request.scheme, ) return Response({ "error": False, "message": "Case Created Successfully" }) return Response( { "error": True, "errors": serializer.errors }, status=status.HTTP_400_BAD_REQUEST, )