d37674b14a9f77608d25310ecd8efa399f6f8321
[matthijs/projects/dorestad-bookings.git] / tickets / views.py
1 # Create your views here.
2
3 import django
4 from django.shortcuts import render_to_response
5 from django.template import RequestContext
6
7 from models import Booking
8
9 class BookingForm(django.forms.ModelForm):
10     class Meta:
11         model=Booking
12         exclude=['payment']
13
14 def confirm_booking(booking):
15     from django.core.mail import EmailMessage
16
17     context = {'booking' : booking}
18
19     rendered = django.template.loader.render_to_string('tickets/booked.eml', context)
20     (headers, body) = rendered.strip().split('\n\n', 1)
21
22     # Turn the headers into a dict so EmailMessage can turn them into a
23     # string again. Bit pointless, but it works. 
24     # Perhaps we should just use python email stuff directly. OTOH, we
25     # still always need to parse for the From header.
26
27     headers_dict = {}
28     # If no From header is present, let EmailMessage do the default
29     # thing
30     from_email = None
31     for header in headers.split('\n'):
32         (field, value) = header.split(':')
33         if (field == 'From'):
34             from_email = value
35         elif (field == 'Subject'):
36             subject = value
37         else:
38             # Don't put From and Subject in the dict, else they'll be
39             # present twice.
40             headers_dict[field] = value
41
42     msg = EmailMessage(
43         # Only setting the From address through headers won't set the
44         # envelope address right.
45         from_email = from_email,
46         subject    = subject,
47         body       = body,
48         to         = [booking.email],
49         headers    = headers_dict
50     )
51     msg.send()
52
53 def book(request):
54     if request.method == "POST":
55         f = BookingForm(request.POST)
56     else:
57         f = BookingForm()
58
59     if f.is_valid():
60         booking = f.save()
61         confirm_booking(booking)
62         return render_to_response('tickets/booked.html', {'booking' : booking}, context_instance=RequestContext(request))
63
64     return render_to_response('tickets/bookingform.html', {'form' : f}, context_instance=RequestContext(request))