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