def put(self, request, pk, **kwargs): params = ( self.request.query_params if len(self.request.data) == 0 else self.request.data ) data = {} self.lead_obj = self.get_object(pk) if self.lead_obj.company != request.company: return Response( {"error": True, "errors": "User company doesnot match with header...."} ) serializer = LeadCreateSerializer( data=params, instance=self.lead_obj, request_obj=request, ) if serializer.is_valid(): lead_obj = serializer.save() previous_assigned_to_users = list( lead_obj.assigned_to.all().values_list("id", flat=True) ) lead_obj.tags.clear() if params.get("tags"): tags = json.loads(params.get("tags")) # for t in tags: # tag,_ = Tags.objects.get_or_create(name=t) # lead_obj.tags.add(tag) for t in tags: tag = Tags.objects.filter(slug=t.lower()) if tag: tag = tag[0] else: tag = Tags.objects.create(name=t) lead_obj.tags.add(tag) current_site = get_current_site(request) assigned_to_list = list( lead_obj.assigned_to.all().values_list("id", flat=True) ) recipients = list(set(assigned_to_list) - set(previous_assigned_to_users)) send_email_to_assigned_user.delay( recipients, lead_obj.id, domain=current_site.domain, protocol=request.scheme, ) if request.FILES.get("lead_attachment"): attachment = Attachments() attachment.created_by = request.user attachment.file_name = request.FILES.get("lead_attachment").name attachment.lead = lead_obj attachment.attachment = request.FILES.get("lead_attachment") attachment.save() if self.request.user.role == "ADMIN": lead_obj.teams.clear() if params.get("teams"): teams = json.loads(params.get("teams")) for team in teams: teams_ids = Teams.objects.filter( id=team, company=request.company ) if teams_ids: lead_obj.teams.add(team) else: lead_obj.delete() data["team"] = "Please enter valid Team" return Response({"error": True, "errors": data}) else: lead_obj.teams.clear() lead_obj.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: lead_obj.assigned_to.add(user_id) else: lead_obj.delete() data["assigned_to"] = "Please enter valid User" return Response({"error": True, "errors": data}) else: lead_obj.assigned_to.clear() if params.get("status") == "converted": account_object = Account.objects.create( created_by=request.user, name=lead_obj.account_name, email=lead_obj.email, phone=lead_obj.phone, description=params.get("description"), website=params.get("website"), lead=lead_obj, company=request.company, ) account_object.billing_address_line = lead_obj.address_line account_object.billing_street = lead_obj.street account_object.billing_city = lead_obj.city account_object.billing_state = lead_obj.state account_object.billing_postcode = lead_obj.postcode account_object.billing_country = lead_obj.country comments = Comment.objects.filter(lead=self.lead_obj) if comments: for comment in comments: comment.account_id = account_object.id attachments = Attachments.objects.filter(lead=self.lead_obj) if attachments: for attachment in attachments: attachment.account_id = account_object.id for tag in lead_obj.tags.all(): account_object.tags.add(tag) if params.get("assigned_to"): # account_object.assigned_to.add(*params.getlist('assigned_to')) assigned_to_list = json.loads(params.get("assigned_to")) current_site = get_current_site(request) recipients = assigned_to_list send_email_to_assigned_user.delay( recipients, lead_obj.id, domain=current_site.domain, protocol=request.scheme, ) for comment in lead_obj.leads_comments.all(): comment.account = account_object comment.save() account_object.save() return Response( { "error": False, "message": "Lead Converted to Account Successfully", }, status=status.HTTP_200_OK, ) return Response( {"error": False, "message": "Lead updated Successfully"}, status=status.HTTP_200_OK, ) return Response( {"error": True, "errors": serializer.errors}, status=status.HTTP_400_BAD_REQUEST, )
def put(self, request, pk, **kwargs): params = ( self.request.query_params if len(self.request.data) == 0 else self.request.data ) self.lead_obj = self.get_object(pk) if self.lead_obj.org != request.org: return Response( {"error": True, "errors": "User company does not match with header...."}, status=status.HTTP_403_FORBIDDEN ) serializer = LeadCreateSerializer( data=params, instance=self.lead_obj, request_obj=request, ) if serializer.is_valid(): lead_obj = serializer.save() previous_assigned_to_users = list( lead_obj.assigned_to.all().values_list("id", flat=True) ) lead_obj.tags.clear() if params.get("tags"): tags = json.loads(params.get("tags")) # for t in tags: # tag,_ = Tags.objects.get_or_create(name=t) # lead_obj.tags.add(tag) for t in tags: tag = Tags.objects.filter(slug=t.lower()) if tag.exists(): tag = tag[0] else: tag = Tags.objects.create(name=t) lead_obj.tags.add(tag) assigned_to_list = list( lead_obj.assigned_to.all().values_list("id", flat=True) ) recipients = list(set(assigned_to_list) - set(previous_assigned_to_users)) send_email_to_assigned_user.delay( recipients, lead_obj.id, ) if request.FILES.get("lead_attachment"): attachment = Attachments() attachment.created_by = request.profile attachment.file_name = request.FILES.get( "lead_attachment").name attachment.lead = lead_obj attachment.attachment = request.FILES.get("lead_attachment") attachment.save() lead_obj.contacts.clear() if params.get("contacts"): obj_contact = Contact.objects.filter( id=params.get("contacts"), org=request.org) lead_obj.contacts.add(obj_contact) lead_obj.teams.clear() if params.get("teams"): teams_list = json.loads(params.get("teams")) teams = Teams.objects.filter( id__in=teams_list, org=request.org) lead_obj.teams.add(*teams) lead_obj.assigned_to.clear() 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) lead_obj.assigned_to.add(*profiles) if params.get("status") == "converted": account_object = Account.objects.create( created_by=request.profile, name=lead_obj.account_name, email=lead_obj.email, phone=lead_obj.phone, description=params.get("description"), website=params.get("website"), lead=lead_obj, org=request.org ) account_object.billing_address_line = lead_obj.address_line account_object.billing_street = lead_obj.street account_object.billing_city = lead_obj.city account_object.billing_state = lead_obj.state account_object.billing_postcode = lead_obj.postcode account_object.billing_country = lead_obj.country comments = Comment.objects.filter(lead=self.lead_obj) if comments.exists(): for comment in comments: comment.account_id = account_object.id attachments = Attachments.objects.filter(lead=self.lead_obj) if attachments.exists(): for attachment in attachments: attachment.account_id = account_object.id for tag in lead_obj.tags.all(): account_object.tags.add(tag) if params.get("assigned_to"): # account_object.assigned_to.add(*params.getlist('assigned_to')) assigned_to_list = json.loads(params.get("assigned_to")) recipients = assigned_to_list send_email_to_assigned_user.delay( recipients, lead_obj.id, ) for comment in lead_obj.leads_comments.all(): comment.account = account_object comment.save() account_object.save() return Response( { "error": False, "message": "Lead Converted to Account Successfully", }, status=status.HTTP_200_OK, ) return Response( {"error": False, "message": "Lead updated Successfully"}, status=status.HTTP_200_OK, ) return Response( {"error": True, "errors": serializer.errors}, status=status.HTTP_400_BAD_REQUEST, )