forked from rc/aircox
work on logs, timetable, stats
This commit is contained in:
@ -2,15 +2,16 @@ from collections import OrderedDict
|
||||
import datetime
|
||||
|
||||
from django.views.generic import ListView
|
||||
from django.utils.translation import ugettext as _
|
||||
|
||||
from ..converters import WeekConverter
|
||||
from ..models import Diffusion, Episode, Program, Sound
|
||||
from .base import BaseView
|
||||
from .program import ProgramPageDetailView
|
||||
from .page import ParentMixin, PageListView
|
||||
from .page import PageListView
|
||||
from .mixins import GetDateMixin, ParentMixin
|
||||
|
||||
|
||||
__all__ = ['EpisodeDetailView', 'EpisodeListView', 'TimetableView']
|
||||
__all__ = ['EpisodeDetailView', 'EpisodeListView', 'DiffusionListView']
|
||||
|
||||
|
||||
class EpisodeDetailView(ProgramPageDetailView):
|
||||
@ -32,7 +33,6 @@ class EpisodeDetailView(ProgramPageDetailView):
|
||||
|
||||
class EpisodeListView(ParentMixin, PageListView):
|
||||
model = Episode
|
||||
template_name = 'aircox/diffusion_list.html'
|
||||
item_template_name = 'aircox/episode_item.html'
|
||||
show_headline = True
|
||||
|
||||
@ -40,44 +40,35 @@ class EpisodeListView(ParentMixin, PageListView):
|
||||
fk_parent = 'program'
|
||||
|
||||
|
||||
class TimetableView(BaseView, ListView):
|
||||
class DiffusionListView(GetDateMixin, BaseView, ListView):
|
||||
""" View for timetables """
|
||||
template_name_suffix = '_timetable'
|
||||
model = Diffusion
|
||||
# ordering = ('start',)
|
||||
|
||||
date = None
|
||||
start = None
|
||||
end = None
|
||||
|
||||
def get_date(self):
|
||||
date = super().get_date()
|
||||
return date if date is not None else datetime.date.today()
|
||||
|
||||
def get_queryset(self):
|
||||
self.date = self.kwargs.get('date') or datetime.date.today()
|
||||
self.start = self.date - datetime.timedelta(days=self.date.weekday())
|
||||
self.end = self.start + datetime.timedelta(days=7)
|
||||
return super().get_queryset().range(self.start, self.end) \
|
||||
.order_by('start')
|
||||
return super().get_queryset().today(self.date).order_by('start')
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
# regoup by dates
|
||||
by_date = OrderedDict()
|
||||
date = self.start
|
||||
while date < self.end:
|
||||
by_date[date] = []
|
||||
date += datetime.timedelta(days=1)
|
||||
|
||||
for diffusion in self.object_list:
|
||||
if diffusion.date not in by_date:
|
||||
continue
|
||||
by_date[diffusion.date].append(diffusion)
|
||||
|
||||
return super().get_context_data(
|
||||
by_date=by_date,
|
||||
date=self.date,
|
||||
start=self.start,
|
||||
end=self.end - datetime.timedelta(days=1),
|
||||
prev_date=self.start - datetime.timedelta(days=1),
|
||||
next_date=self.end + datetime.timedelta(days=1),
|
||||
**kwargs
|
||||
)
|
||||
|
||||
today = datetime.date.today()
|
||||
start = self.date - datetime.timedelta(days=self.date.weekday())
|
||||
dates = [
|
||||
(today, None),
|
||||
(today - datetime.timedelta(days=1), None),
|
||||
(today + datetime.timedelta(days=1), None),
|
||||
(today - datetime.timedelta(days=7), _('next week')),
|
||||
(today + datetime.timedelta(days=7), _('last week')),
|
||||
(None, None)
|
||||
] + [
|
||||
(date, date.strftime('%A %d'))
|
||||
for date in (start + datetime.timedelta(days=i)
|
||||
for i in range(0, 7)) if date != today
|
||||
]
|
||||
return super().get_context_data(date=self.date, dates=dates, **kwargs)
|
||||
|
||||
|
Reference in New Issue
Block a user