def get_efforts(self): efforts = {} for month in list(interval_months(self.start_date, self.end_date)): efforts[month] = self.effort prev = self.employee.assignments.filter(start_date__range=(self.start_date, self.end_date)) if prev: for assignment in prev: for month in list(interval_months(assignment.start_date, assignment.end_date)): if month in efforts: efforts[month] += assignment.effort return efforts
def get_efforts_by_month(self): efforts = {} for assignment in self.assignments.all(): for month in list(interval_months(assignment.start_date, assignment.end_date)): em = EffortMonth(month[0], month[1]) if em in efforts: new_effort = efforts[em].effort + assignment.effort new_cost = efforts[em].cost + self._calculate_cost_per_month(assignment.effort) efforts[em] = EffortCost(new_effort, new_cost) else: efforts[em] = EffortCost(assignment.effort, self._calculate_cost_per_month(assignment.effort)) return efforts
def next_under(self, start_date=None, efforts=None): grayspan = '<span style="color: gray">' redspan = '<span style="color: red">' endspan = '</span>' if not start_date: start_date = date.today() if not efforts: efforts = self.get_efforts_by_month() if not efforts: return redspan + '{}/{}'.format(start_date.month, start_date.year) + endspan fte = self.fte * 100 end_date = start_date + relativedelta(months=+12) end_month = EffortMonth(end_date.year, end_date.month) for month in list(interval_months(start_date, end_date)): if month == end_month: break if month not in efforts or efforts[month].effort < fte: return redspan + '{}/{}'.format(month[1], month[0]) + endspan return grayspan + 'OK to {}/{}'.format(end_date.month, end_date.year) + endspan