[Checkins] SVN: Products.CMFCalendar/branches/2.1/Products/CMFCalendar/ Long events miss the last day of each month in the calendar, thanks to silviot
Tarek Ziade
ziade.tarek at gmail.com
Thu Oct 2 20:24:56 EDT 2008
Log message for revision 91683:
Long events miss the last day of each month in the calendar, thanks to silviot
Changed:
U Products.CMFCalendar/branches/2.1/Products/CMFCalendar/CHANGES.txt
U Products.CMFCalendar/branches/2.1/Products/CMFCalendar/CalendarTool.py
U Products.CMFCalendar/branches/2.1/Products/CMFCalendar/tests/test_Calendar.py
-=-
Modified: Products.CMFCalendar/branches/2.1/Products/CMFCalendar/CHANGES.txt
===================================================================
--- Products.CMFCalendar/branches/2.1/Products/CMFCalendar/CHANGES.txt 2008-10-03 00:04:58 UTC (rev 91682)
+++ Products.CMFCalendar/branches/2.1/Products/CMFCalendar/CHANGES.txt 2008-10-03 00:24:55 UTC (rev 91683)
@@ -4,6 +4,8 @@
2.1.3-beta (unreleased)
-----------------------
+- Fixed a bug were the last day of each month was missed.
+ (see https://dev.plone.org/plone/ticket/7238)
2.1.2 (2008-09-13)
------------------
Modified: Products.CMFCalendar/branches/2.1/Products/CMFCalendar/CalendarTool.py
===================================================================
--- Products.CMFCalendar/branches/2.1/Products/CMFCalendar/CalendarTool.py 2008-10-03 00:04:58 UTC (rev 91682)
+++ Products.CMFCalendar/branches/2.1/Products/CMFCalendar/CalendarTool.py 2008-10-03 00:24:55 UTC (rev 91683)
@@ -209,16 +209,17 @@
includedevents.append(result.getRID())
event={}
# we need to deal with events that end next month
- if result.end.month() != month:
- # doesn't work for events that last ~12 months
- # fix it if it's a problem, otherwise ignore
+ if result.end.greaterThan(last_date):
eventEndDay = last_day
event['end'] = None
else:
eventEndDay = result.end.day()
- event['end'] = result.end.Time()
+ if result.end == result.end.earliestTime():
+ event['end'] = (result.end - 1).latestTime().Time()
+ else:
+ event['end'] = result.end.Time()
# and events that started last month
- if result.start.month() != month: # same as above (12 month thing)
+ if result.start.lessThan(first_date):
eventStartDay = 1
event['start'] = None
else:
@@ -242,14 +243,17 @@
'title': event['title']} )
eventDays[eventday]['event'] = 1
- if result.end == result.end.earliestTime():
+ if (result.end == result.end.earliestTime() and
+ event['end'] is not None):
+ # ends some day this month at midnight
last_day_data = eventDays[allEventDays[-2]]
last_days_event = last_day_data['eventslist'][-1]
last_days_event['end'] = (result.end-1).latestTime().Time()
else:
- eventDays[eventEndDay]['eventslist'].append(
- { 'end': result.end.Time()
- , 'start': None, 'title': event['title']} )
+ eventDays[eventEndDay]['eventslist'].append(
+ { 'end': event['end'],
+ 'start': None,
+ 'title': event['title']} )
eventDays[eventEndDay]['event'] = 1
else:
eventDays[eventStartDay]['eventslist'].append(event)
Modified: Products.CMFCalendar/branches/2.1/Products/CMFCalendar/tests/test_Calendar.py
===================================================================
--- Products.CMFCalendar/branches/2.1/Products/CMFCalendar/tests/test_Calendar.py 2008-10-03 00:04:58 UTC (rev 91682)
+++ Products.CMFCalendar/branches/2.1/Products/CMFCalendar/tests/test_Calendar.py 2008-10-03 00:24:55 UTC (rev 91683)
@@ -580,6 +580,40 @@
events = caltool.getEventsForThisDay(thisDay=DateTime('2002/5/31'))
self.assertEqual( len(events), 3 )
+ def test_veryLongEvent(self):
+ # Proper handling of events that last more than 1 year
+ # and end in the same month
+ site = self.app.site
+ site.invokeFactory('Event', id='long', title='A long event',
+ start_date='2007/10/12 00:00:00',
+ end_date='2008/10/12 00:00:00')
+ site.portal_workflow.doActionFor(site.long, 'publish')
+ expected = {'eventslist': [{'start': None, 'end': None,
+ 'title': 'A long event'}],
+ 'event': 1, 'day': 13}
+ events = site.portal_calendar.catalog_getevents(2007, 10)
+ self.assertEqual(events[13], expected)
+
+ def test_lastDayRenderingOfLongEvent(self):
+ # Bug in catalog_getevents doesn't include events
+ # that spawn over months in the last day of each month
+ site = self.app.site
+ site.invokeFactory('Event', id='long', title='A long event',
+ start_date='2007/10/12 23:50:00',
+ end_date='2008/03/20 00:00:00')
+
+ site.portal_workflow.doActionFor(site.long, 'publish')
+ expected = {'eventslist': [{'start': None, 'end': None,
+ 'title': 'A long event'}],
+ 'event': 1}
+ # some dates to try: (day,month,year)
+ dates = ( (30,10,2007), (31,10,2007), (29,11,2007), (30,11,2007),
+ (30,12,2007), (31,12,2007), (28,2,2008), (28,2,2008) )
+ for (day,month,year) in dates:
+ events = site.portal_calendar.catalog_getevents(year, month)
+ expected['day'] = day
+ self.assertEqual(events[day], expected)
+
def test_lastDayRendering(self):
# Bug in catalog_getevents included events starting at 00:00:00
# on the next day
More information about the Checkins
mailing list