X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=tickets%2Fviews.py;h=f8ec3ba874e1a87e7659420e57ede3e87c9249fc;hb=f608a07f83a17210ea58324ea27ff03a30bd7135;hp=3e9547f689f8bb9d524895e61d7cac5037df0338;hpb=a5560561a1094c95b984f5fee3f7d19808ea981f;p=matthijs%2Fprojects%2Fdorestad-bookings.git diff --git a/tickets/views.py b/tickets/views.py index 3e9547f..f8ec3ba 100644 --- a/tickets/views.py +++ b/tickets/views.py @@ -1,13 +1,17 @@ # Create your views here. +import datetime + import django from django.shortcuts import render_to_response +from django.template import RequestContext from models import Booking class BookingForm(django.forms.ModelForm): class Meta: model=Booking + exclude=['payment'] def confirm_booking(booking): from django.core.mail import EmailMessage @@ -57,6 +61,66 @@ def book(request): if f.is_valid(): booking = f.save() confirm_booking(booking) - return render_to_response('tickets/booked.html', {'booking' : booking}) + 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)) + +# These two forms are used for entering payment details. They aren't +# very different, so it should really be possible to merge them (but +# initial attempts to add the confirm field dynamically or setting its +# value dynamically, didn't work out all too well, so leave it at this +# for now). +class PaymentForm(django.forms.Form): + bookings = django.forms.models.ModelMultipleChoiceField( + queryset=Booking.objects.filter(payment__isnull=True).order_by('pk'), + widget=django.forms.CheckboxSelectMultiple, + label="Reserveringen") + +class PaymentConfirmForm(django.forms.Form): + bookings = django.forms.models.ModelMultipleChoiceField( + queryset=Booking.objects.filter(payment__isnull=True).order_by('pk'), + widget=django.forms.MultipleHiddenInput, + label="Reserveringen") + # This field is used to distinguish these two forms + confirm = django.forms.BooleanField(initial=True, widget=django.forms.HiddenInput) + +def payments(request): + c = {} + bookings = None + if request.method != "POST": + # First step: Just show an empty form + f = PaymentForm() + elif not 'confirm' in request.POST: + # Second step: Process form and show a summary for confirmation + f = PaymentForm(request.POST) + if f.is_valid(): + bookings = f.cleaned_data['bookings'] + # Output a confirmation form + f = PaymentConfirmForm() + f.initial['bookings'] = bookings + c['confirm'] = True + else: + # Third step: Summary was confirmed, do the work + f = PaymentConfirmForm(request.POST) + if f.is_valid(): + bookings = f.cleaned_data['bookings'] + + # Do the work + for b in bookings: + b.payment = datetime.datetime.now() + b.save() + + # Don't show the form again + f = None + c['confirmed'] = True + + # Add the form to show + c['form'] = f + + # Add some data about the selected bookings + if bookings: + c['bookings'] = bookings + c['numtickets'] = sum([b.tickets for b in bookings]) + c['amount'] = sum([b.price for b in bookings]) - return render_to_response('tickets/bookingform.html', {'form' : f}) + return render_to_response('tickets/payments.html', c, context_instance=RequestContext(request))