def calc(self, interval_start, interval_end): projects = Project.projects_active_between( interval_start, interval_end) total_hours = round( sum([p.hours_logged.total_seconds() for p in projects]) / 3600, 2) return dict(projects=projects, total_hours=total_hours)
def calc(self, days): now = datetime.now() end = now start = now - timedelta(days=days) projects = Project.projects_active_between(start, end) total_hours = round( sum([p.hours_logged.total_seconds() for p in projects]) / 3600, 2) return dict(days=days, projects=projects, total_hours=total_hours)
def calc(self, start, end): projects = Project.projects_active_during(start, end, self.groups) my_projects = [] for p in projects: d = dict( pid=p.pid, name=p.name, projnum=p.projnum) d['group_times'] = [p.group_hours(g.username, start, end) for g in self.groups] d['total_time'] = p.interval_total(start, end) my_projects.append(d) group_totals = [x.total_group_time(start, end) for x in self.groups] grand_total = ActualTime.interval_total_time(start, end) return dict(groupnames=self.groupnames, project_times=my_projects, group_totals=group_totals, grand_total=grand_total)
def test_projects_active_between(self): now = timezone.now() # Make 5 ActualTime objects. This will ultimately create # 5 different projects (as well as 5 items, 5 milestones). for i in range(5): # ActualTime uses "completed" (a DateTimeField) as its # primary key, so it must be unique :-/. This will be # difficult to change because of this model's foreign # key relationships. now += timedelta(seconds=10) ActualTimeFactory(completed=now) # Make one of the projects private p = Project.objects.first() p.pub_view = False p.save() start = datetime(year=2016, month=1, day=3).replace(tzinfo=utc) end = datetime(year=2016, month=1, day=5).replace(tzinfo=utc) projects = Project.projects_active_between(start, end) self.assertEqual(projects.count(), 4, 'Private projects must be hidden from reports.')