def auto_update_paid_object(self, request, payment): """ Update the object after online payment is received. """ from datetime import datetime try: from tendenci.apps.notifications import models as notification except: notification = None from tendenci.core.perms.utils import get_notice_recipients from tendenci.addons.events.utils import email_admins site_label = get_setting('site', 'global', 'sitedisplayname') site_url = get_setting('site', 'global', 'siteurl') self_reg8n = get_setting('module', 'users', 'selfregistration') payment_attempts = self.invoice.payment_set.count() registrants = self.registrant_set.all().order_by('id') for registrant in registrants: #registrant.assign_mapped_fields() if registrant.custom_reg_form_entry: registrant.name = registrant.custom_reg_form_entry.__unicode__() else: registrant.name = ' '.join([registrant.first_name, registrant.last_name]) # only send email on success! or first fail if payment.is_paid or payment_attempts <= 1: notification.send_emails( [self.registrant.email], # recipient(s) 'event_registration_confirmation', # template { 'SITE_GLOBAL_SITEDISPLAYNAME': site_label, 'SITE_GLOBAL_SITEURL': site_url, 'site_label': site_label, 'site_url': site_url, 'self_reg8n': self_reg8n, 'reg8n': self, 'registrants': registrants, 'event': self.event, 'total_amount': self.invoice.total, 'is_paid': payment.is_paid, }, True, # notice saved in db ) #notify the admins too email_admins(self.event, self.invoice.total, self_reg8n, self, registrants)
def multi_register(request, event_id, template_name="events/registration/multi_register.html"): """ This view is where a user defines the specifics of his/her registrations. A registration set is a set of registrants (one or many) that comply with a specific pricing. A pricing defines the maximum number of registrants in a registration set. A user can avail multiple registration sets. If the site setting anonymousmemberpricing is enabled, anonymous users can select non public pricings in their registration sets, provided that the first registrant of every registration set's email is validated to be an existing user. If the site setting anonymousmemberpricing is disabled, anonymous users will not be able to see non public prices. """ # redirect to default registration if anonymousmemberpricing not enabled if not get_setting('module', 'events', 'anonymousmemberpricing'): return redirect('event.multi_register', event_id) # clear user list session request.session['user_list'] = [] event = get_object_or_404(Event, pk=event_id) # check if event allows registration if (event.registration_configuration is None or not event.registration_configuration.enabled): raise Http404 # check if it is still open, always open for admin users if not request.user.profile.is_superuser: status = reg_status(event, request.user) if status == REG_FULL: messages.add_message(request, messages.ERROR, _('Registration is full.')) return redirect('event', event.pk) elif status == REG_CLOSED: messages.add_message(request, messages.ERROR, _('Registration is closed.')) return redirect('event', event.pk) user = AnonymousUser() # get available pricings active_pricings = get_active_pricings(event) event_pricings = event.registration_configuration.regconfpricing_set.all() # get available addons active_addons = get_active_addons(event) # check if use a custom reg form custom_reg_form = None reg_conf = event.registration_configuration if reg_conf.use_custom_reg_form: if reg_conf.bind_reg_form_to_conf_only: custom_reg_form = reg_conf.reg_form #custom_reg_form = None if custom_reg_form: RF = FormForCustomRegForm else: RF = RegistrantForm # start the form set factory RegistrantFormSet = formset_factory( RF, formset=RegistrantBaseFormSet, can_delete=True, extra=0, ) RegAddonFormSet = formset_factory( RegAddonForm, formset=RegAddonBaseFormSet, extra=0, ) if request.method == "POST": # process the submitted forms params = {'prefix': 'registrant', 'event': event, 'extra_params': { 'pricings':event_pricings, } } if custom_reg_form: params['extra_params'].update({"custom_reg_form": custom_reg_form, 'event': event}) reg_formset = RegistrantFormSet(request.POST, **params) reg_form = RegistrationForm(event, request.user, request.POST, reg_count = len(reg_formset.forms)) # This form is just here to preserve the data in case of invalid registrants # The real validation of addons is after validation of registrants addon_formset = RegAddonFormSet(request.POST, prefix='addon', event=event, extra_params={ 'addons':active_addons, 'valid_addons':active_addons, }) addon_formset.is_valid() # validate the form and formset if False not in (reg_form.is_valid(), reg_formset.is_valid()): valid_addons = get_addons_for_list(event, reg_formset.get_user_list()) # validate the addons addon_formset = RegAddonFormSet(request.POST, prefix='addon', event=event, extra_params={ 'addons':active_addons, 'valid_addons':valid_addons, }) if addon_formset.is_valid(): # process the registration # this will create the registrants and apply the discount reg8n = process_registration(reg_form, reg_formset, addon_formset, custom_reg_form=custom_reg_form) self_reg8n = get_setting('module', 'users', 'selfregistration') is_credit_card_payment = (reg8n.payment_method and (reg8n.payment_method.machine_name).lower() == 'credit-card' and reg8n.amount_paid > 0) registrants = reg8n.registrant_set.all().order_by('id') for registrant in registrants: #registrant.assign_mapped_fields() if registrant.custom_reg_form_entry: registrant.name = registrant.custom_reg_form_entry.__unicode__() else: registrant.name = ' '.join([registrant.first_name, registrant.last_name]) if is_credit_card_payment: # online payment # email the admins as well email_admins(event, reg8n.amount_paid, self_reg8n, reg8n, registrants) # get invoice; redirect to online pay return redirect('payment.pay_online', reg8n.invoice.id, reg8n.invoice.guid) else: # offline payment # email the registrant send_registrant_email(reg8n, self_reg8n) # email the admins as well email_admins(event, reg8n.amount_paid, self_reg8n, reg8n, registrants) EventLog.objects.log(instance=event) # redirect to confirmation return redirect('event.registration_confirmation', event_id, reg8n.registrant.hash) else: params = {'prefix': 'registrant', 'event': event, 'extra_params': { 'pricings':event_pricings, } } if custom_reg_form: params['extra_params'].update({"custom_reg_form": custom_reg_form, 'event': event}) # intialize empty forms reg_formset = RegistrantFormSet(**params) reg_form = RegistrationForm(event, request.user) addon_formset = RegAddonFormSet( prefix='addon', event=event, extra_params={ 'addons':active_addons, }) sets = reg_formset.get_sets() # build our hidden form dynamically hidden_form = None if custom_reg_form: params = {'prefix': 'registrant', 'event': event, 'extra_params': { 'pricings':event_pricings, 'custom_reg_form': custom_reg_form, 'event': event } } FormSet = formset_factory( FormForCustomRegForm, formset=RegistrantBaseFormSet, can_delete=True, extra=1, ) formset = FormSet(**params) hidden_form = formset.forms[0] return render_to_response(template_name, { 'event':event, 'reg_form':reg_form, 'custom_reg_form': custom_reg_form, 'hidden_form': hidden_form, 'registrant': reg_formset, 'addon_formset': addon_formset, 'sets': sets, 'addons':active_addons, 'pricings':active_pricings, 'anon_pricing':True, 'total_price':reg_formset.get_total_price()+addon_formset.get_total_price(), 'allow_memberid_pricing':get_setting('module', 'events', 'memberidpricing'), 'shared_pricing':get_setting('module', 'events', 'sharedpricing'), }, context_instance=RequestContext(request))
def multi_register(request, event_id, template_name="events/registration/multi_register.html"): """ This view is where a user defines the specifics of his/her registrations. A registration set is a set of registrants (one or many) that comply with a specific pricing. A pricing defines the maximum number of registrants in a registration set. A user can avail multiple registration sets. If the site setting anonymousmemberpricing is enabled, anonymous users can select non public pricings in their registration sets, provided that the first registrant of every registration set's email is validated to be an existing user. If the site setting anonymousmemberpricing is disabled, anonymous users will not be able to see non public prices. """ # redirect to default registration if anonymousmemberpricing not enabled if not get_setting('module', 'events', 'anonymousmemberpricing'): return redirect('event.multi_register', event_id) # clear user list session request.session['user_list'] = [] event = get_object_or_404(Event, pk=event_id) # check if event allows registration if (event.registration_configuration is None or not event.registration_configuration.enabled): raise Http404 # check if it is still open, always open for admin users if not request.user.profile.is_superuser: status = reg_status(event, request.user) if status == REG_FULL: messages.add_message(request, messages.ERROR, _('Registration is full.')) return redirect('event', event.pk) elif status == REG_CLOSED: messages.add_message(request, messages.ERROR, _('Registration is closed.')) return redirect('event', event.pk) user = AnonymousUser() # get available pricings active_pricings = get_active_pricings(event) event_pricings = event.registration_configuration.regconfpricing_set.all() # get available addons active_addons = get_active_addons(event) # check if use a custom reg form custom_reg_form = None reg_conf = event.registration_configuration if reg_conf.use_custom_reg_form: if reg_conf.bind_reg_form_to_conf_only: custom_reg_form = reg_conf.reg_form #custom_reg_form = None if custom_reg_form: RF = FormForCustomRegForm else: RF = RegistrantForm # start the form set factory RegistrantFormSet = formset_factory( RF, formset=RegistrantBaseFormSet, can_delete=True, extra=0, ) RegAddonFormSet = formset_factory( RegAddonForm, formset=RegAddonBaseFormSet, extra=0, ) if request.method == "POST": # process the submitted forms params = { 'prefix': 'registrant', 'event': event, 'extra_params': { 'pricings': event_pricings, } } if custom_reg_form: params['extra_params'].update({ "custom_reg_form": custom_reg_form, 'event': event }) reg_formset = RegistrantFormSet(request.POST, **params) reg_form = RegistrationForm(event, request.user, request.POST, reg_count=len(reg_formset.forms)) # This form is just here to preserve the data in case of invalid registrants # The real validation of addons is after validation of registrants addon_formset = RegAddonFormSet(request.POST, prefix='addon', event=event, extra_params={ 'addons': active_addons, 'valid_addons': active_addons, }) addon_formset.is_valid() # validate the form and formset if False not in (reg_form.is_valid(), reg_formset.is_valid()): valid_addons = get_addons_for_list(event, reg_formset.get_user_list()) # validate the addons addon_formset = RegAddonFormSet(request.POST, prefix='addon', event=event, extra_params={ 'addons': active_addons, 'valid_addons': valid_addons, }) if addon_formset.is_valid(): # process the registration # this will create the registrants and apply the discount reg8n = process_registration(reg_form, reg_formset, addon_formset, custom_reg_form=custom_reg_form) self_reg8n = get_setting('module', 'users', 'selfregistration') is_credit_card_payment = (reg8n.payment_method and ( reg8n.payment_method.machine_name).lower() == 'credit-card' and reg8n.amount_paid > 0) registrants = reg8n.registrant_set.all().order_by('id') for registrant in registrants: #registrant.assign_mapped_fields() if registrant.custom_reg_form_entry: registrant.name = registrant.custom_reg_form_entry.__unicode__( ) else: registrant.name = ' '.join( [registrant.first_name, registrant.last_name]) if is_credit_card_payment: # online payment # email the admins as well email_admins(event, reg8n.amount_paid, self_reg8n, reg8n, registrants) # get invoice; redirect to online pay return redirect('payment.pay_online', reg8n.invoice.id, reg8n.invoice.guid) else: # offline payment # email the registrant send_registrant_email(reg8n, self_reg8n) # email the admins as well email_admins(event, reg8n.amount_paid, self_reg8n, reg8n, registrants) EventLog.objects.log(instance=event) # redirect to confirmation return redirect('event.registration_confirmation', event_id, reg8n.registrant.hash) else: params = { 'prefix': 'registrant', 'event': event, 'extra_params': { 'pricings': event_pricings, } } if custom_reg_form: params['extra_params'].update({ "custom_reg_form": custom_reg_form, 'event': event }) # intialize empty forms reg_formset = RegistrantFormSet(**params) reg_form = RegistrationForm(event, request.user) addon_formset = RegAddonFormSet(prefix='addon', event=event, extra_params={ 'addons': active_addons, }) sets = reg_formset.get_sets() # build our hidden form dynamically hidden_form = None if custom_reg_form: params = { 'prefix': 'registrant', 'event': event, 'extra_params': { 'pricings': event_pricings, 'custom_reg_form': custom_reg_form, 'event': event } } FormSet = formset_factory( FormForCustomRegForm, formset=RegistrantBaseFormSet, can_delete=True, extra=1, ) formset = FormSet(**params) hidden_form = formset.forms[0] return render_to_response(template_name, { 'event': event, 'reg_form': reg_form, 'custom_reg_form': custom_reg_form, 'hidden_form': hidden_form, 'registrant': reg_formset, 'addon_formset': addon_formset, 'sets': sets, 'addons': active_addons, 'pricings': active_pricings, 'anon_pricing': True, 'total_price': reg_formset.get_total_price() + addon_formset.get_total_price(), 'allow_memberid_pricing': get_setting('module', 'events', 'memberidpricing'), 'shared_pricing': get_setting('module', 'events', 'sharedpricing'), }, context_instance=RequestContext(request))