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): class BaseDateList(models.Model):
nav_days = models.SmallIntegerField( nav_days = models.SmallIntegerField(
@ -530,6 +530,16 @@ class BaseDateList(models.Model):
'of show days equally around the current date') 'of show days equally around the current date')
) )
class Meta:
abstract = True
panels = [
MultiFieldPanel([
FieldPanel('nav_days'),
FieldPanel('nav_per_week'),
], heading=_('Navigation')),
]
@staticmethod @staticmethod
def str_to_date(date): def str_to_date(date):
""" """
@ -590,9 +600,6 @@ class BaseDateList(models.Model):
} }
} }
class Meta:
abstract = True
class ListPage(Page): class ListPage(Page):
""" """
@ -711,6 +718,8 @@ class LogsPage(BaseDateList,Page):
'0 means no limit') '0 means no limit')
) )
class Meta:
verbose_name = _('Logs Page')
content_panels = [ content_panels = [
FieldPanel('title'), FieldPanel('title'),
@ -718,8 +727,7 @@ class LogsPage(BaseDateList,Page):
FieldPanel('station'), FieldPanel('station'),
FieldPanel('max_days'), FieldPanel('max_days'),
], heading=_('Configuration')), ], heading=_('Configuration')),
] ] + BaseDateList.panels
def as_item(cl, log): def as_item(cl, log):
""" """
@ -740,6 +748,20 @@ class LogsPage(BaseDateList,Page):
) )
def get_queryset(self, request, context): 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: if 'date' in request.GET:
date = request.GET.get('date') date = request.GET.get('date')
date = self.str_to_date(date) date = self.str_to_date(date)
@ -753,20 +775,43 @@ class LogsPage(BaseDateList,Page):
date = tz.now().date() date = tz.now().date()
context.update(self.get_date_context(date, date_max=tz.now().date())) context.update(self.get_date_context(date, date_max=tz.now().date()))
r = [] # queryset
for date in context['nav_dates']['dates']: context['object_list'] = self.get_queryset(request, context)
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
return 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 # Menus and Sections
# #

View File

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