import django
from django.shortcuts import render_to_response
from django.template import RequestContext
+from django.contrib.auth.decorators import permission_required
-from models import Booking
+from models import Booking, TICKET_PRICE, SHOW_CHOICES
class BookingForm(django.forms.ModelForm):
class Meta:
model=Booking
exclude=['payment']
-def confirm_booking(booking):
+def confirm_booking(booking, template):
from django.core.mail import EmailMessage
context = {'booking' : booking}
- rendered = django.template.loader.render_to_string('tickets/booked.eml', context)
+ rendered = django.template.loader.render_to_string(template, context)
(headers, body) = rendered.strip().split('\n\n', 1)
# Turn the headers into a dict so EmailMessage can turn them into a
if f.is_valid():
booking = f.save()
- confirm_booking(booking)
+ confirm_booking(booking, 'tickets/booked.eml')
return render_to_response('tickets/booked.html', {'booking' : booking}, context_instance=RequestContext(request))
- return render_to_response('tickets/bookingform.html', {'form' : f}, context_instance=RequestContext(request))
+ return render_to_response('tickets/bookingform.html', {'form' : f, 'price' : TICKET_PRICE}, context_instance=RequestContext(request))
# These two forms are used for entering payment details. They aren't
# very different, so it should really be possible to merge them (but
# This field is used to distinguish these two forms
confirm = django.forms.BooleanField(initial=True, widget=django.forms.HiddenInput)
+@permission_required('tickets.change_booking')
def payments(request):
c = {}
bookings = None
for b in bookings:
b.payment = datetime.datetime.now()
b.save()
+ confirm_booking(b, 'tickets/payed.eml')
# Don't show the form again
f = None
c['amount'] = sum([b.price for b in bookings])
return render_to_response('tickets/payments.html', c, context_instance=RequestContext(request))
+
+@permission_required('tickets.change_booking')
+def bookings(request):
+ shows = []
+ for (show, show_desc) in SHOW_CHOICES:
+ bookings = Booking.objects.filter(show=show)
+ # shows is a list of (show_desc, infodict) tuples
+ shows.append((show_desc, {
+ 'bookings' : bookings,
+ 'tickets' : sum([b.tickets for b in bookings]),
+ 'payed' : sum([b.tickets for b in bookings if b.payment is not None]),
+ }))
+
+ c = { 'shows' : shows }
+ return render_to_response('tickets/bookings.html', c, context_instance=RequestContext(request))