add timetable

This commit is contained in:
bkfox 2016-07-22 13:09:58 +02:00
parent 3975c222c6
commit d20b5ccdda
3 changed files with 70 additions and 18 deletions

View File

@ -514,7 +514,7 @@ class EventPage(Publication):
#
# Indexes
# Lists
#
class BaseDateList(models.Model):
nav_days = models.SmallIntegerField(
@ -530,6 +530,16 @@ class BaseDateList(models.Model):
'of show days equally around the current date')
)
class Meta:
abstract = True
panels = [
MultiFieldPanel([
FieldPanel('nav_days'),
FieldPanel('nav_per_week'),
], heading=_('Navigation')),
]
@staticmethod
def str_to_date(date):
"""
@ -590,9 +600,6 @@ class BaseDateList(models.Model):
}
}
class Meta:
abstract = True
class ListPage(Page):
"""
@ -711,6 +718,8 @@ class LogsPage(BaseDateList,Page):
'0 means no limit')
)
class Meta:
verbose_name = _('Logs Page')
content_panels = [
FieldPanel('title'),
@ -718,8 +727,7 @@ class LogsPage(BaseDateList,Page):
FieldPanel('station'),
FieldPanel('max_days'),
], heading=_('Configuration')),
]
] + BaseDateList.panels
def as_item(cl, log):
"""
@ -740,6 +748,20 @@ class LogsPage(BaseDateList,Page):
)
def get_queryset(self, request, context):
logs = []
for date in context['nav_dates']['dates']:
items = self.station.get_on_air(date)
items = [ self.as_item(item) for item in items ]
logs.append((date, items))
return logs
def get_context(self, request, *args, **kwargs):
"""
note: context is updated using self.get_date_context
"""
context = super().get_context(request, *args, **kwargs)
# date navigation
if 'date' in request.GET:
date = request.GET.get('date')
date = self.str_to_date(date)
@ -753,20 +775,43 @@ class LogsPage(BaseDateList,Page):
date = tz.now().date()
context.update(self.get_date_context(date, date_max=tz.now().date()))
r = []
for date in context['nav_dates']['dates']:
logs = self.station.get_on_air(date)
logs = [ self.as_item(log) for log in logs ]
r.append((date, logs))
return r
def get_context(self, request, *args, **kwargs):
context = super().get_context(request, *args, **kwargs)
qs = self.get_queryset(request, context)
context['object_list'] = qs
# queryset
context['object_list'] = self.get_queryset(request, context)
return context
class TimetablePage(BaseDateList,Page):
class Meta:
verbose_name = _('Timetable')
content_panels = Page.content_panels + BaseDateList.panels
def get_queryset(self, request, context):
diffs = []
for date in context['nav_dates']['dates']:
items = programs.Diffusion.objects.get_at(date).order_by('start')
items = [ DiffusionPage.as_item(item) for item in items ]
diffs.append((date, items))
return diffs
def get_context(self, request, *args, **kwargs):
"""
note: context is updated using self.get_date_context
"""
context = super().get_context(request, *args, **kwargs)
# date navigation
if 'date' in request.GET:
date = request.GET.get('date')
date = self.str_to_date(date)
else:
date = tz.now().date()
context.update(self.get_date_context(date))
# queryset
context['object_list'] = self.get_queryset(request, context)
return context
#
# Menus and Sections
#

View File

@ -1,5 +1,5 @@
{% extends "cms/base_site.html" %}
{# generic page to display list of articles #}
{# display logs of what happened on air %}
{% block content %}
{% include "cms/snippets/date_list.html" %}

View File

@ -0,0 +1,7 @@
{% extends "cms/base_site.html" %}
{# display a timetable of planified diffusions by days #}
{% block content %}
{% include "cms/snippets/date_list.html" %}
{% endblock %}