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) )
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))
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
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) )
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) )
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
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))
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
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) )