replicate multiday events on each day (#1052)
This commit is contained in:
parent
7a064d8301
commit
a3120e3616
|
@ -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')
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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}">
|
||||
|
|
Reference in New Issue