Created
February 12, 2013 19:34
-
-
Save EdwardIII/4772665 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from django.http import HttpResponse, HttpResponseBadRequest | |
from django.shortcuts import render_to_response, get_object_or_404 | |
from django.views.decorators.csrf import csrf_exempt | |
from django.forms.models import inlineformset_factory | |
from django.db.models import Min | |
from django.utils import simplejson | |
from annoying.decorators import render_to | |
from paypal import interface | |
from models import Category, Organiser, Event, Buyer, Guest | |
from forms import BuyerForm | |
@render_to('index.html') | |
def index(request): | |
return { | |
'categories': Category.objects.all(), | |
'organisers': Organiser.objects.all(), | |
'events': Event.objects.all(), | |
} | |
@render_to('event.html') | |
def event(request, event_id): | |
event = get_object_or_404(Event, pk=event_id) | |
min_price = event.ticket_set.all().aggregate(Min('price'))['price__min'] | |
if event.location_set.count() > 1: | |
has_multiple_locations = True | |
else: | |
has_multiple_locations = False | |
return { | |
'event': event, | |
'min_price': min_price, | |
'has_multiple_locations': has_multiple_locations | |
} | |
@render_to('book.html') | |
@csrf_exempt | |
def book(request): | |
if request.POST: | |
event = Event.objects.get(pk=request.POST['event_id']) | |
#ticket_rows = [] | |
guest_formsets = [] | |
i = 0 | |
for ticket in event.ticket_set.all(): | |
qty = int( request.POST['qty-%s' % ticket.id] ) | |
formset = inlineformset_factory( | |
Buyer, | |
Guest, | |
fields=('name',), | |
extra=qty, | |
) | |
guest_formsets.append( | |
formset(initial=[{ 'event': event, 'ticket': ticket}], | |
prefix='%s' % i) | |
) | |
return { | |
'buyer_form': BuyerForm(), | |
'guest_formsets': guest_formsets, | |
'num_of_guest_formsets': len(guest_formsets), | |
'organiser_name': event.organiser.name, | |
'event_name': event.name, | |
#TODO: Calculate total price for bottom of booking form | |
} | |
else: | |
return HttpResponse(status=400) | |
#TODO: Enable CSRF | |
@csrf_exempt | |
def book_json(request): | |
if request.method == 'POST': | |
#setexp_response = interface.set_express_checkout(amt='10.00', | |
#returnurl=self.returnurl, cancelurl=self.cancelurl, | |
#paymentaction='Order', | |
#email=api_details.EMAIL_PERSONAL) | |
buyer_form = BuyerForm(request.POST) | |
buyer = buyer_form.save() | |
#TODO: Make this actually save, maybe this issue: https://docs.djangoproject.com/en/dev/topics/forms/formsets/#using-more-than-one-formset-in-a-view | |
GuestFormset = inlineformset_factory(Buyer, Guest) | |
for i in xrange(0, int( request.POST['num_of_guest_formsets'] )): | |
guest_forms = GuestFormset(request.POST, prefix='%s' % i) | |
guest_forms.save() | |
data = simplejson.dumps({'we-are': 'good!'}) | |
return HttpResponse(data, mimetype='application/json') | |
else: | |
return HttpResponseNotFound('Must post booking info') |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment