bornhack-website/program/views.py

112 lines
4.1 KiB
Python
Raw Normal View History

2016-07-13 20:37:20 +00:00
from collections import OrderedDict
import datetime
2016-08-07 13:49:30 +00:00
from django.views.generic import ListView, TemplateView, DetailView
2016-12-28 23:15:13 +00:00
from camps.mixins import CampViewMixin
2016-07-13 20:37:20 +00:00
from . import models
from django.http import Http404
import datetime
from django.conf import settings
2016-07-13 20:37:20 +00:00
2016-08-08 17:45:32 +00:00
class SpeakerDetailView(CampViewMixin, DetailView):
2016-08-08 17:45:32 +00:00
model = models.Speaker
template_name = 'speaker_detail.html'
class SpeakerListView(CampViewMixin, ListView):
2016-08-08 17:36:13 +00:00
model = models.Speaker
template_name = 'speaker_list.html'
2017-01-23 17:57:30 +00:00
def get_queryset(self, *args, **kwargs):
return models.Speaker.objects.filter(camp=self.camp)
class EventListView(CampViewMixin, ListView):
2016-08-08 17:36:13 +00:00
model = models.Event
template_name = 'event_list.html'
2016-07-13 20:37:20 +00:00
class ProgramOverviewView(CampViewMixin, ListView):
2016-07-13 20:37:20 +00:00
model = models.Event
template_name = 'program_overview.html'
2016-07-13 20:37:20 +00:00
2017-01-23 17:57:30 +00:00
def dispatch(self, *args, **kwargs):
""" If an event type has been supplied check if it is valid """
if 'type' in self.request.GET:
try:
eventtype = models.EventType.objects.get(
slug=self.request.GET['type']
)
except models.EventType.DoesNotExist:
raise Http404
return super(ProgramOverviewView, self).dispatch(*args, **kwargs)
def get_context_data(self, *args, **kwargs):
context = super(ProgramOverviewView, self).get_context_data(**kwargs)
if 'type' in self.request.GET:
context['eventtype'] = models.EventType.objects.get(slug=self.request.GET['type'])
return context
class ProgramDayView(CampViewMixin, TemplateView):
template_name = 'program_day.html'
def dispatch(self, *args, **kwargs):
""" If an event type has been supplied check if it is valid """
if 'type' in self.request.GET:
try:
2017-01-23 17:57:30 +00:00
eventtype = models.EventType.objects.get(
slug=self.request.GET['type']
)
2017-01-23 17:57:30 +00:00
except models.EventType.DoesNotExist:
raise Http404
return super(ProgramDayView, self).dispatch(*args, **kwargs)
def get_context_data(self, *args, **kwargs):
context = super(ProgramDayView, self).get_context_data(**kwargs)
when = datetime.datetime(year=int(self.kwargs['year']), month=int(self.kwargs['month']), day=int(self.kwargs['day']))
eventinstances = models.EventInstance.objects.filter(event__in=self.camp.events.all())
skip = []
for ei in eventinstances:
if ei.schedule_date != when.date():
skip.append(ei.id)
else:
if 'type' in self.request.GET:
2017-01-23 17:57:30 +00:00
eventtype = models.EventType.objects.get(
slug=self.request.GET['type']
)
if ei.event.event_type != eventtype:
skip.append(ei.id)
context['eventinstances'] = eventinstances.exclude(id__in=skip).order_by('event__event_type')
start = when + datetime.timedelta(hours=settings.SCHEDULE_MIDNIGHT_OFFSET_HOURS)
timeslots = []
# calculate how many timeslots we have in the schedule based on the lenght of the timeslots in minutes,
# and the number of minutes in 24 hours
for i in range(0,(24*60)/settings.SCHEDULE_TIMESLOT_LENGTH_MINUTES):
timeslot = start + datetime.timedelta(minutes=i*settings.SCHEDULE_TIMESLOT_LENGTH_MINUTES)
timeslots.append(timeslot)
context['timeslots'] = timeslots
2017-01-23 22:58:41 +00:00
# include the components to make the urls
context['urlyear'] = self.kwargs['year']
context['urlmonth'] = self.kwargs['month']
context['urlday'] = self.kwargs['day']
if 'type' in self.request.GET:
context['eventtype'] = models.EventType.objects.get(slug=self.request.GET['type'])
return context
2016-08-07 13:49:30 +00:00
2017-01-23 22:58:41 +00:00
class EventDetailView(CampViewMixin, DetailView):
2016-08-07 13:49:30 +00:00
model = models.Event
template_name = 'program_event_detail.html'
class CallForSpeakersView(CampViewMixin, TemplateView):
def get_template_names(self):
2017-01-24 15:42:57 +00:00
return 'call_for_speakers_%s.html' % self.camp.slug