Adding inital version of program control center.
This commit is contained in:
parent
6a413cdd3c
commit
0edcaeb11e
|
@ -144,6 +144,9 @@ urlpatterns = [
|
||||||
url(
|
url(
|
||||||
r'^ics/', ICSView.as_view(), name="ics_view"
|
r'^ics/', ICSView.as_view(), name="ics_view"
|
||||||
),
|
),
|
||||||
|
url(
|
||||||
|
r'^control/', ProgramControlCenter.as_view(), name="program_control_center"
|
||||||
|
),
|
||||||
url(
|
url(
|
||||||
r'^proposals/', include([
|
r'^proposals/', include([
|
||||||
url(
|
url(
|
||||||
|
|
21
src/program/migrations/0045_event_proposal.py
Normal file
21
src/program/migrations/0045_event_proposal.py
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Generated by Django 1.10.5 on 2017-08-22 08:30
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('program', '0044_auto_20170801_1527'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='event',
|
||||||
|
name='proposal',
|
||||||
|
field=models.OneToOneField(blank=True, help_text='The event proposal object this event was created from', null=True, on_delete=django.db.models.deletion.CASCADE, to='program.EventProposal'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -409,6 +409,13 @@ class Event(CampRelatedModel):
|
||||||
help_text='Do we intend to record video of this event?'
|
help_text='Do we intend to record video of this event?'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
proposal = models.OneToOneField(
|
||||||
|
'program.EventProposal',
|
||||||
|
null=True,
|
||||||
|
blank=True,
|
||||||
|
help_text='The event proposal object this event was created from',
|
||||||
|
)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
ordering = ['title']
|
ordering = ['title']
|
||||||
unique_together = (('camp', 'slug'), ('camp', 'title'))
|
unique_together = (('camp', 'slug'), ('camp', 'title'))
|
||||||
|
|
42
src/program/templates/control/index.html
Normal file
42
src/program/templates/control/index.html
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
{% extends 'program_base.html' %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
|
||||||
|
|
||||||
|
<table class="table">
|
||||||
|
|
||||||
|
<thead>
|
||||||
|
<th>
|
||||||
|
Title
|
||||||
|
<th>
|
||||||
|
Submitter email
|
||||||
|
<th>
|
||||||
|
Status
|
||||||
|
<th>
|
||||||
|
Instances
|
||||||
|
<th>
|
||||||
|
Video recording
|
||||||
|
|
||||||
|
{% for proposal in proposals %}
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
{{ proposal.title }}
|
||||||
|
<td>
|
||||||
|
{{ proposal.user.email }}
|
||||||
|
<td>
|
||||||
|
{{ proposal.proposal_status }}
|
||||||
|
<td>
|
||||||
|
{% for instance in proposal.event.instances.all %}
|
||||||
|
<li>
|
||||||
|
<strong>When:</strong> {{ instance.when.lower|date:"l d. b H:i" }} - {{ instance.when.upper|date:"H:i" }}<br />
|
||||||
|
<strong>Where:</strong> {{ instance.location.name }}
|
||||||
|
</li>
|
||||||
|
{% endfor %}
|
||||||
|
<td>
|
||||||
|
{{ proposal.event.video_recording }}
|
||||||
|
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
</table>
|
||||||
|
|
||||||
|
{% endblock %}
|
|
@ -8,6 +8,7 @@ from django.conf import settings
|
||||||
from django.views.decorators.http import require_safe
|
from django.views.decorators.http import require_safe
|
||||||
from django.http import Http404, HttpResponse
|
from django.http import Http404, HttpResponse
|
||||||
from django.utils.decorators import method_decorator
|
from django.utils.decorators import method_decorator
|
||||||
|
from django.contrib.admin.views.decorators import staff_member_required
|
||||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
|
@ -305,3 +306,22 @@ class CallForSpeakersView(CampViewMixin, TemplateView):
|
||||||
def get_template_names(self):
|
def get_template_names(self):
|
||||||
return '%s_call_for_speakers.html' % self.camp.slug
|
return '%s_call_for_speakers.html' % self.camp.slug
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
################## control center #############################################
|
||||||
|
|
||||||
|
class ProgramControlCenter(CampViewMixin, TemplateView):
|
||||||
|
template_name = "control/index.html"
|
||||||
|
|
||||||
|
@method_decorator(staff_member_required)
|
||||||
|
def dispatch(self, *args, **kwargs):
|
||||||
|
return super().dispatch(*args, **kwargs)
|
||||||
|
|
||||||
|
def get_context_data(self, *args, **kwargs):
|
||||||
|
context = super().get_context_data(**kwargs)
|
||||||
|
proposals = models.EventProposal.objects.filter(
|
||||||
|
camp=self.camp
|
||||||
|
).select_related('user', 'event')
|
||||||
|
context['proposals'] = proposals
|
||||||
|
return context
|
||||||
|
|
||||||
|
|
|
@ -295,114 +295,120 @@ class Command(BaseCommand):
|
||||||
slug='{}'.format(slugify(name)),
|
slug='{}'.format(slugify(name)),
|
||||||
)
|
)
|
||||||
|
|
||||||
name = 'Standard ticket'
|
|
||||||
ticket1 = Product.objects.create(
|
|
||||||
name=name,
|
|
||||||
description='A ticket',
|
|
||||||
price=1200,
|
|
||||||
category=tickets,
|
|
||||||
available_in=(
|
|
||||||
timezone.datetime(2017, 3, 1, 12, 0, tzinfo=timezone.utc),
|
|
||||||
timezone.datetime(2017, 8, 20, 12, 0, tzinfo=timezone.utc),
|
|
||||||
),
|
|
||||||
slug='{}'.format(slugify(name)),
|
|
||||||
)
|
|
||||||
|
|
||||||
name = 'Hacker ticket'
|
|
||||||
ticket2 = Product.objects.create(
|
|
||||||
name=name,
|
|
||||||
description='Another ticket',
|
|
||||||
price=1337,
|
|
||||||
category=tickets,
|
|
||||||
available_in=(
|
|
||||||
timezone.datetime(2017, 3, 1, 12, 0, tzinfo=timezone.utc),
|
|
||||||
timezone.datetime(2017, 8, 20, 12, 0, tzinfo=timezone.utc),
|
|
||||||
),
|
|
||||||
slug='{}'.format(slugify(name)),
|
|
||||||
)
|
|
||||||
|
|
||||||
self.output('Creating orders...')
|
|
||||||
order0 = Order.objects.create(
|
|
||||||
user=user1,
|
|
||||||
payment_method='cash',
|
|
||||||
open=None,
|
|
||||||
paid=True
|
|
||||||
)
|
|
||||||
order0.orderproductrelation_set.create(
|
|
||||||
product=ticket1,
|
|
||||||
quantity=1,
|
|
||||||
)
|
|
||||||
order0.orderproductrelation_set.create(
|
|
||||||
product=tent1,
|
|
||||||
quantity=1,
|
|
||||||
)
|
|
||||||
|
|
||||||
order1 = Order.objects.create(
|
|
||||||
user=user2,
|
|
||||||
payment_method='cash'
|
|
||||||
)
|
|
||||||
order1.orderproductrelation_set.create(
|
|
||||||
product=ticket1,
|
|
||||||
quantity=1,
|
|
||||||
)
|
|
||||||
order1.orderproductrelation_set.create(
|
|
||||||
product=tent2,
|
|
||||||
quantity=1,
|
|
||||||
)
|
|
||||||
order2 = Order.objects.create(
|
|
||||||
user=user3,
|
|
||||||
payment_method='cash'
|
|
||||||
)
|
|
||||||
order2.orderproductrelation_set.create(
|
|
||||||
product=ticket2,
|
|
||||||
quantity=1,
|
|
||||||
)
|
|
||||||
order2.orderproductrelation_set.create(
|
|
||||||
product=ticket1,
|
|
||||||
quantity=1,
|
|
||||||
)
|
|
||||||
order2.orderproductrelation_set.create(
|
|
||||||
product=tent2,
|
|
||||||
quantity=1,
|
|
||||||
)
|
|
||||||
order3 = Order.objects.create(
|
|
||||||
user=user4,
|
|
||||||
payment_method='cash'
|
|
||||||
)
|
|
||||||
order3.orderproductrelation_set.create(
|
|
||||||
product=product0,
|
|
||||||
quantity=1,
|
|
||||||
)
|
|
||||||
order3.orderproductrelation_set.create(
|
|
||||||
product=ticket2,
|
|
||||||
quantity=1,
|
|
||||||
)
|
|
||||||
order3.orderproductrelation_set.create(
|
|
||||||
product=tent1,
|
|
||||||
quantity=1,
|
|
||||||
)
|
|
||||||
|
|
||||||
for camp in [camp2016, camp2017, camp2018]:
|
for camp in [camp2016, camp2017, camp2018]:
|
||||||
year = camp.camp.lower.year
|
year = camp.camp.lower.year
|
||||||
|
|
||||||
self.output('Creating tickettypes for {}...'.format(year))
|
self.output('Creating tickettypes for {}...'.format(year))
|
||||||
TicketType.objects.create(
|
adult_full_week = TicketType.objects.create(
|
||||||
name='Adult Full Week',
|
name='Adult Full Week',
|
||||||
camp=camp
|
camp=camp
|
||||||
)
|
)
|
||||||
TicketType.objects.create(
|
adult_one_day = TicketType.objects.create(
|
||||||
name='Adult One Day',
|
name='Adult One Day',
|
||||||
camp=camp
|
camp=camp
|
||||||
)
|
)
|
||||||
TicketType.objects.create(
|
child_full_week = TicketType.objects.create(
|
||||||
name='Child Full Week',
|
name='Child Full Week',
|
||||||
camp=camp
|
camp=camp
|
||||||
)
|
)
|
||||||
TicketType.objects.create(
|
child_one_day = TicketType.objects.create(
|
||||||
name='Child One Day',
|
name='Child One Day',
|
||||||
camp=camp
|
camp=camp
|
||||||
)
|
)
|
||||||
|
|
||||||
|
name = 'Standard ticket {}'.format(year)
|
||||||
|
ticket1 = Product.objects.create(
|
||||||
|
name=name,
|
||||||
|
description='A ticket',
|
||||||
|
price=1200,
|
||||||
|
category=tickets,
|
||||||
|
available_in=(
|
||||||
|
timezone.datetime(2017, 3, 1, 12, 0, tzinfo=timezone.utc),
|
||||||
|
timezone.datetime(2017, 8, 20, 12, 0, tzinfo=timezone.utc),
|
||||||
|
),
|
||||||
|
slug='{}'.format(slugify(name)),
|
||||||
|
ticket_type=adult_full_week
|
||||||
|
)
|
||||||
|
|
||||||
|
name = 'Hacker ticket {}'.format(year)
|
||||||
|
ticket2 = Product.objects.create(
|
||||||
|
name=name,
|
||||||
|
description='Another ticket',
|
||||||
|
price=1337,
|
||||||
|
category=tickets,
|
||||||
|
available_in=(
|
||||||
|
timezone.datetime(2017, 3, 1, 12, 0, tzinfo=timezone.utc),
|
||||||
|
timezone.datetime(2017, 8, 20, 12, 0, tzinfo=timezone.utc),
|
||||||
|
),
|
||||||
|
slug='{}'.format(slugify(name)),
|
||||||
|
ticket_type=adult_full_week
|
||||||
|
)
|
||||||
|
|
||||||
|
self.output('Creating orders...')
|
||||||
|
order0 = Order.objects.create(
|
||||||
|
user=user1,
|
||||||
|
payment_method='cash',
|
||||||
|
open=None,
|
||||||
|
paid=True
|
||||||
|
)
|
||||||
|
order0.orderproductrelation_set.create(
|
||||||
|
product=ticket1,
|
||||||
|
quantity=1,
|
||||||
|
)
|
||||||
|
order0.orderproductrelation_set.create(
|
||||||
|
product=tent1,
|
||||||
|
quantity=1,
|
||||||
|
)
|
||||||
|
|
||||||
|
order1 = Order.objects.create(
|
||||||
|
user=user2,
|
||||||
|
payment_method='cash',
|
||||||
|
open=None,
|
||||||
|
)
|
||||||
|
order1.orderproductrelation_set.create(
|
||||||
|
product=ticket1,
|
||||||
|
quantity=1,
|
||||||
|
)
|
||||||
|
order1.orderproductrelation_set.create(
|
||||||
|
product=tent2,
|
||||||
|
quantity=1,
|
||||||
|
)
|
||||||
|
order2 = Order.objects.create(
|
||||||
|
user=user3,
|
||||||
|
payment_method='cash',
|
||||||
|
open=None,
|
||||||
|
)
|
||||||
|
order2.orderproductrelation_set.create(
|
||||||
|
product=ticket2,
|
||||||
|
quantity=1,
|
||||||
|
)
|
||||||
|
order2.orderproductrelation_set.create(
|
||||||
|
product=ticket1,
|
||||||
|
quantity=1,
|
||||||
|
)
|
||||||
|
order2.orderproductrelation_set.create(
|
||||||
|
product=tent2,
|
||||||
|
quantity=1,
|
||||||
|
)
|
||||||
|
order3 = Order.objects.create(
|
||||||
|
user=user4,
|
||||||
|
payment_method='cash',
|
||||||
|
open=None,
|
||||||
|
)
|
||||||
|
order3.orderproductrelation_set.create(
|
||||||
|
product=product0,
|
||||||
|
quantity=1,
|
||||||
|
)
|
||||||
|
order3.orderproductrelation_set.create(
|
||||||
|
product=ticket2,
|
||||||
|
quantity=1,
|
||||||
|
)
|
||||||
|
order3.orderproductrelation_set.create(
|
||||||
|
product=tent1,
|
||||||
|
quantity=1,
|
||||||
|
)
|
||||||
|
|
||||||
self.output('Creating eventlocations for {}...'.format(year))
|
self.output('Creating eventlocations for {}...'.format(year))
|
||||||
speakers_tent = EventLocation.objects.create(
|
speakers_tent = EventLocation.objects.create(
|
||||||
|
|
Loading…
Reference in a new issue