Exemplo n.º 1
0
def contact_page(request):

    if request.method == 'POST':
        form = LeadForm(request.POST)
        if form.is_valid():
            new_lead = Lead()
            new_lead.name = request.POST.get('name', '')
            new_lead.subject = request.POST.get('subject', '')
            new_lead.email = request.POST.get('email', '')
            new_lead.message = request.POST.get('message', '')
            new_lead.save()

            messages.success(
                request,
                '{}, Your message was delivered!'.format(new_lead.name))
        else:
            messages.error(request, 'Something is going wrong! Try again!')

    form = LeadForm()

    print(form)

    context = {'form': form}

    return render(request, 'leads/contact.html', context=context)
Exemplo n.º 2
0
 def post(self, request):
     form = LeadForm(request.POST)
     if form.is_valid():
         print(form.data)
         Lead.objects.create(name=form.cleaned_data['name'],
                             email=form.cleaned_data['email'].lower())
         return render(request,
                       'index.html',
                       context={'message': 'Success!'})
     else:
         print(form.errors)
         return render(request,
                       'index.html',
                       context={'message': 'Data is incorrect'})
Exemplo n.º 3
0
def lead(request, lead_id=None):
    """Lead creation or modification"""
    lead = None
    updated_fields = []
    state_changed = False
    blacklist_fields = ["creation_date", "tags"]
    max_length = 50
    old_lead_description = ""
    try:
        if lead_id:
            lead = Lead.objects.get(id=lead_id)
            old_lead_description  = lead.description
    except Lead.DoesNotExist:
        pass

    if request.method == "POST":
        if lead:
            form = LeadForm(request.POST, instance=lead)
            created = False
        else:
            form = LeadForm(request.POST)
            created = True
        if form.is_valid():
            changed_fields = form.changed_data
            for field_name, field in list(form.fields.items()):
                if field_name in changed_fields and field_name not in blacklist_fields:
                    if field_name == "state":
                        state_changed = True
                    value = form.cleaned_data[field_name]
                    if field_name == "description":
                        if compact_text(value) == old_lead_description:
                            # Don't consider description field as changed if content is the same
                            continue
                    if isinstance(value, (list, QuerySet)):
                        value = ", ".join([str(i) for i in value])
                    else:
                        value = force_text(value)
                    value = value if len(value)<=max_length else value[0:max_length-3]+'...'
                    updated_fields.append("%s: %s" % (force_text(field.label or field_name), value))
            lead = form.save()
            postSaveLead(request, lead, updated_fields, created=created, state_changed=state_changed)
            return HttpResponseRedirect(reverse("leads:detail", args=[lead.id]))
    else:
        if lead:
            form = LeadForm(instance=lead)  # A form that edit current lead
        else:
            try:
                consultant = Consultant.objects.get(trigramme__iexact=request.user.username)
                form = LeadForm(initial={"responsible": consultant})  # An unbound form
            except Consultant.DoesNotExist:
                form = LeadForm()  # An unbound form

    return render(request, "leads/lead.html", {"lead": lead,
                                               "form": form,
                                               "user": request.user})
Exemplo n.º 4
0
def add_lead(request):
    accounts = Account.objects.all()
    users = User.objects.filter(is_active=True).order_by('email')
    teams = Team.objects.all()
    assignedto_list = request.POST.getlist('assigned_to')
    teams_list = request.POST.getlist('teams')
    lead_account = request.POST.get('account_name')
    lead_email = request.POST.get('email')
    lead_phone = request.POST.get('phone')
    form = LeadForm(assigned_to=users)
    address_form = BillingAddressForm()
    if request.method == 'POST':
        form = LeadForm(request.POST, assigned_to=users)
        address_form = BillingAddressForm(request.POST)
        if form.is_valid() and address_form.is_valid():
            lead_obj = form.save(commit=False)
            address_object = address_form.save()
            lead_obj.address = address_object
            lead_obj.created_by = request.user
            lead_obj.save()
            lead_obj.assigned_to.add(*assignedto_list)
            lead_obj.teams.add(*teams_list)
            if request.POST.get('status') == "converted":
                Account.objects.create(created_by=request.user,
                                       name=lead_account,
                                       email=lead_email,
                                       phone=lead_phone)
            if request.POST.get("savenewform"):
                return HttpResponseRedirect(reverse("leads:add_lead"))
            else:
                return HttpResponseRedirect(reverse('leads:list'))
        else:
            return render(
                request, 'leads/create_lead.html', {
                    'lead_form': form,
                    'address_form': address_form,
                    'accounts': accounts,
                    'countries': COUNTRIES,
                    'teams': teams,
                    'users': users,
                    'status': LEAD_STATUS,
                    'source': LEAD_SOURCE,
                    'assignedto_list': assignedto_list,
                    'teams_list': teams_list
                })
    else:
        return render(
            request, 'leads/create_lead.html', {
                'lead_form': form,
                'address_form': address_form,
                'accounts': accounts,
                'countries': COUNTRIES,
                'teams': teams,
                'users': users,
                'status': LEAD_STATUS,
                'source': LEAD_SOURCE,
                'assignedto_list': assignedto_list,
                'teams_list': teams_list
            })
Exemplo n.º 5
0
def edit_lead(request, lead_id):
    lead_obj = get_object_or_404(Lead, id=lead_id)
    address_obj = get_object_or_404(Address, id=lead_obj.address.id)
    accounts = Account.objects.all()
    users = User.objects.filter().order_by('email')
    form = LeadForm(instance=lead_obj, assigned_to=users)
    address_form = BillingAddressForm(instance=address_obj)
    assignedto_list = request.POST.getlist('assigned_to')
    teams_list = request.POST.getlist('teams')
    lead_account = request.POST.get('account_name')
    lead_email = request.POST.get('email')
    lead_phone = request.POST.get('phone')
    teams = Team.objects.all()
    if request.method == 'POST':
        form = LeadForm(request.POST, instance=lead_obj, assigned_to=users)
        address_form = BillingAddressForm(request.POST, instance=address_obj)
        if request.POST.get('status') == "converted":
            form.fields['account_name'].required = True
        else:
            form.fields['account_name'].required = False
        if form.is_valid() and address_form.is_valid():
            dis_address_obj = address_form.save()
            lead_obj = form.save(commit=False)
            lead_obj.address = dis_address_obj
            lead_obj.created_by = request.user
            lead_obj.save()
            lead_obj.assigned_to.clear()
            lead_obj.assigned_to.add(*assignedto_list)
            lead_obj.teams.clear()
            lead_obj.teams.add(*teams_list)
            if request.POST.get('status') == "converted":
                Account.objects.create(
                    created_by=request.user, name=lead_account,
                    email=lead_email, phone=lead_phone
                )
            return HttpResponseRedirect(reverse('leads:list'))
        else:
            return render(request, 'leads/create_lead.html', {
                          'lead_obj': lead_obj,
                          'lead_form': form,
                          'address_form': address_form,
                          'accounts': accounts, 'countries': COUNTRIES,
                          'teams': teams, 'users': users,
                          'status': LEAD_STATUS, 'source': LEAD_SOURCE,
                          'assignedto_list': assignedto_list, 'teams_list': teams_list})
    else:
        return render(request, 'leads/create_lead.html', {
                      'lead_form': form, 'address_form': address_form,
                      'lead_obj': lead_obj, 'address_obj': address_obj,
                      'accounts': accounts, 'countries': COUNTRIES, 'teams': teams,
                      'users': users, 'status': LEAD_STATUS, 'source': LEAD_SOURCE,
                      'assignedto_list': assignedto_list, 'teams_list': teams_list})
Exemplo n.º 6
0
def lead_create_edit_view(request):
    #Displays a ModelForm for a Lead object; if an "instance" is passed via the url, that
    #instance is loaded into the ModelForm for editing
    instance_id = request.GET.get('instance', None)
    if instance_id is not None:
        instance = Lead.objects.get(id=instance_id)
        if instance.distributor != request.user.distributor:
            messages.add_message(request, messages.WARNING,
                                 "You are not authorized to edit that lead.")
            return redirect(
                "leads:leadlist")  #named URL; make sure patterns match
    else:
        instance = None

    if request.method == 'POST':
        form = LeadForm(request.POST, instance=instance)
        if form.is_valid():
            newlead = form.save(commit=False)
            newlead.distributor = request.user.distributor
            newlead.save()
            form.save_m2m()
            messages.add_message(request, messages.SUCCESS, "Lead saved!")
            return redirect(request.POST['request_url'])

    else:
        form = LeadForm(instance=instance)

    #pull these to main indent level so that queryset is restricted both on GET and when re-rendering
    #a form with errors after a bad POST
    form.fields[
        'invoked_email_automations'].queryset = EmailAutomation.objects.filter(
            distributor=request.user.distributor)
    form.fields[
        'invoked_post_automations'].queryset = PostAutomation.objects.filter(
            distributor=request.user.distributor)

    #http://stackoverflow.com/questions/11276100/how-do-i-insert-a-django-form-in-twitter-bootstrap-modal-window
    return render(request, "leads/leadform.html", {
        'form': form,
        'instance': instance
    })
Exemplo n.º 7
0
def update_lead(request, pk):
    lead_record = Lead.objects.filter(pk=pk).first()
    template_name = "create_lead.html"
    users = []
    if request.user.role == 'ADMIN' or request.user.is_superuser:
        users = User.objects.filter(is_active=True).order_by('email')
    else:
        users = User.objects.filter(role='ADMIN').order_by('email')
    status = request.GET.get('status', None)
    initial = {}
    if status and status == "Qualified":
        error = "This field is required."
        lead_record.status = "Qualified"
        initial.update({
            "status": status, "lead": lead_record.id})
    error = ""
    form = LeadForm(instance=lead_record, initial=initial, assigned_to=users)

    if request.POST:
        form = LeadForm(request.POST, request.FILES,
                        instance=lead_record,
                        initial=initial, assigned_to=users)

        if request.POST.get('status') == "Qualified":
            form.fields['account_name'].required = True
            form.fields['email'].required = True
        else:
            form.fields['account_name'].required = False
            form.fields['email'].required = False
        if form.is_valid():
            assigned_to_ids = lead_record.assigned_to.all().values_list(
                'id', flat=True)
            lead_obj = form.save(commit=False)
            lead_obj.save()
            previous_assigned_to_users = list(lead_obj.assigned_to.all().values_list('id', flat=True))
            lead_obj.tags.clear()
            all_members_list = []
            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)
                    if tag:
                        tag = tag[0]
                    else:
                        tag = Tags.objects.create(name=t)
                    lead_obj.tags.add(tag)
            if request.POST.getlist('assigned_to', []):
                if request.POST.get('status') != "Qualified":

                    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, lead_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 lead.'
                    #         message = render_to_string(
                    #             'assigned_to/leads_assigned.html', {
                    #                 'user': user,
                    #                 'domain': current_site.domain,
                    #                 'protocol': request.scheme,
                    #                 'lead': lead_obj
                    #             })
                    #         email = EmailMessage(
                    #             mail_subject, message, to=[user.email])
                    #         email.content_subtype = "html"
                    #         email.send()

                lead_obj.assigned_to.clear()
                lead_obj.assigned_to.add(*request.POST.getlist('assigned_to'))
            else:
                lead_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 = lead_obj.assigned_to.all().values_list('id', flat=True)
                for user_id in user_ids:
                    if user_id not in assinged_to_users_ids:
                        lead_obj.assigned_to.add(user_id)

            if request.POST.getlist('teams', []):
                lead_obj.teams.clear()
                lead_obj.teams.add(*request.POST.getlist('teams'))
            else:
                lead_obj.teams.clear()

            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)
            # update_leads_cache.delay()
            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 request.POST.get('status') == "Qualified":
                account_object = Account.objects.create(
                    created_by=request.user, name=lead_obj.account_name,
                    email=lead_obj.email, phone=lead_obj.phone,
                    description=request.POST.get('description'),
                    website=request.POST.get('website'),
                    lead=lead_obj
                )
                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
                for tag in lead_obj.tags.all():
                    account_object.tags.add(tag)
                if request.POST.getlist('assigned_to', []):
                    # account_object.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, lead_obj.id, domain=current_site.domain,
                        protocol=request.scheme)
                    # 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 account.'
                    #     message = render_to_string(
                    #         'assigned_to/account_assigned.html', {
                    #             'user': user,
                    #             'domain': current_site.domain,
                    #             'protocol': request.scheme,
                    #             'account': account_object
                    #         })
                    #     email = EmailMessage(
                    #         mail_subject, message, to=[user.email])
                    #     email.content_subtype = "html"
                    #     email.send()

                for comment in lead_obj.leads_comments.all():
                    comment.account = account_object
                    comment.save()
                account_object.save()
            status = request.GET.get('status', None)
            success_url = reverse('leads:list')
            if status:
                success_url = reverse('accounts:list')
            return JsonResponse({'error': False, 'success_url': success_url})
        return JsonResponse({'error': True, 'errors': form.errors})
    context = {}
    context["lead_obj"] = lead_record
    user_assgn_list = [
        assigned_to.id for assigned_to in lead_record.get_assigned_users_not_in_teams]

    if request.user == lead_record.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
    team_ids = [user.id for user in lead_record.get_team_users]
    all_user_ids = [user.id for user in users]
    users_excluding_team_id = set(all_user_ids) - set(team_ids)
    users_excluding_team = User.objects.filter(id__in=users_excluding_team_id)
    context["lead_form"] = form
    context["accounts"] = Account.objects.filter(status="open")
    context["users"] = users
    context["users_excluding_team"] = users_excluding_team
    context["countries"] = COUNTRIES
    context["status"] = LEAD_STATUS
    context["source"] = LEAD_SOURCE
    context["error"] = error
    context["teams"] = Teams.objects.all()
    context["assignedto_list"] = [
        int(i) for i in request.POST.getlist('assigned_to', []) if i]
    return render(request, template_name, context)
Exemplo n.º 8
0
def create_lead(request):
    template_name = "create_lead.html"
    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')
    form = LeadForm(assigned_to=users)

    if request.POST:
        form = LeadForm(request.POST, request.FILES, assigned_to=users)
        if form.is_valid():
            lead_obj = form.save(commit=False)
            lead_obj.created_by = request.user
            lead_obj.save()
            l = Lead.objects.values_list('id',flat=True).latest('id')
            print("Lead:",l)
            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)
                    if tag:
                        tag = tag[0]
                    else:
                        tag = Tags.objects.create(name=t)
                    lead_obj.tags.add(tag)
            if request.POST.getlist('assigned_to', []):
                lead_obj.assigned_to.add(*request.POST.getlist('assigned_to'))
                assigned_to_list = request.POST.getlist('assigned_to')
                for i in assigned_to_list:
                    print("I:",i)
                    print(User.objects.values_list('username',flat=True).get(id=i))
                    # V_user = get_object_or_404(User,pk=i)
                    v_user=User.objects.values_list('username',flat=True).get(id=i)
                    uname = request.user.id
                    notifi=LeadNotification.objects.create(leadid=l,userid=i)
                # 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 assigned_to_user in assigned_to_list:
                #     user = get_object_or_404(User, pk=assigned_to_user)
                #     mail_subject = 'Assigned to lead.'
                #     message = render_to_string(
                #         'assigned_to/leads_assigned.html', {
                #             'user': user,
                #             'domain': current_site.domain,
                #             'protocol': request.scheme,
                #             'lead': lead_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 = lead_obj.assigned_to.all().values_list('id', flat=True)
                for user_id in user_ids:
                    if user_id not in assinged_to_users_ids:
                        lead_obj.assigned_to.add(user_id)

            if request.POST.getlist('teams', []):
                lead_obj.teams.add(*request.POST.getlist('teams'))

            current_site = get_current_site(request)
            recipients = list(lead_obj.assigned_to.all().values_list('id', flat=True))
            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 request.POST.get('status') == "qualified":
                account_object = Account.objects.create(
                    created_by=request.user, name=lead_obj.account_name,
                    email=lead_obj.email, phone=lead_obj.phone,
                    description=request.POST.get('description'),
                    website=request.POST.get('website'),
                )
                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
                for tag in lead_obj.tags.all():
                    account_object.tags.add(tag)

                if request.POST.getlist('assigned_to', []):
                    # account_object.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, lead_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 account.'
                    #     message = render_to_string(
                    #         'assigned_to/account_assigned.html', {
                    #             'user': user,
                    #             'domain': current_site.domain,
                    #             'protocol': request.scheme,
                    #             'account': account_object
                    #         })
                    #     email = EmailMessage(
                    #         mail_subject, message, to=[user.email])
                    #     email.content_subtype = "html"
                    #     email.send()

                account_object.save()
                # update_leads_cache.delay()
            success_url = reverse('leads:list')
            if request.POST.get("savenewform"):
                success_url = reverse("leads:add_lead")
            return JsonResponse({'error': False, 'success_url': success_url})
        return JsonResponse({'error': True, 'errors': form.errors})
    context = {}
    context["lead_form"] = form
    context["accounts"] = Account.objects.filter(status="open")
    context["users"] = users
    context["countries"] = COUNTRIES
    context["status"] = LEAD_STATUS
    context["source"] = LEAD_SOURCE
    context["teams"] = Teams.objects.all()
    context["assignedto_list"] = [
        int(i) for i in request.POST.getlist('assigned_to', []) if i]

    return render(request, template_name, context)
Exemplo n.º 9
0
def update_lead(request, pk):
    print('-- inside update lead --')
    lead_record = Lead.objects.filter(pk=pk).first()
    print('-- should make it past pk.first --')
    template_name = "create_lead.html"
    users = []
    if 'ADMIN' in request.user.role or request.user.is_superuser:
        print('-- admin detected in lead update view --')
        users = User.objects.filter(is_active=True).order_by('email')
    elif request.user.google.all():
        users = []
    else:
        users = User.objects.filter(
            role__in=['ADMIN', 'MANAGER']).order_by('email')
    status = request.GET.get('status', None)
    initial = {}
    #if status and status == "converted":
    #    error = "This field is required."
    #    lead_record.status = "converted"
    #    initial.update({
    #        "status": status, "lead": lead_record.id})
    error = ""
    form = LeadForm(instance=lead_record, initial=initial, assigned_to=users)

    if request.POST:
        print('-- inside update lead post --')
        form = LeadForm(request.POST,
                        request.FILES,
                        instance=lead_record,
                        initial=initial,
                        assigned_to=users)

        print(form.errors)
        if form.is_valid():
            #print(form)
            assigned_to_ids = lead_record.assigned_to.all().values_list(
                'id', flat=True)
            lead_obj = form.save(commit=False)
            lead_obj.save()
            lead_obj.tags.clear()
            all_members_list = []

            if request.POST.get('tags', ''):
                tags = request.POST.get("tags")
                if tags:
                    split_tags = tags.split(",")
                    print('-- found tags --')
                    print(split_tags)
                    lead_obj.tags.clear()

                    for tag in split_tags:
                        print('-- adding %s to Lead: %s' %
                              (tag, lead_obj.domain.domain_common))
                        lead_obj.tags.add(tag)

                else:
                    print('-- no tags returned. clearing ...')
                    lead_obj.tags.clear()

            if request.POST.getlist('assigned_to', []):
                if request.POST.get('status') != "converted":

                    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)))

                lead_obj.assigned_to.clear()
                lead_obj.assigned_to.add(*request.POST.getlist('assigned_to'))
            else:
                lead_obj.assigned_to.clear()

            status = request.GET.get('status', None)
            success_url = reverse('leads:list')
            if status:
                success_url = reverse('accounts:list')
            return JsonResponse({'error': False, 'success_url': success_url})
        return JsonResponse({'error': True, 'errors': form.errors})

    context = {}
    context["lead_obj"] = lead_record
    user_assgn_list = [
        assigned_to.id for assigned_to in lead_record.assigned_to.all()
    ]

    #if request.user == lead_record.created_by:
    #    user_assgn_list.append(request.user.id)

    if "ADMIN" not in request.user.role and not request.user.is_superuser:
        if request.user.id not in user_assgn_list:
            raise PermissionDenied

    context["lead_form"] = form
    #context["accounts"] = Account.objects.filter(status="open")
    context["users"] = users
    #context["countries"] = COUNTRIES
    context["status"] = LEAD_STATUS
    #context["source"] = LEAD_SOURCE
    context["error"] = error
    context["assignedto_list"] = [
        int(i) for i in request.POST.getlist('assigned_to', []) if i
    ]

    return render(request, template_name, context)
Exemplo n.º 10
0
def create_lead(request):
    template_name = "create_lead.html"
    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')
    form = LeadForm(assigned_to=users)

    if request.POST:
        print(request.POST)
        cat_id = Category.objects.get(pk=request.POST.get('category'))
        subc_id = SubCategory.objects.get(pk=request.POST.get('sub_category'))
        item_id = ItemList.objects.get(pk=request.POST.get('item_list'))
        form = LeadForm(request.POST, request.FILES, assigned_to=users,sub_category=subc_id,item_list=item_id)
        if form.is_valid():
            lead_obj = form.save(commit=False)
            lead_obj.created_by = request.user
            lead_obj.save()
            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)
                    if tag:
                        tag = tag[0]
                    else:
                        tag = Tags.objects.create(name=t)
                    lead_obj.tags.add(tag)
            if request.POST.getlist('assigned_to', []):
                lead_obj.assigned_to.add(*request.POST.getlist('assigned_to'))
                assigned_to_list = request.POST.getlist('assigned_to')
            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 = lead_obj.assigned_to.all().values_list('id', flat=True)
                for user_id in user_ids:
                    if user_id not in assinged_to_users_ids:
                        lead_obj.assigned_to.add(user_id)

            if request.POST.getlist('teams', []):
                lead_obj.teams.add(*request.POST.getlist('teams'))

            if request.POST.getlist('products',[]):
                lead_obj.products.add(*request.POST.getlist('products'))

            current_site = get_current_site(request)
            recipients = list(lead_obj.assigned_to.all().values_list('id', flat=True))
            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 request.POST.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=request.POST.get('description'),
                    website=request.POST.get('website'),
                )
                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
                for tag in lead_obj.tags.all():
                    account_object.tags.add(tag)

                if request.POST.getlist('assigned_to', []):
                    # account_object.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, lead_obj.id, domain=current_site.domain,
                        protocol=request.scheme)
                account_object.save()
                # update_leads_cache.delay()
            success_url = reverse('leads:list')
            if request.POST.get("savenewform"):
                success_url = reverse("leads:add_lead")
            return JsonResponse({'error': False, 'success_url': success_url})
        return JsonResponse({'error': True, 'errors': form.errors})
    context = {}
    context["lead_form"] = form
    context["accounts"] = Account.objects.filter(status="open")
    context["users"] = users
    context["countries"] = COUNTRIES
    context["status"] = LEAD_STATUS
    context["source"] = LEAD_SOURCE
    context["teams"] = Teams.objects.all()
    context['products'] = Product.objects.all()
    context["assignedto_list"] = [
        int(i) for i in request.POST.getlist('assigned_to', []) if i]

    return render(request, template_name, context)
Exemplo n.º 11
0
def create_lead(request):
    template_name = "create_lead.html"
    users = User.objects.filter(is_active=True).order_by('email')
    form = LeadForm(assigned_to=users)

    if request.POST:
        form = LeadForm(request.POST, request.FILES, assigned_to=users)
        if form.is_valid():

            lead_obj = form.save(commit=False)
            lead_obj.created_by = request.user
            lead_obj.save()
            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)
                    if tag:
                        tag = tag[0]
                    else:
                        tag = Tags.objects.create(name=t)
                    lead_obj.tags.add(tag)
            if request.POST.getlist('assigned_to', []):
                lead_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 lead.'
                    message = render_to_string(
                        'assigned_to/leads_assigned.html', {
                            'user': user,
                            'domain': current_site.domain,
                            'protocol': request.scheme,
                            'lead': lead_obj
                        })
                    email = EmailMessage(mail_subject,
                                         message,
                                         to=[user.email])
                    email.content_subtype = "html"
                    email.send()

            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 request.POST.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=request.POST.get('description'),
                    website=request.POST.get('website'),
                )
                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
                for tag in lead_obj.tags.all():
                    account_object.tags.add(tag)

                if request.POST.getlist('assigned_to', []):
                    # account_object.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 account.'
                        message = render_to_string(
                            'assigned_to/account_assigned.html', {
                                'user': user,
                                'domain': current_site.domain,
                                'protocol': request.scheme,
                                'account': account_object
                            })
                        email = EmailMessage(mail_subject,
                                             message,
                                             to=[user.email])
                        email.content_subtype = "html"
                        email.send()

                account_object.save()
            success_url = reverse('leads:list')
            if request.POST.get("savenewform"):
                success_url = reverse("leads:add_lead")
            return JsonResponse({'error': False, 'success_url': success_url})

        else:
            return JsonResponse({'error': True, 'errors': form.errors})

    else:
        context = {}
        context["lead_form"] = form
        context["accounts"] = Account.objects.filter(status="open")
        context["users"] = users
        context["countries"] = COUNTRIES
        context["status"] = LEAD_STATUS
        context["source"] = LEAD_SOURCE
        context["assignedto_list"] = [
            int(i) for i in request.POST.getlist('assigned_to', []) if i
        ]

        return render(request, template_name, context)
Exemplo n.º 12
0
def lead(request, lead_id=None):
    """Lead creation or modification"""
    lead = None
    updated_fields = []
    state_changed = False
    blacklist_fields = ["creation_date", "tags"]
    max_length = 50
    old_lead_description = ""
    try:
        if lead_id:
            lead = Lead.objects.get(id=lead_id)
            old_lead_description  = lead.description
    except Lead.DoesNotExist:
        pass

    if request.method == "POST":
        if lead:
            form = LeadForm(request.POST, instance=lead)
            created = False
        else:
            form = LeadForm(request.POST)
            created = True
        if form.is_valid():
            changed_fields = form.changed_data
            for field_name, field in list(form.fields.items()):
                if field_name in changed_fields and field_name not in blacklist_fields:
                    if field_name == "state":
                        state_changed = True
                    value = form.cleaned_data[field_name]
                    if field_name == "description":
                        if compact_text(value) == old_lead_description:
                            # Don't consider description field as changed if content is the same
                            continue
                    if isinstance(value, (list, QuerySet)):
                        value = ", ".join([str(i) for i in value])
                    else:
                        value = force_text(value)
                    value = value if len(value)<=max_length else value[0:max_length-3]+'...'
                    updated_fields.append("%s: %s" % (force_text(field.label or field_name), value))
            lead = form.save()
            postSaveLead(request, lead, updated_fields, created=created, state_changed=state_changed)
            return HttpResponseRedirect(reverse("leads:detail", args=[lead.id]))
    else:
        if lead:
            form = LeadForm(instance=lead)  # A form that edit current lead
        else:
            try:
                consultant = Consultant.objects.get(trigramme__iexact=request.user.username)
                form = LeadForm(initial={"responsible": consultant})  # An unbound form
            except Consultant.DoesNotExist:
                form = LeadForm()  # An unbound form

    return render(request, "leads/lead.html", {"lead": lead,
                                               "form": form,
                                               "user": request.user})