add EventLocation model, restructure schedule filtering navigation
This commit is contained in:
parent
fa8426441b
commit
752a3f7e38
|
@ -1,7 +1,7 @@
|
||||||
import datetime
|
import datetime
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from utils.models import UUIDModel, CreatedUpdatedModel
|
from utils.models import UUIDModel, CreatedUpdatedModel
|
||||||
from program.models import EventType
|
from program.models import EventType, EventLocation
|
||||||
from django.contrib.postgres.fields import DateTimeRangeField
|
from django.contrib.postgres.fields import DateTimeRangeField
|
||||||
from psycopg2.extras import DateTimeTZRange
|
from psycopg2.extras import DateTimeTZRange
|
||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
|
@ -72,6 +72,11 @@ class Camp(CreatedUpdatedModel, UUIDModel):
|
||||||
# return all event types with at least one event in this camp
|
# return all event types with at least one event in this camp
|
||||||
return EventType.objects.filter(event__instances__isnull=False, event__camp=self).distinct()
|
return EventType.objects.filter(event__instances__isnull=False, event__camp=self).distinct()
|
||||||
|
|
||||||
|
@property
|
||||||
|
def event_locations(self):
|
||||||
|
''' Return all event locations with at least one event in this camp'''
|
||||||
|
return EventLocation.objects.filter(eventinstances__isnull=False, camp=self).distinct()
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def logo_small(self):
|
def logo_small(self):
|
||||||
return 'img/%(slug)s/logo/%(slug)s-logo-small.png' % {'slug': self.slug}
|
return 'img/%(slug)s/logo/%(slug)s-logo-small.png' % {'slug': self.slug}
|
||||||
|
|
37
src/program/migrations/0019_auto_20170205_1940.py
Normal file
37
src/program/migrations/0019_auto_20170205_1940.py
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Generated by Django 1.10.5 on 2017-02-05 18:40
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('camps', '0019_auto_20170131_1849'),
|
||||||
|
('program', '0018_eventtype_notifications'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='EventLocation',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('created', models.DateTimeField(auto_now_add=True)),
|
||||||
|
('updated', models.DateTimeField(auto_now=True)),
|
||||||
|
('name', models.CharField(max_length=100, unique=True)),
|
||||||
|
('slug', models.SlugField()),
|
||||||
|
('icon', models.URLField()),
|
||||||
|
('camp', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='eventlocations', to='camps.Camp')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'abstract': False,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='eventinstance',
|
||||||
|
name='location',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='eventinstances', to='program.EventLocation'),
|
||||||
|
),
|
||||||
|
]
|
21
src/program/migrations/0020_auto_20170205_1940.py
Normal file
21
src/program/migrations/0020_auto_20170205_1940.py
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Generated by Django 1.10.5 on 2017-02-05 18:40
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('program', '0019_auto_20170205_1940'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='eventinstance',
|
||||||
|
name='location',
|
||||||
|
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='eventinstances', to='program.EventLocation'),
|
||||||
|
),
|
||||||
|
]
|
30
src/program/migrations/0021_auto_20170205_2130.py
Normal file
30
src/program/migrations/0021_auto_20170205_2130.py
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Generated by Django 1.10.5 on 2017-02-05 20:30
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('camps', '0019_auto_20170131_1849'),
|
||||||
|
('program', '0020_auto_20170205_1940'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='eventlocation',
|
||||||
|
name='icon',
|
||||||
|
field=models.CharField(max_length=100),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='eventlocation',
|
||||||
|
name='name',
|
||||||
|
field=models.CharField(max_length=100),
|
||||||
|
),
|
||||||
|
migrations.AlterUniqueTogether(
|
||||||
|
name='eventlocation',
|
||||||
|
unique_together=set([('camp', 'slug'), ('camp', 'name')]),
|
||||||
|
),
|
||||||
|
]
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
from django.contrib.postgres.fields import DateTimeRangeField
|
from django.contrib.postgres.fields import DateTimeRangeField
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.utils.text import slugify
|
from django.utils.text import slugify
|
||||||
|
@ -8,6 +7,20 @@ from django.core.exceptions import ValidationError
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
|
|
||||||
|
|
||||||
|
class EventLocation(CreatedUpdatedModel):
|
||||||
|
""" The places where stuff happens """
|
||||||
|
name = models.CharField(max_length=100)
|
||||||
|
slug = models.SlugField()
|
||||||
|
icon = models.CharField(max_length=100)
|
||||||
|
camp = models.ForeignKey('camps.Camp', null=True, related_name="eventlocations")
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return self.name
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
unique_together = (('camp', 'slug'), ('camp', 'name'))
|
||||||
|
|
||||||
|
|
||||||
class EventType(CreatedUpdatedModel):
|
class EventType(CreatedUpdatedModel):
|
||||||
""" Every event needs to have a type. """
|
""" Every event needs to have a type. """
|
||||||
name = models.CharField(max_length=100, unique=True)
|
name = models.CharField(max_length=100, unique=True)
|
||||||
|
@ -52,6 +65,7 @@ class EventInstance(CreatedUpdatedModel):
|
||||||
event = models.ForeignKey('program.event', related_name='instances')
|
event = models.ForeignKey('program.event', related_name='instances')
|
||||||
when = DateTimeRangeField()
|
when = DateTimeRangeField()
|
||||||
notifications_sent = models.BooleanField(default=False)
|
notifications_sent = models.BooleanField(default=False)
|
||||||
|
location = models.ForeignKey('program.EventLocation', related_name='eventinstances')
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
ordering = ['when']
|
ordering = ['when']
|
||||||
|
@ -61,14 +75,8 @@ class EventInstance(CreatedUpdatedModel):
|
||||||
|
|
||||||
def __clean__(self):
|
def __clean__(self):
|
||||||
errors = []
|
errors = []
|
||||||
if self.when.lower > self.when.upper:
|
if self.location.camp != self.event.camp:
|
||||||
errors.append(ValidationError({'when', "Start should be earlier than finish"}))
|
errors.append(ValidationError({'location', "Error: This location belongs to a different camp"}))
|
||||||
|
|
||||||
if self.when.lower.time().minute != 0 and self.when.lower.time().minute != 30:
|
|
||||||
errors.append(ValidationError({'when', "Start time minute should be 0 or 30."}))
|
|
||||||
|
|
||||||
if self.when.upper.time().minute != 0 and self.when.upper.time().minute != 30:
|
|
||||||
errors.append(ValidationError({'when', "End time minute should be 0 or 30."}))
|
|
||||||
|
|
||||||
if errors:
|
if errors:
|
||||||
raise ValidationError(errors)
|
raise ValidationError(errors)
|
||||||
|
@ -79,7 +87,8 @@ class EventInstance(CreatedUpdatedModel):
|
||||||
Returns the schedule date of this eventinstance. Schedule date is determined by substracting
|
Returns the schedule date of this eventinstance. Schedule date is determined by substracting
|
||||||
settings.SCHEDULE_MIDNIGHT_OFFSET_HOURS from the eventinstance start time. This means that if
|
settings.SCHEDULE_MIDNIGHT_OFFSET_HOURS from the eventinstance start time. This means that if
|
||||||
an event is scheduled for 00:30 wednesday evening (technically thursday) then the date
|
an event is scheduled for 00:30 wednesday evening (technically thursday) then the date
|
||||||
after substracting 5 hours would be wednesdays date, not thursdays.
|
after substracting 5 hours would be wednesdays date, not thursdays
|
||||||
|
(given settings.SCHEDULE_MIDNIGHT_OFFSET_HOURS=5)
|
||||||
"""
|
"""
|
||||||
return (self.when.lower-timedelta(hours=settings.SCHEDULE_MIDNIGHT_OFFSET_HOURS)).date()
|
return (self.when.lower-timedelta(hours=settings.SCHEDULE_MIDNIGHT_OFFSET_HOURS)).date()
|
||||||
|
|
||||||
|
|
|
@ -1,48 +1,70 @@
|
||||||
{% extends 'schedule_base.html' %}
|
{% extends 'schedule_base.html' %}
|
||||||
|
{% load dateutils %}
|
||||||
|
|
||||||
{% block schedule_content %}
|
{% block schedule_content %}
|
||||||
<div class="row">
|
<div class="btn-group">
|
||||||
<div class="btn-group btn-group-justified">
|
<button type="button" class="btn btn-default btn-lg dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||||
<a href="{% url 'schedule_index' camp_slug=camp.slug %}{% if eventtype %}?type={{ eventtype.slug }}{% endif %}" class="btn {% if urlyear %}btn-default{% else %}btn-primary{% endif %}">Overview</a>
|
Day: {% if urlyear %}{% get_weekday urlyear urlmonth urlday %}{% else %}All{% endif %} <span class="caret"></span>
|
||||||
|
</button>
|
||||||
|
<ul class="dropdown-menu list-group">
|
||||||
|
<a href="{% url 'schedule_index' camp_slug=camp.slug %}{% if location and eventtype %}?location={{ location.slug }}&type={{ eventtype.slug }}{% elif location and not eventtype %}?location={{ location.slug }}{% elif eventtype and not location %}?type={{ eventtype.slug }}{% endif %}" class="list-group-item{% if not urlyear %} active{% endif %}">
|
||||||
|
All
|
||||||
|
</a>
|
||||||
{% for day in camp.camp_days %}
|
{% for day in camp.camp_days %}
|
||||||
{% with day.lower.date|date:"m" as month_padded %}
|
{% with month_padded=day.lower.date|date:"m" day_padded=day.lower.date|date:"d" %}
|
||||||
{% with day.lower.date|date:"d" as day_padded %}
|
{% url 'schedule_day' camp_slug=camp.slug year=day.lower.date.year month=month_padded day=day_padded as baseurl %}
|
||||||
<a href="{% url 'schedule_day' camp_slug=camp.slug year=day.lower.date.year month=month_padded day=day_padded %}{% if eventtype %}?type={{ eventtype.slug }}{% endif %}" class="btn btn-sm {% if urlyear and urlyear|add:"0" == day.lower.date.year and urlmonth == month_padded and urlday == day_padded %}btn-primary{% else %}btn-default{% endif %}">
|
<a href="{{ baseurl }}{% if location and eventtype %}?location={{ location.slug }}&type={{ eventtype.slug }}{% elif location and not eventtype %}?location={{ location.slug }}{% elif eventtype and not location %}?type={{ eventtype.slug }}{% endif %}" class="list-group-item{% if urlyear and urlyear|add:"0" == day.lower.date.year and urlmonth == month_padded and urlday == day_padded %} active{% endif %}">
|
||||||
{{ day.lower.date|date:"l" }}
|
{{ day.lower.date|date:"l" }}
|
||||||
</a>
|
</a>
|
||||||
{% endwith %}
|
{% endwith %}
|
||||||
{% endwith %}
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p>
|
<div class="btn-group">
|
||||||
|
<button type="button" class="btn btn-default btn-lg dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||||
<div class="row">
|
Type: {% if eventtype %}<span style="color: {{ eventtype.color }};" class="glyphicon glyphicon-filter" aria-hidden="true"></span> {% endif %}{% if eventtype %}{{ eventtype.name }}{% else %}All{% endif %} <span class="caret"></span>
|
||||||
<div class="btn-group btn-group-justified">
|
</button>
|
||||||
|
<ul class="dropdown-menu list-group">
|
||||||
{% if not urlyear %}
|
{% if not urlyear %}
|
||||||
<a href="{% url 'schedule_index' camp_slug=camp.slug %}" style="background-color: black; border: 0; color: white;" class="btn">
|
{% url 'schedule_index' camp_slug=camp.slug as baseurl %}
|
||||||
{% if eventtype %}All{% else %}<b>All</b>{% endif %}
|
|
||||||
</a>
|
|
||||||
{% else %}
|
{% else %}
|
||||||
<a href="{% url 'schedule_day' camp_slug=camp.slug year=urlyear month=urlmonth day=urlday %}" style="background-color: black; border: 0; color: white;" class="btn">
|
{% url 'schedule_day' camp_slug=camp.slug year=urlyear month=urlmonth day=urlday as baseurl %}
|
||||||
{% if eventtype %}All{% else %}<b>All</b>{% endif %}
|
|
||||||
</a>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
<a href="{{ baseurl }}{% if location %}?location={{ location.slug }}{% endif %}" class="list-group-item{% if not eventtype %} active{% endif %}">
|
||||||
|
<span style="color: {{ event_type.color }}" class="glyphicon glyphicon-filter" aria-hidden="true"></span> All
|
||||||
|
</a>
|
||||||
{% for event_type in camp.event_types %}
|
{% for event_type in camp.event_types %}
|
||||||
{% if not urlyear %}
|
{% if not urlyear %}
|
||||||
<a href="{% url 'schedule_index' camp_slug=camp.slug %}?type={{ event_type.slug }}" style="background-color: {{ event_type.color }}; border: 0; color: {% if event_type.light_text %}white{% else %}black{% endif %};" class="btn">
|
{% url 'schedule_index' camp_slug=camp.slug as baseurl %}
|
||||||
{% if eventtype and eventtype == event_type %}<b>{{ event_type.name }}</b>{% else %}{{ event_type.name }}{% endif %}
|
|
||||||
</a>
|
|
||||||
{% else %}
|
{% else %}
|
||||||
<a href="{% url 'schedule_day' camp_slug=camp.slug year=urlyear month=urlmonth day=urlday %}?type={{ event_type.slug }}" style="background-color: {{ event_type.color }}; border: 0; color: {% if event_type.light_text %}white{% else %}black{% endif %};" class="btn">
|
{% url 'schedule_day' camp_slug=camp.slug year=urlyear month=urlmonth day=urlday as baseurl %}
|
||||||
{% if eventtype and eventtype == event_type %}<b>{{ event_type.name }}</b>{% else %}{{ event_type.name }}{% endif %}
|
{% endif %}
|
||||||
|
<a href="{{ baseurl }}?type={{ event_type.slug }}{% if location %}&location={{ location.slug }}{% endif %}" class="list-group-item{% if eventtype and eventtype == event_type %} active{% endif %}">
|
||||||
|
<span style="color: {{ event_type.color }}" class="glyphicon glyphicon-filter" aria-hidden="true"></span> {{ event_type.name }}
|
||||||
</a>
|
</a>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="btn-group">
|
||||||
|
<button type="button" class="btn btn-default btn-lg dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||||
|
Location: {% if location %}{{ location.name }}{% else %}All{% endif %} <span class="caret"></span>
|
||||||
|
</button>
|
||||||
|
<ul class="dropdown-menu list-group">
|
||||||
|
{% if not urlyear %}
|
||||||
|
<a href="{% url 'schedule_index' camp_slug=camp.slug %}{% if eventtype %}?type={{ eventtype.slug }}{% endif %}" class="list-group-item{% if not location %} active{% endif %}">All</a>
|
||||||
|
{% else %}
|
||||||
|
<a href="{% url 'schedule_day' camp_slug=camp.slug year=urlyear month=urlmonth day=urlday %}{% if eventtype %}?type={{ eventtype.slug }}{% endif %}" class="list-group-item{% if not location %} active{% endif %}">All</a>
|
||||||
|
{% endif %}
|
||||||
|
{% for loc in camp.event_locations %}
|
||||||
|
{% if not urlyear %}
|
||||||
|
<a href="{% url 'schedule_index' camp_slug=camp.slug %}?location={{ loc.slug }}{% if eventtype %}&type={{ eventtype.slug }}{% endif %}" class="list-group-item{% if location and location == loc%} active{% endif %}">{{ loc.name }}</a>
|
||||||
|
{% else %}
|
||||||
|
<a href="{% url 'schedule_day' camp_slug=camp.slug year=urlyear month=urlmonth day=urlday %}?location={{ loc.slug }}{% if eventtype %}&type={{ eventtype.slug }}{% endif %}" class="list-group-item{% if location and location == loc%} active{% endif %}">{{ loc.name }}</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<hr />
|
<hr />
|
||||||
|
|
|
@ -4,22 +4,17 @@
|
||||||
{% for day in camp.camp_days %}
|
{% for day in camp.camp_days %}
|
||||||
{{ day.lower.date|date:"D d/m" }} <br />
|
{{ day.lower.date|date:"D d/m" }} <br />
|
||||||
<div style="display: flex; flex-wrap: wrap;">
|
<div style="display: flex; flex-wrap: wrap;">
|
||||||
{% for event in camp.events.all %}
|
{% for eventinstance in eventinstances %}
|
||||||
{% for eventinstance in event.instances.all %}
|
|
||||||
{% if eventinstance.schedule_date == day.lower.date %}
|
{% if eventinstance.schedule_date == day.lower.date %}
|
||||||
{% if not eventtype or eventtype == eventinstance.event.event_type %}
|
|
||||||
<a class="event"
|
<a class="event"
|
||||||
href="{% url 'event_detail' camp_slug=camp.slug slug=eventinstance.event.slug %}"
|
href="{% url 'event_detail' camp_slug=camp.slug slug=eventinstance.event.slug %}"
|
||||||
style="background-color: {{ eventinstance.event.event_type.color }}; border: 0; color: {% if eveninstance.event.event_type.light_text %}white{% else %}black{% endif %};">
|
style="background-color: {{ eventinstance.event.event_type.color }}; border: 0; color: {% if eveninstance.event.event_type.light_text %}white{% else %}black{% endif %};">
|
||||||
<small>{{ eventinstance.when.lower|date:"H:i" }} - {{ eventinstance.when.upper|date:"H:i" }}</small>
|
<small>{{ eventinstance.when.lower|date:"H:i" }} - {{ eventinstance.when.upper|date:"H:i" }}</small>
|
||||||
<br />
|
<br />
|
||||||
{{ event.title }}
|
{{ eventinstance.event.title }}
|
||||||
<br />
|
<br />
|
||||||
{% if event.speakers.exists %}<i>by {{ event.speakers_list }}{% endif %}</i>
|
|
||||||
</a>
|
</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
|
||||||
{% endfor %}
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
<hr />
|
<hr />
|
||||||
|
|
|
@ -30,8 +30,7 @@ class ProgramOverviewView(CampViewMixin, ListView):
|
||||||
model = models.Event
|
model = models.Event
|
||||||
template_name = 'program_overview.html'
|
template_name = 'program_overview.html'
|
||||||
|
|
||||||
def dispatch(self, *args, **kwargs):
|
def get_context_data(self, *args, **kwargs):
|
||||||
""" If an event type has been supplied check if it is valid """
|
|
||||||
if 'type' in self.request.GET:
|
if 'type' in self.request.GET:
|
||||||
try:
|
try:
|
||||||
eventtype = models.EventType.objects.get(
|
eventtype = models.EventType.objects.get(
|
||||||
|
@ -39,12 +38,27 @@ class ProgramOverviewView(CampViewMixin, ListView):
|
||||||
)
|
)
|
||||||
except models.EventType.DoesNotExist:
|
except models.EventType.DoesNotExist:
|
||||||
raise Http404
|
raise Http404
|
||||||
return super(ProgramOverviewView, self).dispatch(*args, **kwargs)
|
|
||||||
|
|
||||||
def get_context_data(self, *args, **kwargs):
|
if 'location' in self.request.GET:
|
||||||
|
try:
|
||||||
|
eventlocation = models.EventLocation.objects.get(
|
||||||
|
slug=self.request.GET['location'],
|
||||||
|
camp=self.camp,
|
||||||
|
)
|
||||||
|
except models.EventLocation.DoesNotExist:
|
||||||
|
raise Http404
|
||||||
|
|
||||||
context = super(ProgramOverviewView, self).get_context_data(**kwargs)
|
context = super(ProgramOverviewView, self).get_context_data(**kwargs)
|
||||||
|
eventinstances = models.EventInstance.objects.filter(event__in=self.camp.events.all())
|
||||||
|
|
||||||
if 'type' in self.request.GET:
|
if 'type' in self.request.GET:
|
||||||
context['eventtype'] = models.EventType.objects.get(slug=self.request.GET['type'])
|
context['eventtype'] = eventtype
|
||||||
|
eventinstances = eventinstances.filter(event__event_type=eventtype)
|
||||||
|
|
||||||
|
if 'location' in self.request.GET:
|
||||||
|
context['location'] = eventlocation
|
||||||
|
eventinstances = eventinstances.filter(location=eventlocation)
|
||||||
|
context['eventinstances'] = eventinstances
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
|
||||||
|
@ -76,7 +90,15 @@ class ProgramDayView(CampViewMixin, TemplateView):
|
||||||
)
|
)
|
||||||
if ei.event.event_type != eventtype:
|
if ei.event.event_type != eventtype:
|
||||||
skip.append(ei.id)
|
skip.append(ei.id)
|
||||||
context['eventinstances'] = eventinstances.exclude(id__in=skip).order_by('event__event_type')
|
eventinstances = eventinstances.exclude(id__in=skip).order_by('event__event_type')
|
||||||
|
if 'location' in self.request.GET:
|
||||||
|
eventlocation = models.EventLocation.objects.get(
|
||||||
|
camp=self.camp,
|
||||||
|
slug=self.request.GET['location']
|
||||||
|
)
|
||||||
|
eventinstances = eventinstances.filter(location=eventlocation)
|
||||||
|
|
||||||
|
context['eventinstances'] = eventinstances
|
||||||
|
|
||||||
start = when + datetime.timedelta(hours=settings.SCHEDULE_MIDNIGHT_OFFSET_HOURS)
|
start = when + datetime.timedelta(hours=settings.SCHEDULE_MIDNIGHT_OFFSET_HOURS)
|
||||||
timeslots = []
|
timeslots = []
|
||||||
|
@ -94,6 +116,8 @@ class ProgramDayView(CampViewMixin, TemplateView):
|
||||||
|
|
||||||
if 'type' in self.request.GET:
|
if 'type' in self.request.GET:
|
||||||
context['eventtype'] = models.EventType.objects.get(slug=self.request.GET['type'])
|
context['eventtype'] = models.EventType.objects.get(slug=self.request.GET['type'])
|
||||||
|
if 'location' in self.request.GET:
|
||||||
|
context['location'] = models.EventLocation.objects.get(camp=self.camp, slug=self.request.GET['location'])
|
||||||
|
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ from news.models import NewsItem
|
||||||
from shop.models import ProductCategory, Product
|
from shop.models import ProductCategory, Product
|
||||||
from info.models import InfoCategory, InfoItem
|
from info.models import InfoCategory, InfoItem
|
||||||
from villages.models import Village
|
from villages.models import Village
|
||||||
from program.models import EventType, Event, EventInstance, Speaker
|
from program.models import EventType, Event, EventInstance, Speaker, EventLocation
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
|
|
||||||
|
|
||||||
|
@ -133,7 +133,7 @@ class Command(BaseCommand):
|
||||||
name='Slacking Off',
|
name='Slacking Off',
|
||||||
slug='slacking-off',
|
slug='slacking-off',
|
||||||
color='#0000ff',
|
color='#0000ff',
|
||||||
light_text=False
|
light_text=True
|
||||||
)
|
)
|
||||||
|
|
||||||
self.output("creating productcategories...")
|
self.output("creating productcategories...")
|
||||||
|
@ -154,6 +154,32 @@ class Command(BaseCommand):
|
||||||
for camp in [camp1, camp2, camp3]:
|
for camp in [camp1, camp2, camp3]:
|
||||||
year = camp.camp.lower.year
|
year = camp.camp.lower.year
|
||||||
|
|
||||||
|
self.output('Creating eventlocations for {}...'.format(year))
|
||||||
|
loc1 = EventLocation.objects.create(
|
||||||
|
name='Speakers Tent',
|
||||||
|
slug='speakers-tent',
|
||||||
|
icon='speakertent.png',
|
||||||
|
camp=camp
|
||||||
|
)
|
||||||
|
loc2 = EventLocation.objects.create(
|
||||||
|
name='Workshop rooms',
|
||||||
|
slug='workshop-rooms',
|
||||||
|
icon='workshop.png',
|
||||||
|
camp=camp
|
||||||
|
)
|
||||||
|
loc3 = EventLocation.objects.create(
|
||||||
|
name='Bar Area',
|
||||||
|
slug='bar-area',
|
||||||
|
icon='bararea.png',
|
||||||
|
camp=camp
|
||||||
|
)
|
||||||
|
loc4 = EventLocation.objects.create(
|
||||||
|
name='Food Area',
|
||||||
|
slug='food-area',
|
||||||
|
icon='foodarea.png',
|
||||||
|
camp=camp
|
||||||
|
)
|
||||||
|
|
||||||
self.output('Creating news for {}...'.format(year))
|
self.output('Creating news for {}...'.format(year))
|
||||||
NewsItem.objects.create(
|
NewsItem.objects.create(
|
||||||
title='Welcome to {}'.format(camp.title),
|
title='Welcome to {}'.format(camp.title),
|
||||||
|
@ -648,6 +674,7 @@ programming for a danish startup.
|
||||||
self.output("creating eventinstances for {}...".format(year))
|
self.output("creating eventinstances for {}...".format(year))
|
||||||
EventInstance.objects.create(
|
EventInstance.objects.create(
|
||||||
event=ev3,
|
event=ev3,
|
||||||
|
location=loc1,
|
||||||
when=(
|
when=(
|
||||||
timezone.datetime(year, 8, 27, 12, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 8, 27, 12, 0, tzinfo=timezone.utc),
|
||||||
timezone.datetime(year, 8, 27, 13, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 8, 27, 13, 0, tzinfo=timezone.utc),
|
||||||
|
@ -655,6 +682,7 @@ programming for a danish startup.
|
||||||
)
|
)
|
||||||
EventInstance.objects.create(
|
EventInstance.objects.create(
|
||||||
event=ev1,
|
event=ev1,
|
||||||
|
location=loc1,
|
||||||
when=(
|
when=(
|
||||||
timezone.datetime(year, 8, 28, 12, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 8, 28, 12, 0, tzinfo=timezone.utc),
|
||||||
timezone.datetime(year, 8, 28, 13, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 8, 28, 13, 0, tzinfo=timezone.utc),
|
||||||
|
@ -662,6 +690,7 @@ programming for a danish startup.
|
||||||
)
|
)
|
||||||
EventInstance.objects.create(
|
EventInstance.objects.create(
|
||||||
event=ev2,
|
event=ev2,
|
||||||
|
location=loc1,
|
||||||
when=(
|
when=(
|
||||||
timezone.datetime(year, 8, 29, 12, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 8, 29, 12, 0, tzinfo=timezone.utc),
|
||||||
timezone.datetime(year, 8, 29, 13, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 8, 29, 13, 0, tzinfo=timezone.utc),
|
||||||
|
@ -669,6 +698,7 @@ programming for a danish startup.
|
||||||
)
|
)
|
||||||
EventInstance.objects.create(
|
EventInstance.objects.create(
|
||||||
event=ev4,
|
event=ev4,
|
||||||
|
location=loc3,
|
||||||
when=(
|
when=(
|
||||||
timezone.datetime(year, 8, 27, 12, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 8, 27, 12, 0, tzinfo=timezone.utc),
|
||||||
timezone.datetime(year, 8, 28, 5, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 8, 28, 5, 0, tzinfo=timezone.utc),
|
||||||
|
@ -676,6 +706,7 @@ programming for a danish startup.
|
||||||
)
|
)
|
||||||
EventInstance.objects.create(
|
EventInstance.objects.create(
|
||||||
event=ev4,
|
event=ev4,
|
||||||
|
location=loc3,
|
||||||
when=(
|
when=(
|
||||||
timezone.datetime(year, 8, 28, 12, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 8, 28, 12, 0, tzinfo=timezone.utc),
|
||||||
timezone.datetime(year, 8, 29, 5, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 8, 29, 5, 0, tzinfo=timezone.utc),
|
||||||
|
@ -683,6 +714,7 @@ programming for a danish startup.
|
||||||
)
|
)
|
||||||
EventInstance.objects.create(
|
EventInstance.objects.create(
|
||||||
event=ev4,
|
event=ev4,
|
||||||
|
location=loc3,
|
||||||
when=(
|
when=(
|
||||||
timezone.datetime(year, 8, 29, 12, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 8, 29, 12, 0, tzinfo=timezone.utc),
|
||||||
timezone.datetime(year, 8, 30, 5, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 8, 30, 5, 0, tzinfo=timezone.utc),
|
||||||
|
@ -690,6 +722,7 @@ programming for a danish startup.
|
||||||
)
|
)
|
||||||
EventInstance.objects.create(
|
EventInstance.objects.create(
|
||||||
event=ev4,
|
event=ev4,
|
||||||
|
location=loc3,
|
||||||
when=(
|
when=(
|
||||||
timezone.datetime(year, 8, 30, 12, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 8, 30, 12, 0, tzinfo=timezone.utc),
|
||||||
timezone.datetime(year, 8, 31, 5, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 8, 31, 5, 0, tzinfo=timezone.utc),
|
||||||
|
@ -697,6 +730,7 @@ programming for a danish startup.
|
||||||
)
|
)
|
||||||
EventInstance.objects.create(
|
EventInstance.objects.create(
|
||||||
event=ev4,
|
event=ev4,
|
||||||
|
location=loc3,
|
||||||
when=(
|
when=(
|
||||||
timezone.datetime(year, 8, 31, 12, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 8, 31, 12, 0, tzinfo=timezone.utc),
|
||||||
timezone.datetime(year, 9, 1, 5, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 9, 1, 5, 0, tzinfo=timezone.utc),
|
||||||
|
@ -704,6 +738,7 @@ programming for a danish startup.
|
||||||
)
|
)
|
||||||
EventInstance.objects.create(
|
EventInstance.objects.create(
|
||||||
event=ev4,
|
event=ev4,
|
||||||
|
location=loc3,
|
||||||
when=(
|
when=(
|
||||||
timezone.datetime(year, 9, 1, 12, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 9, 1, 12, 0, tzinfo=timezone.utc),
|
||||||
timezone.datetime(year, 9, 2, 5, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 9, 2, 5, 0, tzinfo=timezone.utc),
|
||||||
|
@ -711,6 +746,7 @@ programming for a danish startup.
|
||||||
)
|
)
|
||||||
EventInstance.objects.create(
|
EventInstance.objects.create(
|
||||||
event=ev4,
|
event=ev4,
|
||||||
|
location=loc3,
|
||||||
when=(
|
when=(
|
||||||
timezone.datetime(year, 9, 2, 12, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 9, 2, 12, 0, tzinfo=timezone.utc),
|
||||||
timezone.datetime(year, 9, 3, 5, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 9, 3, 5, 0, tzinfo=timezone.utc),
|
||||||
|
@ -718,6 +754,7 @@ programming for a danish startup.
|
||||||
)
|
)
|
||||||
EventInstance.objects.create(
|
EventInstance.objects.create(
|
||||||
event=ev5,
|
event=ev5,
|
||||||
|
location=loc1,
|
||||||
when=(
|
when=(
|
||||||
timezone.datetime(year, 8, 28, 12, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 8, 28, 12, 0, tzinfo=timezone.utc),
|
||||||
timezone.datetime(year, 8, 28, 13, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 8, 28, 13, 0, tzinfo=timezone.utc),
|
||||||
|
@ -725,6 +762,7 @@ programming for a danish startup.
|
||||||
)
|
)
|
||||||
EventInstance.objects.create(
|
EventInstance.objects.create(
|
||||||
event=ev6,
|
event=ev6,
|
||||||
|
location=loc1,
|
||||||
when=(
|
when=(
|
||||||
timezone.datetime(year, 8, 29, 12, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 8, 29, 12, 0, tzinfo=timezone.utc),
|
||||||
timezone.datetime(year, 8, 29, 13, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 8, 29, 13, 0, tzinfo=timezone.utc),
|
||||||
|
@ -732,6 +770,7 @@ programming for a danish startup.
|
||||||
)
|
)
|
||||||
EventInstance.objects.create(
|
EventInstance.objects.create(
|
||||||
event=ev9,
|
event=ev9,
|
||||||
|
location=loc1,
|
||||||
when=(
|
when=(
|
||||||
timezone.datetime(year, 8, 30, 11, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 8, 30, 11, 0, tzinfo=timezone.utc),
|
||||||
timezone.datetime(year, 8, 30, 11, 30, tzinfo=timezone.utc),
|
timezone.datetime(year, 8, 30, 11, 30, tzinfo=timezone.utc),
|
||||||
|
@ -739,6 +778,7 @@ programming for a danish startup.
|
||||||
)
|
)
|
||||||
EventInstance.objects.create(
|
EventInstance.objects.create(
|
||||||
event=ev10,
|
event=ev10,
|
||||||
|
location=loc1,
|
||||||
when=(
|
when=(
|
||||||
timezone.datetime(year, 8, 30, 12, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 8, 30, 12, 0, tzinfo=timezone.utc),
|
||||||
timezone.datetime(year, 8, 30, 13, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 8, 30, 13, 0, tzinfo=timezone.utc),
|
||||||
|
@ -746,6 +786,7 @@ programming for a danish startup.
|
||||||
)
|
)
|
||||||
EventInstance.objects.create(
|
EventInstance.objects.create(
|
||||||
event=ev12,
|
event=ev12,
|
||||||
|
location=loc1,
|
||||||
when=(
|
when=(
|
||||||
timezone.datetime(year, 8, 30, 9, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 8, 30, 9, 0, tzinfo=timezone.utc),
|
||||||
timezone.datetime(year, 8, 30, 11, 30, tzinfo=timezone.utc),
|
timezone.datetime(year, 8, 30, 11, 30, tzinfo=timezone.utc),
|
||||||
|
@ -753,6 +794,7 @@ programming for a danish startup.
|
||||||
)
|
)
|
||||||
EventInstance.objects.create(
|
EventInstance.objects.create(
|
||||||
event=ev11,
|
event=ev11,
|
||||||
|
location=loc1,
|
||||||
when=(
|
when=(
|
||||||
timezone.datetime(year, 8, 31, 14, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 8, 31, 14, 0, tzinfo=timezone.utc),
|
||||||
timezone.datetime(year, 8, 31, 16, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 8, 31, 16, 0, tzinfo=timezone.utc),
|
||||||
|
@ -760,6 +802,7 @@ programming for a danish startup.
|
||||||
)
|
)
|
||||||
EventInstance.objects.create(
|
EventInstance.objects.create(
|
||||||
event=ev18,
|
event=ev18,
|
||||||
|
location=loc1,
|
||||||
when=(
|
when=(
|
||||||
timezone.datetime(year, 9, 2, 14, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 9, 2, 14, 0, tzinfo=timezone.utc),
|
||||||
timezone.datetime(year, 9, 2, 15, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 9, 2, 15, 0, tzinfo=timezone.utc),
|
||||||
|
@ -767,6 +810,7 @@ programming for a danish startup.
|
||||||
)
|
)
|
||||||
EventInstance.objects.create(
|
EventInstance.objects.create(
|
||||||
event=ev17,
|
event=ev17,
|
||||||
|
location=loc1,
|
||||||
when=(
|
when=(
|
||||||
timezone.datetime(year, 9, 2, 16, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 9, 2, 16, 0, tzinfo=timezone.utc),
|
||||||
timezone.datetime(year, 9, 2, 17, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 9, 2, 17, 0, tzinfo=timezone.utc),
|
||||||
|
@ -774,6 +818,7 @@ programming for a danish startup.
|
||||||
)
|
)
|
||||||
EventInstance.objects.create(
|
EventInstance.objects.create(
|
||||||
event=ev15,
|
event=ev15,
|
||||||
|
location=loc1,
|
||||||
when=(
|
when=(
|
||||||
timezone.datetime(year, 9, 1, 15, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 9, 1, 15, 0, tzinfo=timezone.utc),
|
||||||
timezone.datetime(year, 9, 1, 16, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 9, 1, 16, 0, tzinfo=timezone.utc),
|
||||||
|
@ -781,6 +826,7 @@ programming for a danish startup.
|
||||||
)
|
)
|
||||||
EventInstance.objects.create(
|
EventInstance.objects.create(
|
||||||
event=ev14,
|
event=ev14,
|
||||||
|
location=loc1,
|
||||||
when=(
|
when=(
|
||||||
timezone.datetime(year, 8, 31, 21, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 8, 31, 21, 0, tzinfo=timezone.utc),
|
||||||
timezone.datetime(year, 8, 31, 22, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 8, 31, 22, 0, tzinfo=timezone.utc),
|
||||||
|
@ -788,6 +834,7 @@ programming for a danish startup.
|
||||||
)
|
)
|
||||||
EventInstance.objects.create(
|
EventInstance.objects.create(
|
||||||
event=ev16,
|
event=ev16,
|
||||||
|
location=loc1,
|
||||||
when=(
|
when=(
|
||||||
timezone.datetime(year, 9, 1, 14, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 9, 1, 14, 0, tzinfo=timezone.utc),
|
||||||
timezone.datetime(year, 9, 1, 15, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 9, 1, 15, 0, tzinfo=timezone.utc),
|
||||||
|
@ -795,6 +842,7 @@ programming for a danish startup.
|
||||||
)
|
)
|
||||||
EventInstance.objects.create(
|
EventInstance.objects.create(
|
||||||
event=ev13,
|
event=ev13,
|
||||||
|
location=loc1,
|
||||||
when=(
|
when=(
|
||||||
timezone.datetime(year, 8, 31, 17, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 8, 31, 17, 0, tzinfo=timezone.utc),
|
||||||
timezone.datetime(year, 8, 31, 18, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 8, 31, 18, 0, tzinfo=timezone.utc),
|
||||||
|
@ -802,6 +850,7 @@ programming for a danish startup.
|
||||||
)
|
)
|
||||||
EventInstance.objects.create(
|
EventInstance.objects.create(
|
||||||
event=ev19,
|
event=ev19,
|
||||||
|
location=loc1,
|
||||||
when=(
|
when=(
|
||||||
timezone.datetime(year, 8, 30, 22, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 8, 30, 22, 0, tzinfo=timezone.utc),
|
||||||
timezone.datetime(year, 8, 30, 23, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 8, 30, 23, 0, tzinfo=timezone.utc),
|
||||||
|
@ -809,6 +858,7 @@ programming for a danish startup.
|
||||||
)
|
)
|
||||||
EventInstance.objects.create(
|
EventInstance.objects.create(
|
||||||
event=ev19,
|
event=ev19,
|
||||||
|
location=loc1,
|
||||||
when=(
|
when=(
|
||||||
timezone.datetime(year, 8, 29, 22, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 8, 29, 22, 0, tzinfo=timezone.utc),
|
||||||
timezone.datetime(year, 8, 29, 23, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 8, 29, 23, 0, tzinfo=timezone.utc),
|
||||||
|
@ -816,6 +866,7 @@ programming for a danish startup.
|
||||||
)
|
)
|
||||||
EventInstance.objects.create(
|
EventInstance.objects.create(
|
||||||
event=ev19,
|
event=ev19,
|
||||||
|
location=loc1,
|
||||||
when=(
|
when=(
|
||||||
timezone.datetime(year, 8, 28, 22, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 8, 28, 22, 0, tzinfo=timezone.utc),
|
||||||
timezone.datetime(year, 8, 28, 23, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 8, 28, 23, 0, tzinfo=timezone.utc),
|
||||||
|
@ -823,6 +874,7 @@ programming for a danish startup.
|
||||||
)
|
)
|
||||||
EventInstance.objects.create(
|
EventInstance.objects.create(
|
||||||
event=ev19,
|
event=ev19,
|
||||||
|
location=loc1,
|
||||||
when=(
|
when=(
|
||||||
timezone.datetime(year, 8, 31, 22, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 8, 31, 22, 0, tzinfo=timezone.utc),
|
||||||
timezone.datetime(year, 8, 31, 23, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 8, 31, 23, 0, tzinfo=timezone.utc),
|
||||||
|
@ -830,6 +882,7 @@ programming for a danish startup.
|
||||||
)
|
)
|
||||||
EventInstance.objects.create(
|
EventInstance.objects.create(
|
||||||
event=ev19,
|
event=ev19,
|
||||||
|
location=loc1,
|
||||||
when=(
|
when=(
|
||||||
timezone.datetime(year, 9, 1, 22, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 9, 1, 22, 0, tzinfo=timezone.utc),
|
||||||
timezone.datetime(year, 9, 1, 23, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 9, 1, 23, 0, tzinfo=timezone.utc),
|
||||||
|
@ -837,6 +890,7 @@ programming for a danish startup.
|
||||||
)
|
)
|
||||||
EventInstance.objects.create(
|
EventInstance.objects.create(
|
||||||
event=ev20,
|
event=ev20,
|
||||||
|
location=loc1,
|
||||||
when=(
|
when=(
|
||||||
timezone.datetime(year, 9, 2, 20, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 9, 2, 20, 0, tzinfo=timezone.utc),
|
||||||
timezone.datetime(year, 9, 2, 22, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 9, 2, 22, 0, tzinfo=timezone.utc),
|
||||||
|
@ -844,6 +898,7 @@ programming for a danish startup.
|
||||||
)
|
)
|
||||||
EventInstance.objects.create(
|
EventInstance.objects.create(
|
||||||
event=ev21,
|
event=ev21,
|
||||||
|
location=loc1,
|
||||||
when=(
|
when=(
|
||||||
timezone.datetime(year, 8, 28, 12, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 8, 28, 12, 0, tzinfo=timezone.utc),
|
||||||
timezone.datetime(year, 8, 28, 13, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 8, 28, 13, 0, tzinfo=timezone.utc),
|
||||||
|
@ -851,6 +906,7 @@ programming for a danish startup.
|
||||||
)
|
)
|
||||||
EventInstance.objects.create(
|
EventInstance.objects.create(
|
||||||
event=ev22,
|
event=ev22,
|
||||||
|
location=loc1,
|
||||||
when=(
|
when=(
|
||||||
timezone.datetime(year, 8, 28, 18, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 8, 28, 18, 0, tzinfo=timezone.utc),
|
||||||
timezone.datetime(year, 8, 28, 19, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 8, 28, 19, 0, tzinfo=timezone.utc),
|
||||||
|
@ -858,6 +914,7 @@ programming for a danish startup.
|
||||||
)
|
)
|
||||||
EventInstance.objects.create(
|
EventInstance.objects.create(
|
||||||
event=ev23,
|
event=ev23,
|
||||||
|
location=loc1,
|
||||||
when=(
|
when=(
|
||||||
timezone.datetime(year, 8, 29, 9, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 8, 29, 9, 0, tzinfo=timezone.utc),
|
||||||
timezone.datetime(year, 8, 29, 11, 30, tzinfo=timezone.utc),
|
timezone.datetime(year, 8, 29, 11, 30, tzinfo=timezone.utc),
|
||||||
|
@ -865,6 +922,7 @@ programming for a danish startup.
|
||||||
)
|
)
|
||||||
EventInstance.objects.create(
|
EventInstance.objects.create(
|
||||||
event=ev24,
|
event=ev24,
|
||||||
|
location=loc1,
|
||||||
when=(
|
when=(
|
||||||
timezone.datetime(year, 8, 29, 20, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 8, 29, 20, 0, tzinfo=timezone.utc),
|
||||||
timezone.datetime(year, 8, 29, 22, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 8, 29, 22, 0, tzinfo=timezone.utc),
|
||||||
|
@ -872,6 +930,7 @@ programming for a danish startup.
|
||||||
)
|
)
|
||||||
EventInstance.objects.create(
|
EventInstance.objects.create(
|
||||||
event=ev25,
|
event=ev25,
|
||||||
|
location=loc1,
|
||||||
when=(
|
when=(
|
||||||
timezone.datetime(year, 9, 1, 17, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 9, 1, 17, 0, tzinfo=timezone.utc),
|
||||||
timezone.datetime(year, 9, 1, 18, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 9, 1, 18, 0, tzinfo=timezone.utc),
|
||||||
|
@ -879,6 +938,7 @@ programming for a danish startup.
|
||||||
)
|
)
|
||||||
EventInstance.objects.create(
|
EventInstance.objects.create(
|
||||||
event=ev26,
|
event=ev26,
|
||||||
|
location=loc1,
|
||||||
when=(
|
when=(
|
||||||
timezone.datetime(year, 8, 30, 11, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 8, 30, 11, 0, tzinfo=timezone.utc),
|
||||||
timezone.datetime(year, 8, 30, 12, 0, tzinfo=timezone.utc),
|
timezone.datetime(year, 8, 30, 12, 0, tzinfo=timezone.utc),
|
||||||
|
@ -886,6 +946,7 @@ programming for a danish startup.
|
||||||
)
|
)
|
||||||
EventInstance.objects.create(
|
EventInstance.objects.create(
|
||||||
event=ev26,
|
event=ev26,
|
||||||
|
location=loc1,
|
||||||
when=(
|
when=(
|
||||||
timezone.datetime(year, 9, 1, 11, 45, tzinfo=timezone.utc),
|
timezone.datetime(year, 9, 1, 11, 45, tzinfo=timezone.utc),
|
||||||
timezone.datetime(year, 9, 1, 12, 30, tzinfo=timezone.utc),
|
timezone.datetime(year, 9, 1, 12, 30, tzinfo=timezone.utc),
|
||||||
|
|
8
src/utils/templatetags/dateutils.py
Normal file
8
src/utils/templatetags/dateutils.py
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
from django import template
|
||||||
|
from django.utils.dateparse import parse_date
|
||||||
|
register = template.Library()
|
||||||
|
|
||||||
|
@register.simple_tag
|
||||||
|
def get_weekday(year, month, day):
|
||||||
|
return parse_date("%(year)s-%(month)s-%(day)s" % {'year': year, 'month': month, 'day': day}).strftime("%A")
|
||||||
|
|
Loading…
Reference in a new issue