예제 #1
0
파일: views.py 프로젝트: alexnjoyce/myewb2
def view_registration(request):
    
    if not request.user.is_authenticated():
        return HttpResponseRedirect(reverse('conference_login'))
    
    user = request.user
    
    try:
        # if already registered, we display "thank you" page and offer
        # cancellation or a receipt
        registration = ConferenceRegistration.objects.get(user=user, cancelled=False)
        form = None

        return HttpResponseRedirect(reverse('confcomm_app'))

    except ObjectDoesNotExist:
        # if not registered, we display the registration form
        registration = None

        if request.method == 'POST':
            # or, in this case, process the registration form...
            form = ConferenceRegistrationForm(request.POST)
            form.user = user
            if form.is_valid():
                registration = form.save()
                
        else:
            form = ConferenceRegistrationForm()
            form.user = user
                
    needsRenewal = needsToRenew(request.user.get_profile())

    return render_to_response('conference/registration.html',
                              {'registration': registration,
                               'form': form,
                               'user': request.user,
                               'needsRenewal': needsRenewal
                              },
                              context_instance=RequestContext(request)
                             )
예제 #2
0
def view_registration(request):

    if not request.user.is_authenticated():
        return HttpResponseRedirect(reverse('conference_login'))

    user = request.user

    try:
        # if already registered, we display "thank you" page and offer
        # cancellation or a receipt
        registration = ConferenceRegistration.objects.get(user=user,
                                                          cancelled=False)
        form = None

        return HttpResponseRedirect(reverse('confcomm_app'))

    except ObjectDoesNotExist:
        # if not registered, we display the registration form
        registration = None

        if request.method == 'POST':
            # or, in this case, process the registration form...
            form = ConferenceRegistrationForm(request.POST)
            form.user = user
            if form.is_valid():
                registration = form.save()

        else:
            form = ConferenceRegistrationForm()
            form.user = user

    needsRenewal = needsToRenew(request.user.get_profile())

    return render_to_response('conference/registration.html', {
        'registration': registration,
        'form': form,
        'user': request.user,
        'needsRenewal': needsRenewal
    },
                              context_instance=RequestContext(request))
예제 #3
0
파일: forms.py 프로젝트: alexnjoyce/myewb2
    def clean(self):
        # If the card is declined at the bank, trnError will get set...
        if self.trnError:
            raise forms.ValidationError("Credit card error: " + self.trnError)
        
        if self.errors:
            return None

        # and do some auto-processing as needed
        cleaned_data = self.cleaned_data
        cleaned_data['products'] = []
        total_cost = 0
        
        if not cleaned_data.get('prevConfs', None):
            cleaned_data['prevConfs'] = 0
        if not cleaned_data.get('prevRetreats', None):
            cleaned_data['prevRetreats'] = 0
        if not cleaned_data.get('code', None):
            cleaned_data['code'] = None
            
        if not cleaned_data.get('grouping', None):
            cleaned_data['grouping'] = None
        if cleaned_data['grouping'] == 'Other' and cleaned_data.get('grouping2', None):
            cleaned_data['grouping'] = cleaned_data['grouping2'] 
            
        if cleaned_data['code']:
            codename = cleaned_data['code'].getShortname()
        else:
            codename = "open"
        
        sku = "confreg-2011-" + cleaned_data['type'] + "-" + codename
        
        if not CONF_OPTIONS.get(sku, None):
            errormsg = "The registration code you've entered is not valid for the registration type you selected."
            self._errors['type'] = self.error_class([errormsg])
            self._errors['code'] = self.error_class([errormsg])
            del cleaned_data['type']
            del cleaned_data['code']
            raise forms.ValidationError("Unable to complete registration (see errors below)")
         
        cost = CONF_OPTIONS[sku]['cost']
        name = CONF_OPTIONS[sku]['name']
        product, created = Product.objects.get_or_create(sku=sku)
        if created:
            product.name = name
            product.amount = cost
            product.save()
            
        cleaned_data['products'].append(product.sku)
        total_cost = total_cost + Decimal(product.amount)

        if needsToRenew(self.user.get_profile(), type=cleaned_data['type']):
            # FIXME: some duplicated code from profiles.forms (where saving membership fees)
            if self.user.get_profile().student():
                type = "studues"
            else:
                type = "produes"

            chapter = self.user.get_profile().get_chapter()
            if chapter:
                type += "-" + chapter.slug
                chaptername = " (%s)" % chapter.name
            else:
                chaptername = ""
            
            product, created = Product.objects.get_or_create(sku=type)
            if created:
                if self.user.get_profile().student():
                    product.amount = "20.00"
                    product.name = "Student membership" + chaptername
                    product.save()
                else:
                    product.amount = "40.00"
                    product.name = "Professional membership" + chaptername
                    product.save()
            
            cleaned_data['products'].append(product.sku)
            total_cost = total_cost + Decimal(product.amount)

        if cleaned_data['africaFund']:
            cost = cleaned_data['africaFund']
            sku = "11-africafund-" + cost
            name = "Support an African delegate ($" + cost + ")"
            product, created = Product.objects.get_or_create(sku=sku)
            if created:
                product.name = name
                product.amount = cost
                product.save()
            
            cleaned_data['products'].append(product.sku)
            total_cost = total_cost + Decimal(product.amount)

        cleaned_data['total_cost'] = total_cost
        self.cleaned_data = cleaned_data

        return self.cleaned_data
예제 #4
0
파일: forms.py 프로젝트: alexnjoyce/myewb2
    def done(self, request, cleaned_data):
        # add profile info, as it's needed for CC processing
        form = self.form(request.POST)
        if not request.user.email:

            # simulate a cred card declined, to trigger form validation failure
            response = (False, "Please edit your myEWB profile and enter an email address.")

        else:
            cleaned_data['email'] = request.user.email
            if request.user.get_profile().default_phone() and request.user.get_profile().default_phone().number:
                cleaned_data['phone'] = request.user.get_profile().default_phone().number
            else:
                cleaned_data['phone'] = '416-481-3696'
            
            # this call sends it to the bank!!
            response = super(ConferenceRegistrationFormPreview, self).done(request, cleaned_data)
        
        if response[0] == True:
            if cleaned_data['code']:
                codename = cleaned_data['code'].getShortname()
            else:
                codename = "open"
            
            registration = form.save(commit=False)
            registration.user = request.user
            registration.type = "confreg-2011-" + cleaned_data['type'] + "-" + codename
            registration.amountPaid = CONF_OPTIONS[registration.type]['cost']
            registration.roomSize = cleaned_data['type']
            if cleaned_data['code']:
                registration.code = cleaned_data['code']
            else:
                registration.code = None
            registration.receiptNum = response[2]
            registration.txid = response[1]
            
            if cleaned_data.get('grouping', None):
                registration.grouping = cleaned_data['grouping']
            
            registration.save()
            
            # and update their membership if they paid it
            if needsToRenew(request.user.get_profile()):
                request.user.get_profile().pay_membership()
                
            # lastly, add them to the group
            grp, created = Community.objects.get_or_create(slug='conference2011',
                                                           defaults={'invite_only': True,
                                                                     'name': 'National Conference 2011 - EWB delegates',
                                                                     'creator': request.user,
                                                                     'description': 'National Conference 2011 delegates (EWB members)',
                                                                     'mailchimp_name': 'National Conference 2011 members',
                                                                     'mailchimp_category': 'Conference'})

            grp2, created = Community.objects.get_or_create(slug='conference2011-external',
                                                            defaults={'invite_only': True,
                                                                      'name': 'National Conference 2011 - external delegates',
                                                                      'creator': request.user,
                                                                      'description': 'National Conference 2011 delegates (external)',
                                                                      'mailchimp_name': 'National Conference 2011 external',
                                                                      'mailchimp_category': 'Conference'})

            if request.user.is_bulk:
                grp2.add_member(request.user)
            else:
                grp.add_member(request.user)
            
            # don't do the standard render_to_response; instead, do a redirect
            # so that someone can't double-submit by hitting refresh
            return HttpResponseRedirect(reverse('confreg'))
        
        else:
            registration = None
            form.trnError = response[1]
            form.clean

        return render_to_response('conference/registration.html',
                                  {'registration': registration,
                                   'form': form
                                   },
                                   context_instance=RequestContext(request)
                                   )
예제 #5
0
파일: forms.py 프로젝트: franciskung/myewb2
    def done(self, request, cleaned_data):
        # add profile info, as it's needed for CC processing
        #form = self.form(request.POST)
        #reg = self.form.instance
        print "testing the done"
        
        reg = ConferenceRegistration.objects.get(id=cleaned_data['registration_id'])
        form = self.form(request.POST, instance=reg)
        
        if reg.user != request.user:
            # simulate a credit card declined, to trigger form validation failure
            response = (False, "Internal error, please email [email protected]")
            
        elif not request.user.email:
            # simulate a credit card declined, to trigger form validation failure
            response = (False, "Please edit your myEWB profile and enter an email address.")

        elif reg.code and reg.code.type != 'i' and not reg.code.isAvailable():
            response = (False, "Registration code has already been used or has expired")
        
        else:
            cleaned_data['email'] = request.user.email
            if request.user.get_profile().default_phone() and request.user.get_profile().default_phone().number:
                cleaned_data['phone'] = request.user.get_profile().default_phone().number
            else:
                cleaned_data['phone'] = '416-481-3696'
            
            # this call sends it to the bank!!
            response = super(ConferenceRegistrationFormPreview, self).done(request, cleaned_data)
            #response = (True, "123", "456")
            
            if not response[0]:
                response = (False, "Credit card: %s" % response[1])
        
        if response[0] == True:
            if reg.code:
                regtype = reg.code.getShortname()
            else:
                regtype = reg.type
            
            reg.submitted = True
            reg.type = regtype
            reg.amountPaid = CONF_OPTIONS[regtype]['cost']
            reg.receiptNum = response[2]
            reg.txid = response[1]
            
            #if cleaned_data.get('grouping', None):
            #    registration.grouping = cleaned_data['grouping']
            
            reg.save()
            
            # and update their membership if they paid it
            if needsToRenew(request.user.get_profile()) and reg.membership:
                request.user.get_profile().pay_membership()
                
            # lastly, add them to the group
            grp, created = Community.objects.get_or_create(slug='conference2014',
                                                           defaults={'invite_only': True,
                                                                     'name': 'National Conference 2014 - EWB delegates',
                                                                     'creator': request.user,
                                                                     'description': 'National Conference 2014 delegates (EWB members)',
                                                                     'mailchimp_name': 'National Conference 2014 members',
                                                                     'mailchimp_category': 'Conference'})

            grp2, created = Community.objects.get_or_create(slug='conference2014-external',
                                                            defaults={'invite_only': True,
                                                                      'name': 'National Conference 2014 - external delegates',
                                                                      'creator': request.user,
                                                                      'description': 'National Conference 2014 delegates (external)',
                                                                      'mailchimp_name': 'National Conference 2014 external',
                                                                      'mailchimp_category': 'Conference'})

            if request.user.is_bulk:
                grp2.add_member(request.user)
            else:
                grp.add_member(request.user)
            
            # don't do the standard render_to_response; instead, do a redirect
            # so that someone can't double-submit by hitting refresh
            return HttpResponseRedirect(reverse('confreg'))
        
        else:
            registration = None
            form.trnError = response[1]
#            form.clean
        needsRenewal = needsToRenew(request.user.get_profile()) and reg.membership

        print "failing.  going to stage 6.  message is %s" % response[1]

        return render_to_response('conference/registration.html',
                                  {'registration': reg,
                                   'form': form,
                                   'stage': '8',
                                   'last_stage': '7',
                                   'user': request.user,
                                   'needsRenewal': needsRenewal
                                  },
                                  context_instance=RequestContext(request)
                                 )
예제 #6
0
파일: forms.py 프로젝트: franciskung/myewb2
    def clean(self):
        # If the card is declined at the bank, trnError will get set...
        if self.trnError:
            raise forms.ValidationError("Error: " + self.trnError)
        
        if self.errors:
            return None

        # bypass, since the FormPreview clean isn't on a bound form
        # (but that's ok since we validate the bound version first)
        if self.instance.id:
            reg = self.instance
        elif self.cleaned_data.get('id', None):
            reg = ConferenceRegistration.objects.get(id=self.cleaned_data['id'])
            self.instance = reg
        elif self.cleaned_data.get('id', None):
            reg = ConferenceRegistration.objects.get(id=self.cleaned_data['id'])
            self.instance = reg
        else:
            # this shouldn't happen.
            raise forms.ValidationError("Internal error.  Please email [email protected]") 
        
        # and do some auto-processing as needed
        cleaned_data = self.cleaned_data
        cleaned_data['products'] = []
        total_cost = 0
        
        if reg.code:
            regtype = reg.code.getShortname()
        else:
            regtype = reg.type
        
        if not CONF_OPTIONS.get(regtype, None):
            errormsg = "The registration code you've entered is not valid for the registration type you selected."
            raise forms.ValidationError("Unable to complete registration (see errors below)")
         
        cost = CONF_OPTIONS[regtype]['cost']
        name = CONF_OPTIONS[regtype]['name']
        sku = "confreg2014-" + regtype
        product, created = Product.objects.get_or_create(sku=sku)
        if created:
            product.name = name
            product.amount = cost
            product.save()
            
        cleaned_data['products'].append(product.sku)
        total_cost = total_cost + Decimal(product.amount)

        print "membership", reg.membership
        if needsToRenew(self.user.get_profile(), type=reg.type) and reg.membership:
            # FIXME: some duplicated code from profiles.forms (where saving membership fees)
            if self.user.get_profile().student():
                type = "studues"
            else:
                type = "produes"

            chapter = self.user.get_profile().get_chapter()
            if chapter:
                type += "-" + chapter.slug
                chaptername = " (%s)" % chapter.name
            else:
                chaptername = ""
            
            product, created = Product.objects.get_or_create(sku=type)
            if created:
                if self.user.get_profile().student():
                    product.amount = "20.00"
                    product.name = "Student membership" + chaptername
                    product.save()
                else:
                    product.amount = "40.00"
                    product.name = "Professional membership" + chaptername
                    product.save()
            
            cleaned_data['products'].append(product.sku)
            total_cost = total_cost + Decimal(product.amount)

        if reg.africaFund:
            cost = reg.africaFund
            sku = "kumvana2014-%d" % cost
            name = "Support an African delegate ($%d)" % cost
            product, created = Product.objects.get_or_create(sku=sku)
            if created:
                product.name = name
                product.amount = cost
                product.save()
            
            cleaned_data['products'].append(product.sku)
            total_cost = total_cost + Decimal(product.amount)

        if reg.hotel != 'none':
            sku = "confreg2014-%s" % reg.hotel
            name = HOTEL_OPTIONS[reg.hotel]['name']
            cost = HOTEL_OPTIONS[reg.hotel]['cost']
            product, created = Product.objects.get_or_create(sku=sku)
            if created:
                product.name = name
                product.amount = cost
                product.save()
            
            cleaned_data['products'].append(product.sku)
            total_cost = total_cost + Decimal(cost)

        if reg.bracelet:
            sku = "confreg2014-bracelet"
            name = "Conference bracelet"
            product, created = Product.objects.get_or_create(sku=sku)
            if created:
                product.name = name
                product.amount = 12
                product.save()
            
            cleaned_data['products'].append(product.sku)
            total_cost = total_cost + Decimal(12)

        if reg.handbook:
            sku = "confreg2014-handbook"
            name = "Printed handbook"
            product, created = Product.objects.get_or_create(sku=sku)
            if created:
                product.name = name
                product.amount = 3
                product.save()
            
            cleaned_data['products'].append(product.sku)
            total_cost = total_cost + Decimal(3)

        ccard_surcharge = round(total_cost * Decimal('0.025'), 2);
        sku = "ccard-%s" % ccard_surcharge
        name = "Credit card processing fee"
        product, created = Product.objects.get_or_create(sku=sku)
        if created:
            product.name = name
            product.amount = ccard_surcharge
            product.save()
        
        cleaned_data['products'].append(product.sku)
        total_cost = total_cost + Decimal(str(ccard_surcharge))
        reg.ccard_surcharge = Decimal(str(ccard_surcharge))
        reg.save()
        
        
        cleaned_data['total_cost'] = total_cost
        
        cleaned_data['registration_id'] = reg.id
        self.cleaned_data = cleaned_data

        return self.cleaned_data
예제 #7
0
    def done(self, request, cleaned_data):
        # add profile info, as it's needed for CC processing
        form = self.form(request.POST)
        if not request.user.email:

            # simulate a cred card declined, to trigger form validation failure
            response = (
                False,
                "Please edit your myEWB profile and enter an email address.")

        else:
            cleaned_data['email'] = request.user.email
            if request.user.get_profile().default_phone(
            ) and request.user.get_profile().default_phone().number:
                cleaned_data['phone'] = request.user.get_profile(
                ).default_phone().number
            else:
                cleaned_data['phone'] = '416-481-3696'

            # this call sends it to the bank!!
            response = super(ConferenceRegistrationFormPreview,
                             self).done(request, cleaned_data)

        if response[0] == True:
            if cleaned_data['code']:
                codename = cleaned_data['code'].getShortname()
            else:
                codename = "open"

            registration = form.save(commit=False)
            registration.user = request.user
            registration.type = "confreg-2011-" + cleaned_data[
                'type'] + "-" + codename
            registration.amountPaid = CONF_OPTIONS[registration.type]['cost']
            registration.roomSize = cleaned_data['type']
            if cleaned_data['code']:
                registration.code = cleaned_data['code']
            else:
                registration.code = None
            registration.receiptNum = response[2]
            registration.txid = response[1]

            if cleaned_data.get('grouping', None):
                registration.grouping = cleaned_data['grouping']

            registration.save()

            # and update their membership if they paid it
            if needsToRenew(request.user.get_profile()):
                request.user.get_profile().pay_membership()

            # lastly, add them to the group
            grp, created = Community.objects.get_or_create(
                slug='conference2011',
                defaults={
                    'invite_only': True,
                    'name': 'National Conference 2011 - EWB delegates',
                    'creator': request.user,
                    'description':
                    'National Conference 2011 delegates (EWB members)',
                    'mailchimp_name': 'National Conference 2011 members',
                    'mailchimp_category': 'Conference'
                })

            grp2, created = Community.objects.get_or_create(
                slug='conference2011-external',
                defaults={
                    'invite_only': True,
                    'name': 'National Conference 2011 - external delegates',
                    'creator': request.user,
                    'description':
                    'National Conference 2011 delegates (external)',
                    'mailchimp_name': 'National Conference 2011 external',
                    'mailchimp_category': 'Conference'
                })

            if request.user.is_bulk:
                grp2.add_member(request.user)
            else:
                grp.add_member(request.user)

            # don't do the standard render_to_response; instead, do a redirect
            # so that someone can't double-submit by hitting refresh
            return HttpResponseRedirect(reverse('confreg'))

        else:
            registration = None
            form.trnError = response[1]
            form.clean

        return render_to_response('conference/registration.html', {
            'registration': registration,
            'form': form
        },
                                  context_instance=RequestContext(request))
예제 #8
0
    def clean(self):
        # If the card is declined at the bank, trnError will get set...
        if self.trnError:
            raise forms.ValidationError("Credit card error: " + self.trnError)

        if self.errors:
            return None

        # and do some auto-processing as needed
        cleaned_data = self.cleaned_data
        cleaned_data['products'] = []
        total_cost = 0

        if not cleaned_data.get('prevConfs', None):
            cleaned_data['prevConfs'] = 0
        if not cleaned_data.get('prevRetreats', None):
            cleaned_data['prevRetreats'] = 0
        if not cleaned_data.get('code', None):
            cleaned_data['code'] = None

        if not cleaned_data.get('grouping', None):
            cleaned_data['grouping'] = None
        if cleaned_data['grouping'] == 'Other' and cleaned_data.get(
                'grouping2', None):
            cleaned_data['grouping'] = cleaned_data['grouping2']

        if cleaned_data['code']:
            codename = cleaned_data['code'].getShortname()
        else:
            codename = "open"

        sku = "confreg-2011-" + cleaned_data['type'] + "-" + codename

        if not CONF_OPTIONS.get(sku, None):
            errormsg = "The registration code you've entered is not valid for the registration type you selected."
            self._errors['type'] = self.error_class([errormsg])
            self._errors['code'] = self.error_class([errormsg])
            del cleaned_data['type']
            del cleaned_data['code']
            raise forms.ValidationError(
                "Unable to complete registration (see errors below)")

        cost = CONF_OPTIONS[sku]['cost']
        name = CONF_OPTIONS[sku]['name']
        product, created = Product.objects.get_or_create(sku=sku)
        if created:
            product.name = name
            product.amount = cost
            product.save()

        cleaned_data['products'].append(product.sku)
        total_cost = total_cost + Decimal(product.amount)

        if needsToRenew(self.user.get_profile(), type=cleaned_data['type']):
            # FIXME: some duplicated code from profiles.forms (where saving membership fees)
            if self.user.get_profile().student():
                type = "studues"
            else:
                type = "produes"

            chapter = self.user.get_profile().get_chapter()
            if chapter:
                type += "-" + chapter.slug
                chaptername = " (%s)" % chapter.name
            else:
                chaptername = ""

            product, created = Product.objects.get_or_create(sku=type)
            if created:
                if self.user.get_profile().student():
                    product.amount = "20.00"
                    product.name = "Student membership" + chaptername
                    product.save()
                else:
                    product.amount = "40.00"
                    product.name = "Professional membership" + chaptername
                    product.save()

            cleaned_data['products'].append(product.sku)
            total_cost = total_cost + Decimal(product.amount)

        if cleaned_data['africaFund']:
            cost = cleaned_data['africaFund']
            sku = "11-africafund-" + cost
            name = "Support an African delegate ($" + cost + ")"
            product, created = Product.objects.get_or_create(sku=sku)
            if created:
                product.name = name
                product.amount = cost
                product.save()

            cleaned_data['products'].append(product.sku)
            total_cost = total_cost + Decimal(product.amount)

        cleaned_data['total_cost'] = total_cost
        self.cleaned_data = cleaned_data

        return self.cleaned_data
예제 #9
0
파일: views.py 프로젝트: franciskung/myewb2
def view_registration(request):
    user = request.user
    stage = None
    form = None
    
    try:
        # if already registered, we display "thank you" page and offer
        # cancellation or a receipt
        registration = ConferenceRegistration.objects.get(user=user, submitted=True, cancelled=False)
        
        """
        if registration.tshirt and registration.tshirt != 'n':
            tshirtform = None
        else:
            tshirtform = True

        if registration.extra_gala:
            skiform = None
        else:
            skiform = True
        """

        #return HttpResponseRedirect(reverse('confcomm_app'))
        return render_to_response('conference/postregistration.html',
                                  {'registration': registration,
                                   #'tshirtform': tshirtform,
                                   #'skiform': skiform,
                                   'user': request.user,
                                  },
                                  context_instance=RequestContext(request)
                                 )
        

    except ObjectDoesNotExist:
        # if not registered, we display the registration form
        registration = get_object_or_none(ConferenceRegistration, user=user, submitted=False, cancelled=False)
        
        stage = request.POST.get('reg_stage', None)
        if not stage:
            stage = request.GET.get('reg_stage', None)
        
        if request.method == 'POST':
            
            # populate and process the right registration form...
            if not stage:
                form = ConferenceRegistrationProfileForm(request.POST, instance=user.get_profile())
            elif stage == '2':
                form = ConferenceRegistrationForm1(request.POST, instance=registration)
            elif stage == '3':
                form = ConferenceRegistrationForm2(request.POST, instance=registration)
            elif stage == '4':
                form = ConferenceRegistrationForm3(request.POST, instance=registration)
            elif stage == '5':
                form = ConferenceRegistrationForm4(request.POST, instance=registration)
            elif stage == '6':
                form = ConferenceRegistrationForm5(request.POST, instance=registration)
            elif stage == '7':
                form = ConferenceRegistrationForm6(request.POST, instance=registration)
            elif stage == '8':
                form = ConferenceRegistrationForm7(request.POST, instance=registration)
            elif stage == '9':
                form = ConferenceRegistrationForm8(request.POST, instance=registration)
                
            form.user = user
            if form.is_valid():
                form_valid = True
                registration = form.save(commit=False)
                registration.user = user
                registration.save()
                
                # advance the stage counter and find next action
                if not stage:
                    stage = '2'
                elif stage == '2':
                    stage = '3'
                elif stage == '3':
                    stage = '4'
                elif stage == '4':
                    if registration.hotel == 'hotelquad' or registration.hotel == 'hoteldouble' or (registration.code and registration.code.type == 'q'):
                        stage = '5'
                    else:
                        stage = '6'
                elif stage == '5':
                    stage = '6'
                elif stage == '6':
                    stage = '7'
                elif stage == '7':
                    stage = '8'
                elif stage == '8':
                    stage = '9'
                elif stage == '9':
                    return ConferenceRegistrationFormPreview(ConferenceRegistrationForm8)(request, username=request.user.username, registration_id=registration.id)
                
                form = None

        # populate form (either current form with errors, or next stage's form)
        if not stage and not form:
            form = ConferenceRegistrationProfileForm(instance=user.get_profile())
        elif stage == '2' and not form:
            form = ConferenceRegistrationForm1(instance=registration)
        elif stage == '3' and not form:
            form = ConferenceRegistrationForm2(instance=registration)
        elif stage == '4' and not form:
            form = ConferenceRegistrationForm3(instance=registration)
        elif stage == '5' and not form:
            form = ConferenceRegistrationForm4(instance=registration)
        elif stage == '6' and not form:
            form = ConferenceRegistrationForm5(instance=registration)
        elif stage == '7' and not form:
            form = ConferenceRegistrationForm6(instance=registration)
        elif stage == '8' and not form:
            form = ConferenceRegistrationForm7(instance=registration)
        elif stage == '9' and not form:
            form = ConferenceRegistrationForm8(instance=registration)
        form.user = request.user
                
    needsRenewal = needsToRenew(request.user.get_profile())

    last_stage = None
    if stage == '3':
        last_stage = '2'
    elif stage == '4':
        last_stage = '3'
    elif stage == '5':
        last_stage = '4'
    elif stage == '6':
        if registration.hotel == 'hotelquad' or registration.hotel == 'hoteldouble' or (registration.code and registration.code.type == 'q'):
            last_stage = '5'
        else:
            last_stage = '4'
    elif stage == '7':
        last_stage = '6'
    elif stage == '8':
        last_stage = '7'
    elif stage == '9':
        last_stage = '8'

    return render_to_response('conference/registration.html',
                              {'registration': registration,
                               'form': form,
                               'stage': stage,
                               'last_stage': last_stage,
                               'user': request.user,
                               'needsRenewal': needsRenewal
                              },
                              context_instance=RequestContext(request)
                             )