2016-07-13 20:37:20 +00:00
|
|
|
from collections import OrderedDict
|
2016-08-04 21:03:39 +00:00
|
|
|
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
|
2017-01-22 11:59:57 +00:00
|
|
|
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
|
|
|
|
2016-12-25 14:52:55 +00:00
|
|
|
class SpeakerDetailView(CampViewMixin, DetailView):
|
2016-08-08 17:45:32 +00:00
|
|
|
model = models.Speaker
|
|
|
|
template_name = 'speaker_detail.html'
|
|
|
|
|
2016-12-25 14:52:55 +00:00
|
|
|
|
|
|
|
class SpeakerListView(CampViewMixin, ListView):
|
2016-08-08 17:36:13 +00:00
|
|
|
model = models.Speaker
|
|
|
|
template_name = 'speaker_list.html'
|
|
|
|
|
2016-12-25 14:52:55 +00:00
|
|
|
|
|
|
|
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
|
|
|
|
2016-12-25 14:52:55 +00:00
|
|
|
|
|
|
|
class ProgramOverviewView(CampViewMixin, ListView):
|
2016-07-13 20:37:20 +00:00
|
|
|
model = models.Event
|
2016-08-04 21:03:39 +00:00
|
|
|
template_name = 'program_overview.html'
|
2016-07-13 20:37:20 +00:00
|
|
|
|
2016-08-04 21:03:39 +00:00
|
|
|
|
2016-12-25 14:52:55 +00:00
|
|
|
class ProgramDayView(CampViewMixin, TemplateView):
|
2016-08-04 21:03:39 +00:00
|
|
|
template_name = 'program_day.html'
|
2017-01-22 11:59:57 +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 = EventType.objects.get(
|
|
|
|
slug=self.request.GET['type']
|
|
|
|
)
|
|
|
|
except 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():
|
|
|
|
print "skipping ei %s (wrong date %s vs %s)" % (ei, ei.schedule_date, when.date())
|
|
|
|
skip.append(ei.id)
|
|
|
|
else:
|
|
|
|
if 'type' in self.request.GET:
|
|
|
|
eventtype = EventType.objects.get(
|
|
|
|
slug=self.request.GET['type']
|
|
|
|
)
|
|
|
|
if ei.event.event_type != eventtype:
|
|
|
|
print "skipping ei %s (wrong type)" % ei
|
|
|
|
skip.append(ei.id)
|
|
|
|
print "skipping %s" % skip
|
|
|
|
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
|
|
|
|
|
|
|
|
return context
|
2016-08-04 21:03:39 +00:00
|
|
|
|
2016-08-07 13:49:30 +00:00
|
|
|
|
2016-12-25 14:52:55 +00:00
|
|
|
class EventDetailView(CampViewMixin, DetailView):
|
2016-08-07 13:49:30 +00:00
|
|
|
model = models.Event
|
|
|
|
template_name = 'program_event_detail.html'
|
|
|
|
|
2016-12-25 14:52:55 +00:00
|
|
|
|
2017-01-22 11:59:57 +00:00
|
|
|
class CallForSpeakersView(CampViewMixin, TemplateView):
|
|
|
|
def get_template_names(self):
|
|
|
|
return 'call_for_speakers_%s.html' % self.get_object().slug
|
|
|
|
|
|
|
|
|