replicate multiday events on each day (#1052)

This commit is contained in:
Frédéric Péters 2011-12-01 17:42:34 +01:00
parent 7a064d8301
commit a3120e3616
3 changed files with 36 additions and 1 deletions

View File

@ -50,6 +50,18 @@ class BaseEvent(Item):
return formatter.format(self.start)
shortdatetime = property(shortdatetime)
def longenddate(self):
# unfortunately this forces the locale
formatter = locales.getLocale('fr').dates.getFormatter('dateTime', 'medium')
formatter.setPattern(u'EEEE d MMMM yyyy')
return formatter.format(self.end)
shortdatetime = property(shortdatetime)
def multidays(self):
if not self.end:
return False
return (self.start.timetuple()[:3] != self.end.timetuple()[:3])
def start_month(self):
formatter = locales.getLocale('fr').dates.getFormatter('dateTime', 'medium')
formatter.setPattern(u'MMMM')

View File

@ -1,3 +1,5 @@
import datetime
from five import grok
from zope import schema
from zope.interface import implements
@ -119,6 +121,27 @@ class View(grok.View, utils.MonthlyView):
brains = self.get_events_from_catalog(last_date, first_date, sort_on='start')
return [x.getObject() for x in brains]
def getMonthEventsWithRepetition(self):
events = self.getMonthEvents()
for event in events[:]:
if not event.multidays():
continue
repeated = event.end.toordinal()-event.start.toordinal()
for i in range(repeated):
# duplicate event with minimal infos
new_event = event.__class__()
new_event.id = event.id
new_event.title = event.title
new_event.place = event.place
new_event.description = event.description
new_event.start = event.start+datetime.timedelta(i+1)
new_event.end = event.end
# it's kind of ugly but this is definitely the easiest way to
# get the item pointing to the right URL
new_event.absolute_url = event.absolute_url()
events.append(new_event)
events.sort(lambda x,y: cmp(x.start, y.start))
return events
class List(View):
grok.context(IAgendaFolder)

View File

@ -203,7 +203,7 @@ jq('#tabellio-agenda tbody a').click(
</div>
<ul id="events-ul-list" tal:condition="view/as_list">
<li tal:repeat="event view/getMonthEvents"
<li tal:repeat="event view/getMonthEventsWithRepetition"
tal:attributes="id string:event-${event/id};
class event/klass">
<div tal:attributes="id string:d${event/start/year}-${event/start/month}-${event/start/day}">