From 8d53aceaa91861ded9b76cd571ed61be6cec6ec6 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 22 Nov 2011 16:23:24 -0800 Subject: [PATCH 1/2] titles on calendar summorizing days now more accurate --- apps/dates/views.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/apps/dates/views.py b/apps/dates/views.py index a95ae45..244a366 100644 --- a/apps/dates/views.py +++ b/apps/dates/views.py @@ -211,7 +211,14 @@ def make_title(entry): title = '%s - ' % entry.user.username else: title = '' - days = (entry.end - entry.start).days + 1 + days = 0 + for hour in Hours.objects.filter(entry=entry): + if hour.hours == 8: + days += 1 + elif hour.hours == 4: + days += 0.5 + + raise Exception if days > 1: title += '%s days' % days if Hours.objects.filter(entry=entry, birthday=True).exists(): @@ -219,6 +226,8 @@ def make_title(entry): elif (days == 1 and entry.total_hours == 0 and Hours.objects.filter(entry=entry, birthday=True)): title += 'Birthday!' + elif days == 1 and entry.total_hours == 8: + title += '1 day' else: title += '%s hours' % entry.total_hours if entry.details: From cfe99a46a5004f37d69c78f5ab915a800aafc26c Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 22 Nov 2011 17:25:37 -0800 Subject: [PATCH 2/2] fixed how dates are displayed in calendar --- apps/dates/tests/test_views.py | 97 ++++++++++++++++++++++++++++++++++ apps/dates/views.py | 1 - 2 files changed, 97 insertions(+), 1 deletion(-) diff --git a/apps/dates/tests/test_views.py b/apps/dates/tests/test_views.py index f6443f5..56f47a4 100644 --- a/apps/dates/tests/test_views.py +++ b/apps/dates/tests/test_views.py @@ -119,6 +119,22 @@ def _create_hr_manager(self, username='jill', email='jill@mozilla.com'): profile.save() return user + def _create_entry_hours(self, entry, *hours): + date = entry.start + i = 0 + while date <= entry.end: + try: + h = hours[i] + except IndexError: + h = 8 + Hours.objects.create( + entry=entry, + date=date, + hours=h, + ) + i += 1 + date += datetime.timedelta(days=1) + def test_404_page(self): url = '/ojsfpijweofpjwf/qpijf/' response = self.client.get(url) @@ -591,6 +607,85 @@ def test_calendar_events(self): eq_(set([x['id'] for x in events]), set([entry1.pk, entry2.pk, entry3.pk, entry6.pk])) + def test_calendar_events_summation(self): + url = reverse('dates.calendar_events') + + peter = User.objects.create( + username='peter', + email='pbengtsson@mozilla.com', + first_name='Peter', + last_name='Bengtsson', + ) + peter.set_password('secret') + peter.save() + assert self.client.login(username=peter.email, password='secret') + + # add some entries + entry = Entry.objects.create( + user=peter, + start=datetime.date(2011, 7, 2), + end=datetime.date(2011, 7, 4), + total_hours=8 + 4 + 8, + ) + + Hours.objects.create( + entry=entry, + date=datetime.date(2011, 7, 2), + hours=8 + ) + + Hours.objects.create( + entry=entry, + date=datetime.date(2011, 7, 3), + hours=4 + ) + + Hours.objects.create( + entry=entry, + date=datetime.date(2011, 7, 4), + hours=8 + ) + + _start = datetime.datetime(2011, 7, 1) + _end = datetime.datetime(2011, 8, 1) - datetime.timedelta(days=1) + data = { + 'start': time.mktime(_start.timetuple()), + 'end': time.mktime(_end.timetuple()) + } + response = self.client.get(url, data) + eq_(response.status_code, 200) + struct = json.loads(response.content) + events = struct['events'] + event = events[0] + eq_(event['title'], '2.5 days') + + + Hours.objects.all().delete() + entry.end = datetime.date(2011, 7, 2) + entry.total_hours = 8 + entry.save() + self._create_entry_hours(entry) + + response = self.client.get(url, data) + eq_(response.status_code, 200) + struct = json.loads(response.content) + events = struct['events'] + event = events[0] + eq_(event['title'], '1 day') + + Hours.objects.all().delete() + entry.end = datetime.date(2011, 7, 2) + entry.total_hours = 4 + entry.save() + self._create_entry_hours(entry, 4) + + response = self.client.get(url, data) + eq_(response.status_code, 200) + struct = json.loads(response.content) + events = struct['events'] + event = events[0] + eq_(event['title'], '4 hours') + def test_calendar_event_title(self): url = reverse('dates.calendar_events') peter = User.objects.create( @@ -633,6 +728,8 @@ def test_calendar_event_title(self): entry.total_hours += 8 * 5 entry.save() + self._create_entry_hours(entry) + response = self.client.get(url, data) eq_(response.status_code, 200) struct = json.loads(response.content) diff --git a/apps/dates/views.py b/apps/dates/views.py index 244a366..b554ced 100644 --- a/apps/dates/views.py +++ b/apps/dates/views.py @@ -218,7 +218,6 @@ def make_title(entry): elif hour.hours == 4: days += 0.5 - raise Exception if days > 1: title += '%s days' % days if Hours.objects.filter(entry=entry, birthday=True).exists():