Skip to content

Instantly share code, notes, and snippets.

@EdwardIII
Created February 12, 2013 19:34
Show Gist options
  • Save EdwardIII/4772665 to your computer and use it in GitHub Desktop.
Save EdwardIII/4772665 to your computer and use it in GitHub Desktop.
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