2012-09-14 05:17:32 +00:00
|
|
|
from django.core.exceptions import ObjectDoesNotExist
|
2012-10-09 19:07:55 +00:00
|
|
|
from django.http import Http404, HttpResponse
|
2012-08-31 04:55:37 +00:00
|
|
|
from django.shortcuts import render, get_object_or_404, redirect
|
2012-10-09 19:07:55 +00:00
|
|
|
from django.template import loader, Context
|
2012-08-30 06:21:48 +00:00
|
|
|
|
2012-08-31 05:16:30 +00:00
|
|
|
from django.contrib.auth.decorators import login_required
|
|
|
|
|
2012-08-31 04:55:37 +00:00
|
|
|
from symposion.schedule.forms import SlotEditForm
|
2012-08-31 05:50:00 +00:00
|
|
|
from symposion.schedule.models import Schedule, Day, Slot, Presentation
|
2012-08-30 06:52:50 +00:00
|
|
|
from symposion.schedule.timetable import TimeTable
|
2012-08-30 06:21:48 +00:00
|
|
|
|
|
|
|
|
2012-09-20 02:03:30 +00:00
|
|
|
def fetch_schedule(slug):
|
2012-08-30 06:21:48 +00:00
|
|
|
qs = Schedule.objects.all()
|
2012-08-31 05:16:30 +00:00
|
|
|
|
2012-08-30 06:23:49 +00:00
|
|
|
if slug is None:
|
2012-09-21 02:38:24 +00:00
|
|
|
if qs.count() > 1:
|
|
|
|
raise Http404()
|
2012-08-30 06:21:48 +00:00
|
|
|
schedule = next(iter(qs), None)
|
|
|
|
if schedule is None:
|
|
|
|
raise Http404()
|
|
|
|
else:
|
2012-09-20 02:03:30 +00:00
|
|
|
schedule = get_object_or_404(qs, section__slug=slug)
|
|
|
|
|
|
|
|
return schedule
|
|
|
|
|
|
|
|
|
|
|
|
def schedule_detail(request, slug=None):
|
|
|
|
schedule = fetch_schedule(slug)
|
2012-08-31 05:16:30 +00:00
|
|
|
|
2012-09-21 01:42:03 +00:00
|
|
|
days_qs = Day.objects.filter(schedule=schedule)
|
|
|
|
days = [TimeTable(day) for day in days_qs]
|
|
|
|
|
2012-08-30 06:21:48 +00:00
|
|
|
ctx = {
|
|
|
|
"schedule": schedule,
|
2012-09-21 01:42:03 +00:00
|
|
|
"days": days,
|
2012-08-30 06:21:48 +00:00
|
|
|
}
|
2012-08-30 06:52:50 +00:00
|
|
|
return render(request, "schedule/schedule_detail.html", ctx)
|
2012-08-30 06:21:48 +00:00
|
|
|
|
|
|
|
|
2012-09-20 02:03:30 +00:00
|
|
|
def schedule_list(request, slug=None):
|
|
|
|
schedule = fetch_schedule(slug)
|
|
|
|
|
|
|
|
presentations = Presentation.objects.filter(section=schedule.section)
|
|
|
|
presentations = presentations.exclude(cancelled=True).order_by("id")
|
|
|
|
|
2012-08-31 05:50:00 +00:00
|
|
|
ctx = {
|
2012-09-20 02:06:15 +00:00
|
|
|
"schedule": schedule,
|
2012-08-31 05:50:00 +00:00
|
|
|
"presentations": presentations,
|
|
|
|
}
|
|
|
|
return render(request, "schedule/schedule_list.html", ctx)
|
|
|
|
|
|
|
|
|
2012-10-09 19:07:55 +00:00
|
|
|
def schedule_list_csv(request, slug=None):
|
|
|
|
schedule = fetch_schedule(slug)
|
|
|
|
|
|
|
|
presentations = Presentation.objects.filter(section=schedule.section)
|
|
|
|
presentations = presentations.exclude(cancelled=True).order_by("id")
|
|
|
|
|
|
|
|
response = HttpResponse(mimetype="text/csv")
|
|
|
|
if slug:
|
|
|
|
file_slug = slug
|
|
|
|
else:
|
|
|
|
file_slug = "presentations"
|
|
|
|
response["Content-Disposition"] = 'attachment; filename="%s.csv"' % file_slug
|
|
|
|
|
|
|
|
response.write(loader.get_template("schedule/schedule_list.csv").render(Context({
|
|
|
|
"presentations": presentations,
|
|
|
|
|
|
|
|
})))
|
|
|
|
return response
|
|
|
|
|
|
|
|
|
2012-08-31 05:16:30 +00:00
|
|
|
@login_required
|
2012-08-30 06:21:48 +00:00
|
|
|
def schedule_edit(request, slug=None):
|
2012-08-31 05:16:30 +00:00
|
|
|
|
|
|
|
if not request.user.is_staff:
|
|
|
|
raise Http404()
|
|
|
|
|
2012-09-20 02:03:30 +00:00
|
|
|
schedule = fetch_schedule(slug)
|
2012-08-31 05:16:30 +00:00
|
|
|
|
2012-08-30 06:51:07 +00:00
|
|
|
days_qs = Day.objects.filter(schedule=schedule)
|
|
|
|
days = [TimeTable(day) for day in days_qs]
|
2012-08-30 06:21:48 +00:00
|
|
|
ctx = {
|
|
|
|
"schedule": schedule,
|
2012-08-30 06:51:07 +00:00
|
|
|
"days": days,
|
2012-08-30 06:21:48 +00:00
|
|
|
}
|
2012-08-30 06:52:50 +00:00
|
|
|
return render(request, "schedule/schedule_edit.html", ctx)
|
2012-08-31 04:55:37 +00:00
|
|
|
|
|
|
|
|
2012-08-31 05:16:30 +00:00
|
|
|
@login_required
|
2012-09-20 02:03:30 +00:00
|
|
|
def schedule_slot_edit(request, slug, slot_pk):
|
2012-08-31 05:16:30 +00:00
|
|
|
|
|
|
|
if not request.user.is_staff:
|
|
|
|
raise Http404()
|
|
|
|
|
2012-09-20 02:03:30 +00:00
|
|
|
slot = get_object_or_404(Slot, day__schedule__section__slug=slug, pk=slot_pk)
|
2012-08-31 04:55:37 +00:00
|
|
|
|
2012-09-20 01:15:32 +00:00
|
|
|
# slot content
|
|
|
|
try:
|
|
|
|
content = slot.content
|
|
|
|
except ObjectDoesNotExist:
|
|
|
|
content = None
|
|
|
|
|
2012-09-14 05:17:32 +00:00
|
|
|
if request.method == "POST":
|
2012-09-20 01:15:32 +00:00
|
|
|
form = SlotEditForm(request.POST, content=content)
|
2012-09-14 05:17:32 +00:00
|
|
|
if form.is_valid():
|
|
|
|
presentation = form.cleaned_data["presentation"]
|
2012-09-20 01:15:32 +00:00
|
|
|
if presentation is None:
|
|
|
|
slot.unassign()
|
|
|
|
else:
|
|
|
|
slot.assign(presentation)
|
2012-09-21 02:56:25 +00:00
|
|
|
return redirect("schedule_edit")
|
2012-09-14 05:17:32 +00:00
|
|
|
else:
|
2012-09-20 01:15:32 +00:00
|
|
|
form = SlotEditForm(content=content)
|
2012-09-14 05:17:32 +00:00
|
|
|
ctx = {
|
2012-09-20 02:03:30 +00:00
|
|
|
"slug": slug,
|
2012-09-14 05:17:32 +00:00
|
|
|
"form": form,
|
|
|
|
"slot": slot,
|
|
|
|
}
|
|
|
|
return render(request, "schedule/_slot_edit.html", ctx)
|
2012-09-21 02:38:24 +00:00
|
|
|
|
|
|
|
|
|
|
|
def schedule_presentation_detail(request, pk):
|
|
|
|
|
|
|
|
presentation = get_object_or_404(Presentation, pk=pk)
|
|
|
|
|
|
|
|
ctx = {
|
|
|
|
"presentation": presentation,
|
|
|
|
}
|
|
|
|
return render(request, "schedule/presentation_detail.html", ctx)
|