Exemple #1
0
 def test_turnover(self):
     current_month = date.today().replace(day=1)
     next_month = nextMonth(current_month)
     previous_month = previousMonth(current_month)
     lead = Lead.objects.get(id=1)
     c1 = Consultant.objects.get(id=1)
     c2 = Consultant.objects.get(id=2)
     mission = Mission(lead=lead, subsidiary_id=1, billing_mode="TIME_SPENT", nature="PROD", probability=100)
     mission.save()
     cache.clear()  # avoid bad computation due to rates cache with previous values
     # Add some timesheet - we fake with all charge on the first day
     Timesheet(mission=mission, working_date=previous_month, consultant=c1, charge=10).save()
     Timesheet(mission=mission, working_date=previous_month, consultant=c2, charge=5).save()
     Timesheet(mission=mission, working_date=current_month, consultant=c1, charge=10).save()
     Timesheet(mission=mission, working_date=current_month, consultant=c2, charge=5).save()
     # Add financial conditions for this mission
     FinancialCondition(consultant=c1, mission=mission, daily_rate=2000).save()
     FinancialCondition(consultant=c2, mission=mission, daily_rate=1000).save()
     done_work = (10 + 10) * 2000 + (5 + 5) * 1000
     # Define mission price
     mission.price = 40
     mission.billing_mode = "TIME_SPENT"
     mission.save()
     # In time spent, turnover is what we did
     self.assertEqual(c1.get_turnover(end_date=next_month), 20 * 2000)
     mission.billing_mode = "FIXED_PRICE"
     mission.save()
     # In fixed price, turnover is limited by price in proportion of all work
     self.assertEqual(c1.get_turnover(end_date=next_month), 20 * 2000 * mission.price * 1000 / done_work)
     self.assertEqual(c1.get_turnover(end_date=next_month) + c2.get_turnover(end_date=next_month), mission.price * 1000)
     # Let add some margin by changing mission price.
     mission.price = 60
     mission.save()
     self.assertEqual(c1.get_turnover(end_date=next_month), 20 * 2000) # like in time spent
     self.assertEqual(c1.get_turnover(end_date=next_month) + c2.get_turnover(end_date=next_month), done_work)
     # Let archive mission to validate margin
     mission.active = False
     mission.save()
     self.assertEqual(c1.get_turnover(end_date=next_month), 20 * 2000 * mission.price * 1000 / done_work)  # like in time spent
     self.assertEqual(c1.get_turnover(end_date=next_month) + c2.get_turnover(end_date=next_month), mission.price * 1000)
Exemple #2
0
        if lead.state in ("OFFER_SENT", "NEGOTIATION", "WON"):
            mission = Mission(lead=lead)
            mission.price = lead.sales  # Initialise with lead price
            mission.subsidiary = lead.subsidiary
            mission.responsible = lead.responsible
            mission.save()
            # Create default staffing
            mission.create_default_staffing()
            messages.add_message(
                request, messages.INFO,
                ugettext("A mission has been initialized for this lead."))

    for mission in lead.mission_set.all():
        if mission.subsidiary != lead.subsidiary:
            mission.subsidiary = lead.subsidiary
            mission.save()
        if lead.state == "WON":
            mission.probability = 100
            mission.active = True
            mission.save()
            messages.add_message(
                request, messages.INFO,
                ugettext("Mission's probability has been set to 100%"))
        elif lead.state in ("LOST", "FORGIVEN", "SLEEPING"):
            mission.probability = 0
            mission.active = False
            mission.save()
            messages.add_message(
                request, messages.INFO,
                ugettext("According mission has been archived"))
Exemple #3
0
            messages.add_message(request, messages.INFO, ugettext("Lead sent to business mailing list"))
        except Exception, e:
            messages.add_message(request, messages.ERROR, ugettext("Failed to send mail: %s") % e)

    # Create or update mission  if needed
    if lead.mission_set.count() == 0:
        if lead.state in ("OFFER_SENT", "NEGOTIATION", "WON"):
            mission = Mission(lead=lead)
            mission.price = lead.sales  # Initialise with lead price
            mission.subsidiary = lead.subsidiary
            mission.responsible = lead.responsible
            mission.save()
            # Create default staffing
            mission.create_default_staffing()
            messages.add_message(request, messages.INFO, ugettext("A mission has been initialized for this lead."))

    for mission in lead.mission_set.all():
        if mission.subsidiary != lead.subsidiary:
            mission.subsidiary = lead.subsidiary
            mission.save()
        if lead.state == "WON":
            mission.probability = 100
            mission.active = True
            mission.save()
            messages.add_message(request, messages.INFO, ugettext("Mission's probability has been set to 100%"))
        elif lead.state in ("LOST", "FORGIVEN", "SLEEPING"):
            mission.probability = 0
            mission.active = False
            mission.save()
            messages.add_message(request, messages.INFO, ugettext("According mission has been archived"))