diff -r e86755df35da -r 87e77aa18610 project/kiwipycon/registration/views.py --- a/project/kiwipycon/registration/views.py Thu Apr 01 11:59:35 2010 +0530 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,336 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import absolute_import - -import cStringIO as StringIO -import csv - -# django -from django.conf import settings -from django.shortcuts import render_to_response -from django.template.loader import render_to_string -from django.shortcuts import get_object_or_404 -from django.template import RequestContext -from django.core.urlresolvers import reverse -from django.http import HttpResponse - -from django.contrib.auth.decorators import login_required -from django.contrib.auth.forms import AuthenticationForm -from django.contrib.auth.models import User -from django.core.exceptions import ObjectDoesNotExist - -#kiwipycon -from project.kiwipycon.utils import set_message_cookie -from project.kiwipycon.utils import slugify -from project.kiwipycon.user.models import UserProfile -from project.kiwipycon.user.utils import kiwipycon_createregistrant -from project.kiwipycon.user.forms import RegistrantForm -from project.kiwipycon.sponsor.models import Sponsor -from project.kiwipycon.talk.models import Talk - -from .models import Registration -from .models import Wifi -from .forms import RegistrationSubmitForm -from .forms import RegistrationEditForm -from .forms import RegistrationAdminSelectForm -from .forms import WifiForm -from .utils import send_confirmation - -from .forms import IC - -REG_TOTAL = 1000 - -@login_required -def download_csv(request, - template_name = 'registration/download-csv.html'): - """ - """ - if not request.user.is_staff: - redirect_to = reverse('kiwipycon_login') - if request.method == "POST": - form = RegistrationAdminSelectForm(request.POST) - if form.is_valid(): - conference = form.cleaned_data['by_conference'] - tutorial = form.cleaned_data['by_tutorial'] - sprint = form.cleaned_data['by_sprint'] - amount = form.cleaned_data['by_amount'] - tshirt = form.cleaned_data['by_tshirt'] - order_by = form.cleaned_data['order_by'] - include = form.cleaned_data['include'] - q = Registration.objects.all() - if conference == 'conference': - q = q.filter(conference=True) - elif conference == 'no conference': - q = q.filter(conference=False) - elif tutorial == 'tutorial': - q = q.filter(tutorial=True) - elif tutorial == 'no tutorial': - q = q.filter(tutorial=False) - if sprint == 'sprint': - q = q.filter(sprint=True) - if sprint == 'no sprint': - q = q.filter(sprint=False) - elif tshirt != 'all': - q = q.filter(tshirt=tshirt) - q = q.order_by('registrant__email') - query = q.query - results = list(q) - if include == []: - # default to include all fields - include = [i[0] for i in IC] - if results: - response = HttpResponse(mimetype='text/csv') - response['Content-Disposition'] = 'attachment; filename=registrations.csv' - output = csv.writer(response) - output.writerow([h for h in include]) - for row in results: - conference = row.conference == True and 'yes' or 'no' - tutorial = row.tutorial == True and 'yes' or 'no' - sprint = row.sprint == True and 'yes' or 'no' - wrow = [] - if 'Name' in include: - wrow.append( - row.registrant.get_full_name().encode('utf-8')) - if 'Email' in include: - wrow.append(row.registrant.email.encode('utf-8')) - if 'Organisation' in include: - wrow.append(row.organisation.encode('utf-8')) - if 'Conference' in include: - wrow.append(conference) - if 'Tutorial' in include: - wrow.append(tutorial) - if 'Sprint' in include: - wrow.append(sprint) - if 'T-size' in include: - wrow.append(row.tshirt) - output.writerow(wrow) - return response - else: - no_results = u'No results found for the query' - - else: - form = RegistrationAdminSelectForm() - return render_to_response(template_name, RequestContext(request, - locals())) - -# NOT REQUIRED FOR SciPy.in -@login_required -def invoice(request, template_name='registration/invoice.html'): - user = request.user - registration = get_object_or_404(Registration, registrant=user) - if registration.sponsor: - redirect_to = reverse('kiwipycon_account') - return set_message_cookie(redirect_to, - msg = u'You are a sponsored guest, no payment required.') - return render_to_response(template_name, RequestContext(request, - {'registration' : registration, 'user': user})) - -@login_required -def pdf_invoice(request, template_name='registration/invoice.html'): - user = request.user - registration = get_object_or_404(Registration, registrant=user) - if registration.sponsor: - redirect_to = reverse('kiwipycon_account') - return set_message_cookie(redirect_to, - msg = u'You are a sponsored guest, no payment required.') - content = render_to_string(template_name, - {'registration' : registration, 'user': user}) - result = StringIO.StringIO() - import ho.pisa - pdf = ho.pisa.pisaDocument(StringIO.StringIO(content.encode("UTF-8")),result) - if not pdf.err: - return HttpResponse(result.getvalue(), mimetype='application/pdf') - return HttpResponse("Gremlins ate your invoice, please try html" \ - " version") - - -def registrations(request, - template_name='registration/registrations.html'): - """Simple page to count registrations""" - #registrations = Registration.objects.filter(payment=True).count() - registrations = Registration.objects.all().count() - return render_to_response(template_name, RequestContext(request, - { - 'over_reg' : registrations >= REG_TOTAL and True or False, - 'registrations' : registrations})) - -@login_required -def edit_registration(request, id, - template_name='registration/edit-registration.html'): - '''Allows users that submitted a registration to edit it. - ''' - reg = Registration.objects.get(pk=id) - - if reg.registrant != request.user: - redirect_to = reverse('kiwipycon_account') - return set_message_cookie(redirect_to, - msg = u'Redirected because the registration you selected' \ - + ' is not your own.') - - if request.method == 'POST': - form = RegistrationEditForm(data=request.POST) - if form.is_valid(): - reg.organisation = form.data.get('organisation') - reg.occupation = form.data.get('occupation') - reg.city = form.data.get('city') - reg.tshirt = form.data.get('tshirt') - reg.allow_contact = form.data.get('allow_contact') and True or False - reg.conference = form.data.get('conference') and True or False - reg.tutorial = form.data.get('tutorial') and True or False - reg.sprint = form.data.get('sprint') and True or False - reg.save() - # Saved.. redirect - redirect_to = reverse('kiwipycon_account') - return set_message_cookie(redirect_to, - msg = u'Your changes have been saved.') - else: - form = RegistrationEditForm(initial={ - 'id' : id, - 'organisation' : reg.organisation, - 'occupation' : reg.occupation, - 'city' : reg.city, - 'tshirt' : reg.tshirt, - 'conference': reg.conference, - 'tutorial': reg.tutorial, - 'postcode' : reg.postcode, - 'sprint' : reg.sprint, - 'allow_contact' : reg.allow_contact, - }) - - return render_to_response(template_name, RequestContext(request, locals())) - -def submit_registration(request, - template_name='registration/submit-registration.html'): - '''Allows user to edit registration - ''' - user = request.user - reg_count = Registration.objects.all().count() - if user.is_authenticated(): - try: - profile = user.get_profile() - except: - profile, new = UserProfile.objects.get_or_create(user=user) - if new: - profile.save() - try: - registration = Registration.objects.get(registrant=user) - if registration: - redirect_to = reverse('kiwipycon_account') - return set_message_cookie(redirect_to, - msg = u'You have already been registered.') - - except ObjectDoesNotExist: - pass - - message = None - - if request.method == 'POST': - registration_form = RegistrationSubmitForm(data=request.POST) - registrant_form = RegistrantForm(data=request.POST) - wifi_form = WifiForm(data=request.POST) - - if request.POST.get('action', None) == 'login': - login_form = AuthenticationForm(data=request.POST) - if login_form.is_valid(): - - from django.contrib.auth import login - login(request, login_form.get_user()) - - redirect_to = reverse('kiwipycon_submit_registration') - return set_message_cookie(redirect_to, - msg = u'You have been logged in please continue' + \ - 'with registration.') - - newuser = None - passwd = None - if not user.is_authenticated(): - if registrant_form.is_valid(): - newuser = kiwipycon_createregistrant(request, registrant_form.data) - # Log in user - passwd = User.objects.make_random_password() - newuser.set_password(passwd) - newuser.save() - from django.contrib.auth import authenticate - user = authenticate(username=newuser.username, password=passwd) - - from django.contrib.auth import login - login(request, user) - - newuser = user - - else: - newuser = user - - if registration_form.is_valid() and newuser: - allow_contact = registration_form.data.get('allow_contact') and \ - True or False - conference = registration_form.data.get('conference') and \ - True or False - tutorial = registration_form.data.get('tutorial') and \ - True or False - sprint = registration_form.data.get('sprint') and \ - True or False - - registrant = User.objects.get(pk=newuser.id) - - presenter = None - talks = Talk.objects.filter( - speaker=registrant).filter(approved=True) - if talks: - for talk in talks: - if talk.duration == '30': - presenter = True - elif talk.duration == '60': - presenter = True - - reg = Registration( - # slug = newuser.username, - registrant = registrant, - organisation = registration_form.data.get('organisation'), - occupation = registration_form.data.get('occupation'), - city = registration_form.data.get('city'), - tshirt = registration_form.data.get('tshirt'), - postcode = registration_form.cleaned_data.get('postcode'), - allow_contact = allow_contact, - conference = conference, - tutorial = tutorial, - sprint = sprint) - reg.save() - - # get id and use as slug and invoice number - id = reg.id - slug = 'KPC09%03d' % id - reg.slug = slug - reg.save() - - # additional tasks: - if wifi_form.is_valid(): - wifi = wifi_form.save(registrant) - - # 1. include random password if we are a new user - if passwd: - send_confirmation(registrant, slug, password=passwd) - else: - # 2. send user email with registration id - send_confirmation(registrant, slug) - - redirect_to = reverse('kiwipycon_registrations') - return set_message_cookie(redirect_to, - msg = u'Thank you, your registration has been submitted '\ - 'and an email has been sent with payment details.') - - else: - registration_form = RegistrationSubmitForm() - registrant_form = RegistrantForm() - wifi_form = WifiForm() - - login_form = AuthenticationForm() - - - return render_to_response(template_name, RequestContext(request, { - 'registration_form': registration_form, - 'registrant_form' : registrant_form, - 'over_reg' : reg_count >= REG_TOTAL and True or False, - 'wifi_form' : wifi_form, - 'message' : message, - 'login_form' : login_form - }))