def post(self, request, pk, **kwargs): params = (self.request.query_params if len(self.request.data) == 0 else self.request.data) context = {} self.opportunity_obj = Opportunity.objects.get(pk=pk) if self.opportunity_obj.company != request.company: return Response({ "error": True, "errors": "User company doesnot match with header...." }) comment_serializer = CommentSerializer(data=params) if self.request.user.role != "ADMIN" and not self.request.user.is_superuser: if not ( (self.request.user == self.opportunity_obj.created_by) or (self.request.user in self.opportunity_obj.assigned_to.all())): return Response( { "error": True, "errors": "You don't have Permission to perform this action", }, status=status.HTTP_401_UNAUTHORIZED, ) if comment_serializer.is_valid(): if params.get("comment"): comment_serializer.save( opportunity_id=self.opportunity_obj.id, commented_by_id=self.request.user.id, ) if self.request.FILES.get("opportunity_attachment"): attachment = Attachments() attachment.created_by = self.request.user attachment.file_name = self.request.FILES.get( "opportunity_attachment").name attachment.opportunity = self.opportunity_obj attachment.attachment = self.request.FILES.get( "opportunity_attachment") attachment.save() comments = Comment.objects.filter( opportunity=self.opportunity_obj).order_by("-id") attachments = Attachments.objects.filter( opportunity=self.opportunity_obj).order_by("-id") context.update({ "opportunity_obj": OpportunitySerializer(self.opportunity_obj).data, "attachments": AttachmentsSerializer(attachments, many=True).data, "comments": CommentSerializer(comments, many=True).data, }) return Response(context)
def form_valid(self, form): opportunity_obj = form.save(commit=False) opportunity_obj.created_by = self.request.user if self.request.POST.get('stage') in ['CLOSED WON', 'CLOSED LOST']: opportunity_obj.closed_by = self.request.user opportunity_obj.save() if self.request.POST.getlist('assigned_to', []): opportunity_obj.assigned_to.add( *self.request.POST.getlist('assigned_to')) assigned_to_list = self.request.POST.getlist('assigned_to') current_site = get_current_site(self.request) for assigned_to_user in assigned_to_list: user = get_object_or_404(User, pk=assigned_to_user) mail_subject = 'Assigned to opportunity.' message = render_to_string( 'assigned_to/opportunity_assigned.html', { 'user': user, 'domain': current_site.domain, 'protocol': self.request.scheme, 'opportunity': opportunity_obj }) email = EmailMessage(mail_subject, message, to=[user.email]) email.content_subtype = "html" email.send() if self.request.POST.getlist('contacts', []): opportunity_obj.contacts.add( *self.request.POST.getlist('contacts')) if self.request.POST.get('tags', ''): tags = self.request.POST.get("tags") splitted_tags = tags.split(",") for t in splitted_tags: tag = Tags.objects.filter(name=t.lower()) if tag: tag = tag[0] else: tag = Tags.objects.create(name=t.lower()) opportunity_obj.tags.add(tag) if self.request.FILES.get('oppurtunity_attachment'): attachment = Attachments() attachment.created_by = self.request.user attachment.file_name = self.request.FILES.get( 'oppurtunity_attachment').name attachment.opportunity = opportunity_obj attachment.attachment = self.request.FILES.get( 'oppurtunity_attachment') attachment.save() if self.request.is_ajax(): return JsonResponse({'error': False}) if self.request.POST.get("savenewform"): return redirect("opportunities:save") if self.request.POST.get('from_account'): from_account = self.request.POST.get('from_account') return redirect("accounts:view_account", pk=from_account) return redirect('opportunities:list')
def put(self, request, pk, format=None): params = request.query_params if len( request.data) == 0 else request.data opportunity_object = self.get_object(pk=pk) if opportunity_object.org != request.org: return Response( { "error": True, "errors": "User company doesnot match with header...." }, status=status.HTTP_403_FORBIDDEN, ) if self.request.profile.role != "ADMIN" and not self.request.user.is_superuser: if not ((self.request.profile == opportunity_object.created_by) or (self.request.profile in opportunity_object.assigned_to.all())): return Response( { "error": True, "errors": "You do not have Permission to perform this action", }, status=status.HTTP_403_FORBIDDEN, ) serializer = OpportunityCreateSerializer( opportunity_object, data=params, request_obj=request, opportunity=True, ) if serializer.is_valid(): opportunity_object = serializer.save( closed_on=params.get("due_date")) previous_assigned_to_users = list( opportunity_object.assigned_to.all().values_list("id", flat=True)) opportunity_object.contacts.clear() if params.get("contacts"): contacts_list = json.loads(params.get("contacts")) contacts = Contact.objects.filter(id__in=contacts_list, org=request.org) opportunity_object.contacts.add(*contacts) opportunity_object.tags.clear() if params.get("tags"): tags = json.loads(params.get("tags")) for tag in tags: obj_tag = Tags.objects.filter(slug=tag.lower()) if obj_tag.exists(): obj_tag = obj_tag[0] else: obj_tag = Tags.objects.create(name=tag) opportunity_object.tags.add(obj_tag) if params.get("stage"): stage = params.get("stage") if stage in ["CLOSED WON", "CLOSED LOST"]: opportunity_object.closed_by = self.request.profile opportunity_object.teams.clear() if params.get("teams"): teams_list = json.loads(params.get("teams")) teams = Teams.objects.filter(id__in=teams_list, org=request.org) opportunity_object.teams.add(*teams) opportunity_object.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, is_active=True) opportunity_object.assigned_to.add(*profiles) if self.request.FILES.get("opportunity_attachment"): attachment = Attachments() attachment.created_by = self.request.profile attachment.file_name = self.request.FILES.get( "opportunity_attachment").name attachment.opportunity = opportunity_object attachment.attachment = self.request.FILES.get( "opportunity_attachment") attachment.save() assigned_to_list = list( opportunity_object.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, opportunity_object.id, ) return Response( { "error": False, "message": "Opportunity 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 serializer = OpportunityCreateSerializer(data=params, request_obj=request) if serializer.is_valid(): opportunity_obj = serializer.save(created_by=request.profile, closed_on=params.get("due_date"), org=request.org) if params.get("contacts"): contacts_list = json.loads(params.get("contacts")) contacts = Contact.objects.filter(id__in=contacts_list, org=request.org) opportunity_obj.contacts.add(*contacts) if params.get("tags"): tags = json.loads(params.get("tags")) for tag in tags: obj_tag = Tags.objects.filter(slug=tag.lower()) if obj_tag.exists(): obj_tag = obj_tag[0] else: obj_tag = Tags.objects.create(name=tag) opportunity_obj.tags.add(obj_tag) if params.get("stage"): stage = params.get("stage") if stage in ["CLOSED WON", "CLOSED LOST"]: opportunity_obj.closed_by = self.request.profile if params.get("teams"): teams_list = json.loads(params.get("teams")) teams = Teams.objects.filter(id__in=teams_list, org=request.org) opportunity_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) opportunity_obj.assigned_to.add(*profiles) if self.request.FILES.get("opportunity_attachment"): attachment = Attachments() attachment.created_by = self.request.profile attachment.file_name = self.request.FILES.get( "opportunity_attachment").name attachment.opportunity = opportunity_obj attachment.attachment = self.request.FILES.get( "opportunity_attachment") attachment.save() recipients = list(opportunity_obj.assigned_to.all().values_list( "id", flat=True)) send_email_to_assigned_user.delay( recipients, opportunity_obj.id, ) return Response( { "error": False, "message": "Opportunity Created Successfully" }, status=status.HTTP_200_OK, ) return Response( { "error": True, "errors": serializer.errors }, status=status.HTTP_400_BAD_REQUEST, )
def update_opportunity(request, pk): opportunity_object = Opportunity.objects.filter(pk=pk).first() accounts = Account.objects.filter(status="open") contacts = Contact.objects.all() if request.user.role != "ADMIN" and not request.user.is_superuser: accounts = Account.objects.filter( created_by=request.user) contacts = Contact.objects.filter( Q(assigned_to__in=[request.user]) | Q(created_by=request.user)) users = [] if request.user.role == 'ADMIN' or request.user.is_superuser: users = User.objects.filter(is_active=True).order_by('email') elif request.user.google.all(): users = [] else: users = User.objects.filter(role='ADMIN').order_by('email') kwargs_data = { "assigned_to": users, "account": accounts, "contacts": contacts} form = OpportunityForm(instance=opportunity_object, **kwargs_data) if request.POST: form = form = OpportunityForm( request.POST, request.FILES, instance=opportunity_object, **kwargs_data) if form.is_valid(): assigned_to_ids = opportunity_object.assigned_to.all().values_list( 'id', flat=True) opportunity_obj = form.save(commit=False) if request.POST.get('stage') in ['CLOSED WON', 'CLOSED LOST']: opportunity_obj.closed_by = request.user previous_assigned_to_users = list(opportunity_obj.assigned_to.all().values_list('id', flat=True)) opportunity_obj.save() opportunity_obj.contacts.clear() all_members_list = [] if request.POST.getlist('assigned_to', []): current_site = get_current_site(request) assigned_form_users = form.cleaned_data.get( 'assigned_to').values_list('id', flat=True) all_members_list = list( set(list(assigned_form_users)) - set(list(assigned_to_ids))) # current_site = get_current_site(request) # recipients = all_members_list # send_email_to_assigned_user.delay(recipients, opportunity_obj.id, domain=current_site.domain, # protocol=request.scheme) # if all_members_list: # for assigned_to_user in all_members_list: # user = get_object_or_404(User, pk=assigned_to_user) # mail_subject = 'Assigned to opportunity.' # message = render_to_string( # 'assigned_to/opportunity_assigned.html', { # 'user': user, # 'domain': current_site.domain, # 'protocol': request.scheme, # 'opportunity': opportunity_obj # }) # email = EmailMessage( # mail_subject, message, to=[user.email]) # email.content_subtype = "html" # email.send() opportunity_obj.assigned_to.clear() opportunity_obj.assigned_to.add( *request.POST.getlist('assigned_to')) else: opportunity_obj.assigned_to.clear() if request.POST.getlist('teams', []): user_ids = Teams.objects.filter(id__in=request.POST.getlist('teams')).values_list('users', flat=True) assinged_to_users_ids = opportunity_obj.assigned_to.all().values_list('id', flat=True) for user_id in user_ids: if user_id not in assinged_to_users_ids: opportunity_obj.assigned_to.add(user_id) if request.POST.getlist('teams', []): opportunity_obj.teams.clear() opportunity_obj.teams.add(*request.POST.getlist('teams')) else: opportunity_obj.teams.clear() current_site = get_current_site(request) assigned_to_list = list(opportunity_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, opportunity_obj.id, domain=current_site.domain, protocol=request.scheme) if request.POST.getlist('contacts', []): opportunity_obj.contacts.add( *request.POST.getlist('contacts')) opportunity_obj.tags.clear() if request.POST.get('tags', ''): tags = request.POST.get("tags") splitted_tags = tags.split(",") for t in splitted_tags: tag = Tags.objects.filter(name=t.lower()) if tag: tag = tag[0] else: tag = Tags.objects.create(name=t.lower()) opportunity_obj.tags.add(tag) if request.FILES.get('oppurtunity_attachment'): attachment = Attachments() attachment.created_by = request.user attachment.file_name = request.FILES.get( 'oppurtunity_attachment').name attachment.opportunity = opportunity_obj attachment.attachment = request.FILES.get( 'oppurtunity_attachment') attachment.save() success_url = reverse('opportunities:list') if request.POST.get('from_account'): from_account = request.POST.get('from_account') success_url = reverse("accounts:view_account", kwargs={ 'pk': from_account}) return JsonResponse({'error': False, 'success_url': success_url}) return JsonResponse({'error': True, 'errors': form.errors}) context = {} context['TITLE'] = settings.TITLE context["opportunity_obj"] = opportunity_object user_assgn_list = [ assigned_to.id for assigned_to in context["opportunity_obj"].assigned_to.all()] if request.user == context['opportunity_obj'].created_by: user_assgn_list.append(request.user.id) if request.user.role != "ADMIN" and not request.user.is_superuser: if request.user.id not in user_assgn_list: raise PermissionDenied context["opportunity_form"] = form context["accounts"] = accounts if request.GET.get('view_account'): context['account'] = get_object_or_404( Account, id=request.GET.get('view_account')) context["contacts"] = contacts context["users"] = kwargs_data['assigned_to'] context["currencies"] = CURRENCY_CODES context["stages"] = STAGES context["sources"] = SOURCES context["teams"] = Teams.objects.all() context["assignedto_list"] = [ int(i) for i in request.POST.getlist('assigned_to', []) if i] context["contacts_list"] = [ int(i) for i in request.POST.getlist('contacts', []) if i] return render(request, "create_opportunity.html", context)
def create_opportunity(request): accounts = Account.objects.filter(status="open", company=request.company) contacts = Contact.objects.filter(company=request.company) if request.user.role != "ADMIN" and not request.user.is_superuser: accounts = Account.objects.filter(created_by=request.user, company=request.company) contacts = Contact.objects.filter( Q(assigned_to__in=[request.user]) | Q(created_by=request.user)).filter(company=request.company) users = [] if request.user.role == "ADMIN" or request.user.is_superuser: users = User.objects.filter(is_active=True, company=request.company).order_by("email") elif request.user.google.all(): users = [] else: users = User.objects.filter(role="ADMIN", company=request.company).order_by("email") kwargs_data = { "assigned_to": users, "account": accounts, "contacts": contacts, "request_obj": request, } if request.POST: form = OpportunityForm(request.POST, request.FILES, **kwargs_data) if form.is_valid(): opportunity_obj = form.save(commit=False) opportunity_obj.created_by = request.user opportunity_obj.company = request.company if request.POST.get("stage") in ["CLOSED WON", "CLOSED LOST"]: opportunity_obj.closed_by = request.user opportunity_obj.save() if request.POST.getlist("assigned_to", []): opportunity_obj.assigned_to.add( *request.POST.getlist("assigned_to")) # assigned_to_list = request.POST.getlist('assigned_to') # current_site = get_current_site(request) # recipients = assigned_to_list # send_email_to_assigned_user.delay(recipients, opportunity_obj.id, domain=current_site.domain, # protocol=request.scheme) # for assigned_to_user in assigned_to_list: # user = get_object_or_404(User, pk=assigned_to_user) # mail_subject = 'Assigned to opportunity.' # message = render_to_string( # 'assigned_to/opportunity_assigned.html', { # 'user': user, # 'domain': current_site.domain, # 'protocol': request.scheme, # 'opportunity': opportunity_obj # }) # email = EmailMessage( # mail_subject, message, to=[user.email]) # email.content_subtype = "html" # email.send() if request.POST.getlist("teams", []): user_ids = Teams.objects.filter( id__in=request.POST.getlist("teams")).values_list( "users", flat=True) assinged_to_users_ids = opportunity_obj.assigned_to.all( ).values_list("id", flat=True) for user_id in user_ids: if user_id not in assinged_to_users_ids: opportunity_obj.assigned_to.add(user_id) if request.POST.getlist("teams", []): opportunity_obj.teams.add(*request.POST.getlist("teams")) current_site = get_current_site(request) recipients = list(opportunity_obj.assigned_to.all().values_list( "id", flat=True)) send_email_to_assigned_user.delay( recipients, opportunity_obj.id, domain=current_site.domain, protocol=request.scheme, ) if request.POST.getlist("contacts", []): opportunity_obj.contacts.add(*request.POST.getlist("contacts")) if request.POST.get("tags", ""): tags = request.POST.get("tags") splitted_tags = tags.split(",") for t in splitted_tags: tag = Tags.objects.filter(name=t.lower()) if tag: tag = tag[0] else: tag = Tags.objects.create(name=t.lower()) opportunity_obj.tags.add(tag) if request.FILES.get("oppurtunity_attachment"): attachment = Attachments() attachment.created_by = request.user attachment.file_name = request.FILES.get( "oppurtunity_attachment").name attachment.opportunity = opportunity_obj attachment.attachment = request.FILES.get( "oppurtunity_attachment") attachment.save() success_url = reverse("opportunities:list") if request.POST.get("savenewform"): success_url = reverse("opportunities:save") if request.POST.get("from_account"): from_account = request.POST.get("from_account") success_url = reverse("accounts:view_account", kwargs={"pk": from_account}) # print(success_url) return JsonResponse({"error": False, "success_url": success_url}) return JsonResponse({"error": True, "errors": form.errors}) context = {} context["opportunity_form"] = OpportunityForm(**kwargs_data) context["accounts"] = accounts if request.GET.get("view_account"): context["account"] = get_object_or_404( Account, id=request.GET.get("view_account")) context["contacts"] = contacts.filter(company=request.company) context["users"] = kwargs_data["assigned_to"] context["currencies"] = CURRENCY_CODES context["stages"] = STAGES context["sources"] = SOURCES context["teams"] = Teams.objects.filter(company=request.company) context["assignedto_list"] = [ int(i) for i in request.POST.getlist("assigned_to", []) if i ] context["contacts_list"] = [ int(i) for i in request.POST.getlist("contacts", []) if i ] return render(request, "create_opportunity.html", context)
def put(self, request, pk, format=None): params = request.query_params if len( request.data) == 0 else request.data opportunity_object = self.get_object(pk=pk) data = {} if opportunity_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 == opportunity_object.created_by) or (self.request.user in opportunity_object.assigned_to.all()) ): return Response( {"error": True, "errors": "You do not have Permission to perform this action"}, status=status.HTTP_401_UNAUTHORIZED, ) serializer = OpportunityCreateSerializer( opportunity_object, data=params, request_obj=request, opportunity=True, ) if serializer.is_valid(): opportunity_object = serializer.save( closed_on = params.get("due_date") ) previous_assigned_to_users = list( opportunity_object.assigned_to.all().values_list("id", flat=True) ) opportunity_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: opportunity_object.contacts.add(contact) else: data["contacts"] = "Please enter valid Contact" return Response({"error":True, "errors":data}) opportunity_object.tags.clear() if params.get("tags"): tags = json.loads(params.get("tags")) # for t in tags: # tag,_ = Tags.objects.get_or_create(name=t.lower()) # opportunity_object.tags.add(tag) for tag in tags: obj_tag = Tags.objects.filter(slug=tag.lower()) if obj_tag: obj_tag = obj_tag[0] else: obj_tag = Tags.objects.create(name=tag) opportunity_object.tags.add(obj_tag) if params.get("stage"): stage = params.get("stage") if stage in ["CLOSED WON","CLOSED LOST"]: opportunity_object.closed_by_id = self.request.user.id if self.request.user.role == "ADMIN": opportunity_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: opportunity_object.teams.add(team) else: data["team"] = "Please enter valid Team" return Response({"error": True, "errors":data}) opportunity_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: opportunity_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("opportunity_attachment"): attachment = Attachments() attachment.created_by = self.request.user attachment.file_name = self.request.FILES.get( "opportunity_attachment").name attachment.opportunity = opportunity_object attachment.attachment = self.request.FILES.get( "opportunity_attachment") attachment.save() assigned_to_list = list( opportunity_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, opportunity_object.id, domain=current_site.domain, protocol=self.request.scheme, ) return Response( {"error": False, "message": "Opportunity 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 = OpportunityCreateSerializer( data=params, request_obj=request ) if serializer.is_valid(): opportunity_obj = serializer.save( created_by=request.user, company=request.company, closed_on = params.get("due_date") ) 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: opportunity_obj.contacts.add(contact) else: opportunity_obj.delete() data["contacts"] = "Please enter valid contact" return Response({"error": True, "errors":data}) if params.get("tags"): tags = json.loads(params.get("tags")) # for t in tags: # tag,_ = Tags.objects.get_or_create(slug=t.lower()) # opportunity_obj.tags.add(tag) for tag in tags: obj_tag = Tags.objects.filter(slug=tag.lower()) if obj_tag: obj_tag = obj_tag[0] else: obj_tag = Tags.objects.create(name=tag) opportunity_obj.tags.add(obj_tag) if params.get("stage"): stage = params.get("stage") if stage in ["CLOSED WON","CLOSED LOST"]: opportunity_obj.closed_by = self.request.user 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: opportunity_obj.teams.add(team) else: opportunity_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: opportunity_obj.assigned_to.add(user_id) else: opportunity_obj.delete() data["assigned_to"] = "Please enter valid user" return Response({"error": True, "errors":data}) if self.request.FILES.get("opportunity_attachment"): attachment = Attachments() attachment.created_by = self.request.user attachment.file_name = self.request.FILES.get("opportunity_attachment").name attachment.opportunity = opportunity_obj attachment.attachment = self.request.FILES.get("opportunity_attachment") attachment.save() assigned_to_list = list( opportunity_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, opportunity_obj.id, domain=current_site.domain, protocol=self.request.scheme, ) return Response({"error": False, "message": "Opportunity Created Successfully"}) return Response({"error": True, "errors": serializer.errors}, status=status.HTTP_400_BAD_REQUEST)
def create_opportunity(request): template_name = "create_opportunity.html" users = User.objects.filter(is_active=True).order_by('email') accounts = Account.objects.filter(status="open") contacts = Contact.objects.all() if request.user.role != "ADMIN" and not request.user.is_superuser: accounts = Account.objects.filter( created_by=request.user) contacts = Contact.objects.filter( Q(assigned_to__in=[request.user]) | Q(created_by=request.user)) kwargs_data = {"assigned_to": users, "account": accounts, "contacts": contacts} form = OpportunityForm(**kwargs_data) if request.POST: form = OpportunityForm(request.POST, request.FILES, **kwargs_data) if form.is_valid(): opportunity_obj = form.save(commit=False) opportunity_obj.created_by = request.user if request.POST.get('stage') in ['CLOSED WON', 'CLOSED LOST']: opportunity_obj.closed_by = request.user opportunity_obj.save() if request.POST.getlist('assigned_to', []): opportunity_obj.assigned_to.add( *request.POST.getlist('assigned_to')) assigned_to_list = request.POST.getlist('assigned_to') current_site = get_current_site(request) for assigned_to_user in assigned_to_list: user = get_object_or_404(User, pk=assigned_to_user) mail_subject = 'Assigned to opportunity.' message = render_to_string('assigned_to/opportunity_assigned.html', { 'user': user, 'domain': current_site.domain, 'protocol': request.scheme, 'opportunity': opportunity_obj }) email = EmailMessage(mail_subject, message, to=[user.email]) email.content_subtype = "html" email.send() if request.POST.getlist('contacts', []): opportunity_obj.contacts.add( *request.POST.getlist('contacts')) if request.POST.get('tags', ''): tags = request.POST.get("tags") splitted_tags = tags.split(",") for t in splitted_tags: tag = Tags.objects.filter(name=t.lower()) if tag: tag = tag[0] else: tag = Tags.objects.create(name=t.lower()) opportunity_obj.tags.add(tag) if request.FILES.get('oppurtunity_attachment'): attachment = Attachments() attachment.created_by = request.user attachment.file_name = request.FILES.get( 'oppurtunity_attachment').name attachment.opportunity = opportunity_obj attachment.attachment = request.FILES.get( 'oppurtunity_attachment') attachment.save() success_url = reverse('opportunities:list') if request.POST.get("savenewform"): success_url = reverse("opportunities:save") if request.POST.get('from_account'): from_account = request.POST.get('from_account') success_url = reverse("accounts:view_account", pk=from_account) return JsonResponse({'error': False, 'success_url': success_url}) else: return JsonResponse({'error': True, 'errors': form.errors}) else: context = {} context["opportunity_form"] = form context["accounts"] = accounts if request.GET.get('view_account'): context['account'] = get_object_or_404( Account, id=request.GET.get('view_account')) context["contacts"] = contacts context["users"] = users context["currencies"] = CURRENCY_CODES context["stages"] = STAGES context["sources"] = SOURCES context["assignedto_list"] = [ int(i) for i in request.POST.getlist('assigned_to', []) if i] context["contacts_list"] = [ int(i) for i in request.POST.getlist('contacts', []) if i] return render(request, template_name, context)
def create_opportunity(request): accounts = Account.objects.filter(status="open") contacts = Contact.objects.all() if request.user.role != "ADMIN" and not request.user.is_superuser: accounts = Account.objects.filter( Q(created_by=request.user) | Q(assigned_to=request.user)) contacts = Contact.objects.filter( Q(assigned_to__in=[request.user]) | Q(created_by=request.user)) users = [] if request.user.role == 'ADMIN' or request.user.is_superuser: users = User.objects.filter(is_active=True).order_by('email') elif request.user.google.all(): users = [] else: users = User.objects.filter(role='ADMIN').order_by('email') kwargs_data = { "assigned_to": users, "account": accounts, "contacts": contacts } cur = Currency.objects.values_list('currency_settings', flat=True).first() print(cur, "************") if request.POST: s = request.POST.get("closed_on") print('ssssssssssss', s) p = datetime.strptime(s, "%d-%m-%Y").strftime("%Y-%m-%d") print('pppppppppp', p) form = OpportunityForm(request.POST, request.FILES, **kwargs_data) if form.is_valid(): opportunity_obj = form.save(commit=False) opportunity_obj.closed_on = p opportunity_obj.created_by = request.user if request.POST.get('stage') in ['CLOSED WON', 'CLOSED LOST']: opportunity_obj.closed_by = request.user opportunity_obj.save() if request.POST.getlist('assigned_to', []): opportunity_obj.assigned_to.add( *request.POST.getlist('assigned_to')) # assigned_to_list = request.POST.getlist('assigned_to') # current_site = get_current_site(request) # recipients = assigned_to_list # send_email_to_assigned_user.delay(recipients, opportunity_obj.id, domain=current_site.domain, # protocol=request.scheme) # for assigned_to_user in assigned_to_list: # user = get_object_or_404(User, pk=assigned_to_user) # mail_subject = 'Assigned to opportunity.' # message = render_to_string( # 'assigned_to/opportunity_assigned.html', { # 'user': user, # 'domain': current_site.domain, # 'protocol': request.scheme, # 'opportunity': opportunity_obj # }) # email = EmailMessage( # mail_subject, message, to=[user.email]) # email.content_subtype = "html" # email.send() if request.POST.getlist('teams', []): user_ids = Teams.objects.filter( id__in=request.POST.getlist('teams')).values_list( 'users', flat=True) assinged_to_users_ids = opportunity_obj.assigned_to.all( ).values_list('id', flat=True) for user_id in user_ids: if user_id not in assinged_to_users_ids: opportunity_obj.assigned_to.add(user_id) if request.POST.getlist('teams', []): opportunity_obj.teams.add(*request.POST.getlist('teams')) current_site = get_current_site(request) recipients = list(opportunity_obj.assigned_to.all().values_list( 'id', flat=True)) send_email_to_assigned_user.delay(recipients, opportunity_obj.id, domain=current_site.domain, protocol=request.scheme) if request.POST.getlist('contacts', []): opportunity_obj.contacts.add(*request.POST.getlist('contacts')) if request.POST.get('tags', ''): tags = request.POST.get("tags") splitted_tags = tags.split(",") for t in splitted_tags: tag = Tags.objects.filter(name=t.lower()) if tag: tag = tag[0] else: tag = Tags.objects.create(name=t.lower()) opportunity_obj.tags.add(tag) if request.FILES.get('oppurtunity_attachment'): attachment = Attachments() attachment.created_by = request.user attachment.file_name = request.FILES.get( 'oppurtunity_attachment').name attachment.opportunity = opportunity_obj attachment.attachment = request.FILES.get( 'oppurtunity_attachment') attachment.save() success_url = reverse('opportunities:list') if request.POST.get("savenewform"): success_url = reverse("opportunities:save") if request.POST.get('from_account'): from_account = request.POST.get('from_account') success_url = reverse("accounts:view_account", kwargs={'pk': from_account}) # print(success_url) return JsonResponse({'error': False, 'success_url': success_url}) return JsonResponse({'error': True, 'errors': form.errors}) context = {} context["opportunity_form"] = OpportunityForm(**kwargs_data) context["accounts"] = accounts if request.GET.get('view_account'): context['account'] = get_object_or_404( Account, id=request.GET.get('view_account')) context["contacts"] = contacts context["users"] = kwargs_data['assigned_to'] context["currencies"] = CURRENCY_CODES context["cur"] = cur context["stages"] = STAGES context["sources"] = SOURCES context["teams"] = Teams.objects.all() context["assignedto_list"] = [ int(i) for i in request.POST.getlist('assigned_to', []) if i ] context["contacts_list"] = [ int(i) for i in request.POST.getlist('contacts', []) if i ] return render(request, "create_opportunity.html", context)