Exemple #1
0
 def test_mission_proba(self):
     for i in range(5):
         # Create enough data to allow learn model to exist
         a = create_lead()
         a.state = "WON"
         a.save()
     lead = Lead.objects.get(id=1)
     lead.state = "LOST"  # Need more than one target class to build a solver
     lead.save()
     f = RequestFactory()
     request = f.get("/")
     request.user = User.objects.get(id=1)
     request.session = {}
     request._messages = default_storage(request)
     lead = create_lead()
     lead.state = "OFFER_SENT"
     lead.save()
     postSaveLead(request, lead, [], sync=True)
     mission = lead.mission_set.all()[0]
     if leads_learn.HAVE_SCIKIT:
         self.assertEqual(mission.probability,
                          lead.stateproba_set.get(state="WON").score)
     else:
         self.assertEqual(mission.probability, 50)
     lead.state = "WON"
     lead.save()
     postSaveLead(request, lead, [], sync=True)
     mission = Mission.objects.get(id=mission.id)  # reload it
     self.assertEqual(mission.probability, 100)
Exemple #2
0
 def test_mission_proba(self):
     for i in range(5):
         # Create enough data to allow learn model to exist
         a = create_lead()
         a.state="WON"
         a.save()
     lead = Lead.objects.get(id=1)
     lead.state="LOST"  # Need more than one target class to build a solver
     lead.save()
     f = RequestFactory()
     request = f.get("/")
     request.user = User.objects.get(id=1)
     request.session = {}
     request._messages = default_storage(request)
     lead = create_lead()
     lead.state = "OFFER_SENT"
     lead.save()
     postSaveLead(request, lead, [], sync=True)
     mission = lead.mission_set.all()[0]
     if leads_learn.HAVE_SCIKIT:
         self.assertEqual(mission.probability, lead.stateproba_set.get(state="WON").score)
     else:
         self.assertEqual(mission.probability, 50)
     lead.state = "WON"
     lead.save()
     postSaveLead(request, lead, [], sync=True)
     mission = Mission.objects.get(id=mission.id)  # reload it
     self.assertEqual(mission.probability, 100)
Exemple #3
0
def lead(request, lead_id=None):
    """Lead creation or modification"""
    lead = None
    updated_fields = []
    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)
        else:
            form = LeadForm(request.POST)
        if form.is_valid():
            changed_fields = form.changed_data
            for field_name, field in form.fields.items():
                if field_name in changed_fields and field_name not in blacklist_fields:
                    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([unicode(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)
            return HttpResponseRedirect(
                urlresolvers.reverse("leads.views.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
    })
Exemple #4
0
 def test_too_few_lead(self):
     lead = create_lead()
     f = RequestFactory()
     request = f.get("/")
     request.user = User.objects.get(id=1)
     request.session = {}
     request._messages = default_storage(request)
     lead = create_lead()
     postSaveLead(request, lead, [], sync=True)  # Learn model cannot exist, but it should not raise error
Exemple #5
0
 def test_too_few_lead(self):
     lead = create_lead()
     f = RequestFactory()
     request = f.get("/")
     request.user = User.objects.get(id=1)
     request.session = {}
     request._messages = default_storage(request)
     lead = create_lead()
     postSaveLead(request, lead, [], sync=True)  # Learn model cannot exist, but it should not raise error
Exemple #6
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})
Exemple #7
0
 def save_model(self, request, obj, form, change):
     form.save_m2m()  # Save many to many relations
     postSaveLead(request, obj, [])
Exemple #8
0
 def save_model(self, request, obj, form, change):
     form.save_m2m()  # Save many to many relations
     postSaveLead(request, obj, [])