def registration(request, year, season, division, section=None): league = get_object_or_404(League, Q(year=year), Q(season__name=season) | Q(season__slug=season), Q(night=division) | Q(night_slug=division)) try: registration, created = Registrations.objects.get_or_create(user=request.user, league=league) except IntegrityError: registration = Registrations.objects.get(user=request.user, league=league) if not league.is_open(request.user): return render_to_response('leagues/registration/error.html', { 'league': league, 'registration': registration, 'errors': ['closed'], }, context_instance=RequestContext(request)) if not registration.is_complete: errors = [] try: if not request.user.profile or not request.user.profile.is_complete_for_user: errors.append('profile') if not request.user.playerratings_set.filter(submitted_by=request.user, user=request.user).exists(): errors.append('rating') except ObjectDoesNotExist: errors.append('unknown') if len(errors): return render_to_response('leagues/registration/error.html', { 'league': league, 'registration': registration, 'errors': errors, }, context_instance=RequestContext(request)) num_steps = 4 if league.checks_accepted: num_steps = num_steps + 1 tick_percentage = 100.0 / num_steps attendance_form = None paypal_form = None if request.method == 'POST': success = True # conduct response if 'conduct_accept' in request.POST: registration.conduct_complete = 1 registration.save() messages.success(request, 'Code of conduct response saved.') elif 'conduct_decline' in request.POST: registration.conduct_complete = 0 registration.save() success = False section = 'conduct' messages.error(request, 'You must accept the code of conduct to continue.') # waiver response if 'waiver_accept' in request.POST: registration.waiver_complete = 1 registration.save() messages.success(request, 'Waiver response saved.') elif 'waiver_decline' in request.POST: registration.waiver_complete = 0 registration.save() success = False section = 'waiver' messages.error(request, 'You must accept the waiver to continue.') # attendance/captaining response if 'id' in request.POST and 'attendance' in request.POST: attendance_form = RegistrationAttendanceForm(request.POST, instance=registration) if attendance_form.is_valid(): attendance_form.save() if not registration.baggage_id: baggage = Baggage() baggage.save() registration.baggage_id = baggage.id registration.save() if league.check_price == 0 and league.paypal_price == 0: registration.registered = datetime.now() registration.save() if league.type == 'league': messages.success(request, 'Attendance and captaining response saved.') else: messages.success(request, 'Attendance response saved.') else: success = False section = 'attendance' if league.type == 'league': messages.error(request, 'You must provide a valid attendance and captaining rating to continue.') else: messages.error(request, 'You must provide a valid attendance rating to continue.') # payment type response if 'pay_type' in request.POST: if not league.checks_accepted: registration.pay_type = 'paypal' registration.save() messages.error(request, 'Payment type set to PayPal. Checks are not accepted for this league.') elif request.POST.get('pay_type').lower() == 'check': registration.pay_type = 'check' registration.save() messages.success(request, 'Payment type set to check.') elif request.POST.get('pay_type').lower() == 'paypal': registration.pay_type = 'paypal' registration.save() messages.success(request, 'Payment type set to PayPal.') else: success = False section = 'pay_type' messages.error(request, 'You must select a valid payment type to continue.') if 'coupon_code' in request.POST: if league.coupons_accepted: try: coupon = Coupon.objects.get(code=request.POST.get('coupon_code')) except ObjectDoesNotExist: coupon = None if coupon and coupon.is_valid(): registration.coupon = coupon registration.save() registration.coupon.use_count = F('use_count') + 1 registration.coupon.save() messages.success(request, 'Your coupon code has been applied.') else: success = False messages.error(request, 'You have entered an invalid coupon code.') else: success = False messages.error(request, 'Coupon codes are not accepted for this division.') if 'remove_coupon' in request.POST: if registration.coupon: registration.coupon.use_count = F('use_count') - 1 registration.coupon.save() registration.coupon = None registration.save() messages.success(request, 'Your coupon has been removed and will not be used with this registration.') else: success = False messages.error(request, 'No coupon has been added to this registration.') if 'process_registration' in request.POST: if registration.is_ready_for_payment: registration.payment_complete = True registration.registered = datetime.now() registration.save() success = True messages.success(request, 'Your registration has been processed.') else: messages.error(request, 'Your registration could not be processed.') if success: return HttpResponseRedirect(reverse('league_registration', kwargs={'year': year, 'season': season, 'division': division})) if section == 'conduct' or not registration.conduct_complete: return render_to_response('leagues/registration/conduct.html', { 'league': league, 'registration': registration, 'section': 'conduct', 'tick_percentage': tick_percentage }, context_instance=RequestContext(request)) if section == 'waiver' or not registration.waiver_complete: return render_to_response('leagues/registration/waiver.html', { 'league': league, 'registration': registration, 'section': 'waiver', 'tick_percentage': tick_percentage }, context_instance=RequestContext(request)) if section == 'attendance' or \ registration.attendance == None or \ (registration.captain == None and league.type == 'league'): if not attendance_form: attendance_form = RegistrationAttendanceForm(instance=registration) return render_to_response('leagues/registration/attendance.html', { 'league': league, 'registration': registration, 'attendance_form': attendance_form, 'section': 'attendance', 'tick_percentage': tick_percentage }, context_instance=RequestContext(request)) if registration.check_price > 0 or registration.paypal_price > 0: if league.checks_accepted and (section == 'pay_type' or not registration.pay_type or (registration.pay_type != 'check' and registration.pay_type != 'paypal')): return render_to_response('leagues/registration/payment.html', { 'league': league, 'registration': registration, 'section': 'pay_type', 'tick_percentage': tick_percentage }, context_instance=RequestContext(request)) if not registration.paypal_invoice_id: registration.paypal_invoice_id = str(uuid.uuid4()) registration.save() if not registration.paypal_complete and not registration.check_complete: baseUrl = request.build_absolute_uri(getattr(settings, 'FORCE_SCRIPT_NAME', '/')).replace(request.path_info.replace(' ', '%20'), '') paypal_dict = { 'amount': registration.paypal_price, 'cancel_return': baseUrl + '/leagues/' + str(league.year) + '/' + str(league.season.slug) + '/' + str(league.night_slug) + '/registration/', 'invoice': registration.paypal_invoice_id, 'item_name': str(league.season_title).capitalize() + ' League ' + str(league.year) + ' - ' + str(league.night_title).capitalize(), 'notify_url': baseUrl + '/leagues/registration/payment/' + getattr(settings, 'PAYPAL_CALLBACK_SECRET', 'notification/callback/for/a2ultimate/secret/'), 'return_url': baseUrl + '/leagues/' + str(league.year) + '/' + str(league.season.slug) + '/' + str(league.night_slug) + '/registration-complete/', } paypal_form = PayPalPaymentsForm(initial=paypal_dict) # https://ppmts.custhelp.com/app/answers/detail/a_id/165 return render_to_response('leagues/registration/status.html', { 'paypal_form': paypal_form, 'league': league, 'registration': registration, 'section': 'status', 'tick_percentage': tick_percentage }, context_instance=RequestContext(request))
def registration(request, year, season, division, section=None): league = get_object_or_404(League, year=year, season=season, night=division) if league.state not in ['active'] and not request.user.is_staff and not request.user.is_superuser: raise Http403 registration, created = Registrations.objects.get_or_create(user=request.user, league=league) attendance_form = None paypal_form = None if request.method == 'POST': # conduct response if 'conduct_accept' in request.POST: registration.conduct_complete = 1 registration.save() messages.success(request, 'Code of conduct response saved.') elif 'conduct_decline' in request.POST: registration.conduct_complete = 0 registration.save() messages.error(request, 'You must accept the code of conduct to continue.') # waiver response if 'waiver_accept' in request.POST: registration.waiver_complete = 1 registration.save() messages.success(request, 'Waiver response saved.') elif 'waiver_decline' in request.POST: registration.waiver_complete = 0 registration.save() messages.error(request, 'You must accept the waiver to continue.') # attendance/captaining response if 'id' in request.POST and 'attendance' in request.POST and 'captain' in request.POST: attendance_form = RegistrationAttendanceForm(request.POST, instance=registration) if attendance_form.is_valid(): attendance_form.save() if not registration.baggage_id: baggage = Baggage() baggage.save() registration.baggage_id = baggage.id registration.save() if league.check_cost == 0 or league.paypal_cost == 0: registration.registered = datetime.now() registration.save() messages.success(request, 'Attendance and captaining response saved.') else: messages.error(request, 'You must provide an attendance and captaining rating to continue.') # payment type response if 'pay_type' in request.POST: if request.POST.get('pay_type').lower() == 'check': registration.pay_type = 'check' registration.save() messages.success(request, 'Payment type set to check.') elif request.POST.get('pay_type').lower() == 'paypal': registration.pay_type = 'paypal' registration.save() messages.success(request, 'Payment type set to PayPal.') else: messages.error(request, 'You must select a valid payment type to continue.') return HttpResponseRedirect(reverse('league_registration', kwargs={'year': year, 'season': season, 'division': division})) if section == 'conduct' or not registration.conduct_complete: return render_to_response('leagues/registration/conduct.html', {'league': league, 'registration': registration}, context_instance=RequestContext(request)) if section == 'waiver' or not registration.waiver_complete: return render_to_response('leagues/registration/waiver.html', {'league': league, 'registration': registration}, context_instance=RequestContext(request)) if section == 'attendance' or registration.attendance == None or registration.captain == None: attendance_form = RegistrationAttendanceForm(instance=registration) return render_to_response('leagues/registration/attendance.html', {'attendance_form': attendance_form, 'league': league, 'registration': registration}, context_instance=RequestContext(request)) if league.check_cost > 0 or league.paypal_cost > 0: if section == 'pay_type' or not registration.pay_type or (registration.pay_type != 'check' and registration.pay_type != 'paypal'): return render_to_response('leagues/registration/payment.html', {'league': league, 'registration': registration}, context_instance=RequestContext(request)) if not registration.paypal_invoice_id: registration.paypal_invoice_id = str(uuid.uuid4()) registration.save() if not registration.paypal_complete and not registration.check_complete: baseUrl = request.build_absolute_uri(getattr(settings, 'FORCE_SCRIPT_NAME', '/')).replace(request.path_info.replace(' ', '%20'), '') paypal_dict = { 'amount': league.paypal_cost, 'cancel_return': baseUrl + '/leagues/' + str(league.year) + '/' + str(league.season) + '/' + str(league.night) + '/registration/', 'invoice': registration.paypal_invoice_id, 'item_name': str(league.season).capitalize() + ' League ' + str(league.year) + ' - ' + str(league.night).capitalize(), 'notify_url': baseUrl + '/leagues/registration/payment/notification/callback/for/a2ultimate/secret/', 'return_url': baseUrl + '/leagues/' + str(league.year) + '/' + str(league.season) + '/' + str(league.night) + '/registration-complete/', } paypal_form = PayPalPaymentsForm(initial=paypal_dict) # https://ppmts.custhelp.com/app/answers/detail/a_id/165 return render_to_response('leagues/registration/status.html', {'paypal_form': paypal_form, 'league': league, 'registration': registration, 'section': section}, context_instance=RequestContext(request))
def registration(request, year, season, division, section=None): valid_division_states = ['cancelled', 'closed', 'open'] if request.user.is_superuser or request.user.groups.filter( name='junta').exists(): valid_division_states = valid_division_states + ['hidden', 'preview'] try: league = League.objects.get( Q(year=year), Q(season__name=season) | Q(season__slug=season), Q(night=division) | Q(night_slug=division), state__in=valid_division_states, ) except League.DoesNotExist: raise Http404('Division Not Found') try: registration, created = Registrations.objects.get_or_create( user=request.user, league=league) except IntegrityError: registration = Registrations.objects.get(user=request.user, league=league) if not league.is_open(request.user): return render_to_response('leagues/registration/error.html', { 'league': league, 'registration': registration, 'errors': ['closed'], }, context_instance=RequestContext(request)) if not registration.is_complete: errors = [] try: user_profile = request.user.profile if league.min_age: if not user_profile or \ user_profile.get_age_on(league.league_start_date) < league.min_age: errors.append('age') if not user_profile or not user_profile.is_complete_for_user: errors.append('profile') if not request.user.has_completed_player_rating: errors.append('rating') if request.user.has_expired_player_rating: errors.append('rating_expired') except ObjectDoesNotExist: errors.append('unknown') if len(errors): return render_to_response('leagues/registration/error.html', { 'league': league, 'registration': registration, 'errors': errors, }, context_instance=RequestContext(request)) num_steps = 4 if league.checks_accepted: num_steps = num_steps + 1 tick_percentage = 100.0 / num_steps attendance_form = None paypal_form = None if request.method == 'POST': success = True # conduct response if 'conduct_accept' in request.POST: registration.conduct_complete = 1 registration.save() messages.success(request, 'Code of conduct response saved.') elif 'conduct_decline' in request.POST: registration.conduct_complete = 0 registration.save() success = False section = 'conduct' messages.error(request, 'You must accept the code of conduct to continue.') # waiver response if 'waiver_accept' in request.POST: registration.waiver_complete = 1 registration.save() messages.success(request, 'Waiver response saved.') elif 'waiver_decline' in request.POST: registration.waiver_complete = 0 registration.save() success = False section = 'waiver' messages.error(request, 'You must accept the waiver to continue.') # attendance/captaining response if 'id' in request.POST and 'attendance' in request.POST: attendance_form = RegistrationAttendanceForm(request.POST, instance=registration) if attendance_form.is_valid(): attendance_form.save() if not registration.baggage_id: baggage = Baggage() baggage.save() registration.baggage_id = baggage.id registration.save() if league.type == 'league': messages.success( request, 'Attendance and captaining response saved.') else: messages.success(request, 'Attendance response saved.') else: success = False section = 'attendance' if league.type == 'league': messages.error( request, 'You must provide a valid attendance and captaining rating to continue.' ) else: messages.error( request, 'You must provide a valid attendance rating to continue.' ) # payment type response if 'pay_type' in request.POST: if not league.checks_accepted: registration.pay_type = 'paypal' registration.save() messages.error( request, 'Payment type set to PayPal. Checks are not accepted for this league.' ) elif request.POST.get('pay_type').lower() == 'pay with check': registration.pay_type = 'check' registration.save() messages.success(request, 'Payment type set to check.') elif request.POST.get('pay_type').lower() == 'pay with paypal': registration.pay_type = 'paypal' registration.save() messages.success(request, 'Payment type set to PayPal.') else: success = False section = 'pay_type' messages.error( request, 'You must select a valid payment type to continue.') if 'coupon_code' in request.POST: if league.coupons_accepted: if not registration.is_complete and not registration.is_refunded: try: coupon_code = request.POST.get('coupon_code') coupon = Coupon.objects.get(code=coupon_code) except ObjectDoesNotExist: coupon = None if coupon: if coupon.is_valid(league, request.user): registration.coupon = coupon registration.save() messages.success( request, 'Your coupon code has been added and will be redeemed when your registration is completed.' ) else: success = False messages.error( request, 'The coupon code entered is not valid. The code could be expired or past its use limit.' ) else: success = False messages.error( request, 'The coupon code entered does not exist.') else: success = False messages.error( request, 'Your registration is already complete or refunded.') else: success = False messages.error( request, 'Coupon codes are not accepted for this division.') if 'remove_coupon' in request.POST: if registration.coupon: registration.coupon = None registration.save() messages.success( request, 'Your coupon has been removed and will not be used with this registration.' ) else: success = False messages.error( request, 'Could not remove coupon; no coupon is associated with this registration.' ) if 'process_registration' in request.POST: if registration.is_ready_for_payment: registration.payment_complete = True registration.registered = timezone.now() registration.save() success = True messages.success(request, 'Your registration has been processed.') else: messages.error(request, 'Your registration could not be processed.') if success: return HttpResponseRedirect( reverse('league_registration', kwargs={ 'year': year, 'season': season, 'division': division })) if section == 'conduct' or not registration.conduct_complete: return render_to_response('leagues/registration/conduct.html', { 'league': league, 'registration': registration, 'section': 'conduct', 'tick_percentage': tick_percentage }, context_instance=RequestContext(request)) if section == 'waiver' or not registration.waiver_complete: return render_to_response('leagues/registration/waiver.html', { 'league': league, 'registration': registration, 'section': 'waiver', 'tick_percentage': tick_percentage }, context_instance=RequestContext(request)) if section == 'attendance' or \ registration.attendance is None or \ (registration.captain is None and league.type == 'league'): if not attendance_form: attendance_form = RegistrationAttendanceForm(instance=registration) return render_to_response('leagues/registration/attendance.html', { 'league': league, 'registration': registration, 'attendance_form': attendance_form, 'section': 'attendance', 'tick_percentage': tick_percentage }, context_instance=RequestContext(request)) if registration.check_price > 0 or registration.paypal_price > 0: if league.checks_accepted and (section == 'pay_type' or not registration.pay_type or (registration.pay_type != 'check' and registration.pay_type != 'paypal')): return render_to_response('leagues/registration/payment.html', { 'league': league, 'registration': registration, 'section': 'pay_type', 'tick_percentage': tick_percentage }, context_instance=RequestContext(request)) if not registration.paypal_invoice_id: registration.paypal_invoice_id = str(uuid.uuid4()) registration.save() if not registration.paypal_complete and not registration.check_complete: base_url = request.build_absolute_uri( getattr(settings, 'FORCE_SCRIPT_NAME', '/')).replace(request.path_info.replace(' ', '%20'), '') paypal_dict = { 'amount': registration.paypal_price, 'cancel_return': u'{}/leagues/{}/{}/{}/registration/'.format( base_url, league.year, league.season.slug, league.night_slug), 'invoice': registration.paypal_invoice_id, 'item_name': u'{} {} {}'.format(league.season_title, league.year, league.night_title), 'notify_url': u'{}/leagues/registration/payment/{}'.format( base_url, getattr(settings, 'PAYPAL_CALLBACK_SECRET', 'notification/callback/for/a2ultimate/secret/')), 'return_url': u'{}/leagues/{}/{}/{}/registration-complete/'.format( base_url, league.year, league.season.slug, league.night_slug), } paypal_form = PayPalPaymentsForm(initial=paypal_dict) # https://ppmts.custhelp.com/app/answers/detail/a_id/165 return render_to_response('leagues/registration/status.html', { 'paypal_form': paypal_form, 'league': league, 'registration': registration, 'section': 'status', 'tick_percentage': tick_percentage, 'coupon_is_valid': registration.coupon.is_valid(league, request.user) if registration.coupon else False, }, context_instance=RequestContext(request))
def registration(request, year, season, division, section=None): valid_division_states = ['cancelled', 'closed', 'open'] if request.user.is_superuser or request.user.groups.filter(name='junta').exists(): valid_division_states = valid_division_states + ['hidden', 'preview'] try: league = League.objects.get( Q(year=year), Q(season__name=season) | Q(season__slug=season), Q(night=division) | Q(night_slug=division), state__in=valid_division_states, ) except League.DoesNotExist: raise Http404('Division Not Found') try: registration, created = Registrations.objects.get_or_create(user=request.user, league=league) except IntegrityError: registration = Registrations.objects.get(user=request.user, league=league) if not league.is_open(request.user): return render_to_response('leagues/registration/error.html', { 'league': league, 'registration': registration, 'errors': ['closed'], }, context_instance=RequestContext(request)) if not registration.is_complete: errors = [] try: user_profile = request.user.profile if league.min_age: if not user_profile or \ user_profile.get_age_on(league.league_start_date) < league.min_age: errors.append('age') if not user_profile or not user_profile.is_complete_for_user: errors.append('profile') if not request.user.has_completed_player_rating: errors.append('rating') if request.user.has_expired_player_rating: errors.append('rating_expired') except ObjectDoesNotExist: errors.append('unknown') if len(errors): return render_to_response('leagues/registration/error.html', { 'league': league, 'registration': registration, 'errors': errors, }, context_instance=RequestContext(request)) num_steps = 4 if league.checks_accepted: num_steps = num_steps + 1 tick_percentage = 100.0 / num_steps attendance_form = None paypal_form = None if request.method == 'POST': success = True # conduct response if 'conduct_accept' in request.POST: registration.conduct_complete = 1 registration.save() messages.success(request, 'Code of conduct response saved.') elif 'conduct_decline' in request.POST: registration.conduct_complete = 0 registration.save() success = False section = 'conduct' messages.error(request, 'You must accept the code of conduct to continue.') # waiver response if 'waiver_accept' in request.POST: registration.waiver_complete = 1 registration.save() messages.success(request, 'Waiver response saved.') elif 'waiver_decline' in request.POST: registration.waiver_complete = 0 registration.save() success = False section = 'waiver' messages.error(request, 'You must accept the waiver to continue.') # attendance/captaining response if 'id' in request.POST and 'attendance' in request.POST: attendance_form = RegistrationAttendanceForm(request.POST, instance=registration) if attendance_form.is_valid(): attendance_form.save() if not registration.baggage_id: baggage = Baggage() baggage.save() registration.baggage_id = baggage.id registration.save() if league.type == 'league': messages.success(request, 'Attendance and captaining response saved.') else: messages.success(request, 'Attendance response saved.') else: success = False section = 'attendance' if league.type == 'league': messages.error(request, 'You must provide a valid attendance and captaining rating to continue.') else: messages.error(request, 'You must provide a valid attendance rating to continue.') # payment type response if 'pay_type' in request.POST: if not league.checks_accepted: registration.pay_type = 'paypal' registration.save() messages.error(request, 'Payment type set to PayPal. Checks are not accepted for this league.') elif request.POST.get('pay_type').lower() == 'pay with check': registration.pay_type = 'check' registration.save() messages.success(request, 'Payment type set to check.') elif request.POST.get('pay_type').lower() == 'pay with paypal': registration.pay_type = 'paypal' registration.save() messages.success(request, 'Payment type set to PayPal.') else: success = False section = 'pay_type' messages.error(request, 'You must select a valid payment type to continue.') if 'coupon_code' in request.POST: if league.coupons_accepted: if not registration.is_complete and not registration.is_refunded: try: coupon_code = request.POST.get('coupon_code') coupon = Coupon.objects.get(code=coupon_code) except ObjectDoesNotExist: coupon = None if coupon: if coupon.is_valid(league, request.user): registration.coupon = coupon registration.save() messages.success(request, 'Your coupon code has been added and will be redeemed when your registration is completed.') else: success = False messages.error(request, 'The coupon code entered is not valid. The code could be expired or past its use limit.') else: success = False messages.error(request, 'The coupon code entered does not exist.') else: success = False messages.error(request, 'Your registration is already complete or refunded.') else: success = False messages.error(request, 'Coupon codes are not accepted for this division.') if 'remove_coupon' in request.POST: if registration.coupon: registration.coupon = None registration.save() messages.success(request, 'Your coupon has been removed and will not be used with this registration.') else: success = False messages.error(request, 'Could not remove coupon; no coupon is associated with this registration.') if 'process_registration' in request.POST: if registration.is_ready_for_payment: registration.payment_complete = True registration.registered = timezone.now() registration.save() success = True messages.success(request, 'Your registration has been processed.') else: messages.error(request, 'Your registration could not be processed.') if success: return HttpResponseRedirect(reverse('league_registration', kwargs={'year': year, 'season': season, 'division': division})) if section == 'conduct' or not registration.conduct_complete: return render_to_response('leagues/registration/conduct.html', { 'league': league, 'registration': registration, 'section': 'conduct', 'tick_percentage': tick_percentage }, context_instance=RequestContext(request)) if section == 'waiver' or not registration.waiver_complete: return render_to_response('leagues/registration/waiver.html', { 'league': league, 'registration': registration, 'section': 'waiver', 'tick_percentage': tick_percentage }, context_instance=RequestContext(request)) if section == 'attendance' or \ registration.attendance is None or \ (registration.captain is None and league.type == 'league'): if not attendance_form: attendance_form = RegistrationAttendanceForm(instance=registration) return render_to_response('leagues/registration/attendance.html', { 'league': league, 'registration': registration, 'attendance_form': attendance_form, 'section': 'attendance', 'tick_percentage': tick_percentage }, context_instance=RequestContext(request)) if registration.check_price > 0 or registration.paypal_price > 0: if league.checks_accepted and (section == 'pay_type' or not registration.pay_type or (registration.pay_type != 'check' and registration.pay_type != 'paypal')): return render_to_response('leagues/registration/payment.html', { 'league': league, 'registration': registration, 'section': 'pay_type', 'tick_percentage': tick_percentage }, context_instance=RequestContext(request)) if not registration.paypal_invoice_id: registration.paypal_invoice_id = str(uuid.uuid4()) registration.save() if not registration.paypal_complete and not registration.check_complete: base_url = request.build_absolute_uri(getattr(settings, 'FORCE_SCRIPT_NAME', '/')).replace(request.path_info.replace(' ', '%20'), '') paypal_dict = { 'amount': registration.paypal_price, 'cancel_return': u'{}/leagues/{}/{}/{}/registration/'.format(base_url, league.year, league.season.slug, league.night_slug), 'invoice': registration.paypal_invoice_id, 'item_name': u'{} {} {}'.format(league.season_title, league.year, league.night_title), 'notify_url': u'{}/leagues/registration/payment/{}'.format(base_url, getattr(settings, 'PAYPAL_CALLBACK_SECRET', 'notification/callback/for/a2ultimate/secret/')), 'return_url': u'{}/leagues/{}/{}/{}/registration-complete/'.format(base_url, league.year, league.season.slug, league.night_slug), } paypal_form = PayPalPaymentsForm(initial=paypal_dict) # https://ppmts.custhelp.com/app/answers/detail/a_id/165 return render_to_response('leagues/registration/status.html', { 'paypal_form': paypal_form, 'league': league, 'registration': registration, 'section': 'status', 'tick_percentage': tick_percentage, 'coupon_is_valid': registration.coupon.is_valid(league, request.user) if registration.coupon else False, }, context_instance=RequestContext(request))
def registration(request, year, season, division, section=None): league = get_object_or_404( League, Q(year=year), Q(season__name=season) | Q(season__slug=season), Q(night=division) | Q(night_slug=division), ) try: registration, created = Registrations.objects.get_or_create(user=request.user, league=league) except IntegrityError: registration = Registrations.objects.get(user=request.user, league=league) if not league.is_open(request.user): return render_to_response( "leagues/registration/error.html", {"league": league, "registration": registration, "errors": ["closed"]}, context_instance=RequestContext(request), ) if not registration.is_complete: errors = [] try: if not request.user.profile or not request.user.profile.is_complete_for_user: errors.append("profile") if not request.user.playerratings_set.filter(submitted_by=request.user, user=request.user).exists(): errors.append("rating") except ObjectDoesNotExist: errors.append("unknown") if len(errors): return render_to_response( "leagues/registration/error.html", {"league": league, "registration": registration, "errors": errors}, context_instance=RequestContext(request), ) num_steps = 4 if league.checks_accepted: num_steps = num_steps + 1 tick_percentage = 100.0 / num_steps attendance_form = None paypal_form = None if request.method == "POST": success = True # conduct response if "conduct_accept" in request.POST: registration.conduct_complete = 1 registration.save() messages.success(request, "Code of conduct response saved.") elif "conduct_decline" in request.POST: registration.conduct_complete = 0 registration.save() success = False section = "conduct" messages.error(request, "You must accept the code of conduct to continue.") # waiver response if "waiver_accept" in request.POST: registration.waiver_complete = 1 registration.save() messages.success(request, "Waiver response saved.") elif "waiver_decline" in request.POST: registration.waiver_complete = 0 registration.save() success = False section = "waiver" messages.error(request, "You must accept the waiver to continue.") # attendance/captaining response if "id" in request.POST and "attendance" in request.POST: attendance_form = RegistrationAttendanceForm(request.POST, instance=registration) if attendance_form.is_valid(): attendance_form.save() if not registration.baggage_id: baggage = Baggage() baggage.save() registration.baggage_id = baggage.id registration.save() if league.check_price == 0 and league.paypal_price == 0: registration.registered = datetime.now() registration.save() if league.type == "league": messages.success(request, "Attendance and captaining response saved.") else: messages.success(request, "Attendance response saved.") else: success = False section = "attendance" if league.type == "league": messages.error(request, "You must provide a valid attendance and captaining rating to continue.") else: messages.error(request, "You must provide a valid attendance rating to continue.") # payment type response if "pay_type" in request.POST: if not league.checks_accepted: registration.pay_type = "paypal" registration.save() messages.error(request, "Payment type set to PayPal. Checks are not accepted for this league.") elif request.POST.get("pay_type").lower() == "check": registration.pay_type = "check" registration.save() messages.success(request, "Payment type set to check.") elif request.POST.get("pay_type").lower() == "paypal": registration.pay_type = "paypal" registration.save() messages.success(request, "Payment type set to PayPal.") else: success = False section = "pay_type" messages.error(request, "You must select a valid payment type to continue.") if "coupon_code" in request.POST: if league.coupons_accepted: try: coupon = Coupon.objects.get(code=request.POST.get("coupon_code")) except ObjectDoesNotExist: coupon = None if coupon and coupon.is_valid(): registration.coupon = coupon registration.save() messages.success(request, "Your coupon code has been applied.") else: success = False messages.error(request, "You have entered an invalid coupon code.") else: success = False messages.error(request, "Coupon codes are not accepted for this division.") if "remove_coupon" in request.POST: if registration.coupon: registration.coupon = None registration.save() messages.success(request, "Your coupon has been removed and will not be used with this registration.") else: success = False messages.error(request, "No coupon has been added to this registration.") if "process_registration" in request.POST: if registration.is_ready_for_payment: registration.payment_complete = True registration.registered = datetime.now() registration.save() if registration.coupon: registration.coupon.use_count = F("use_count") + 1 registration.coupon.redeemed_at = datetime.now() registration.coupon.save() success = True messages.success(request, "Your registration has been processed.") else: messages.error(request, "Your registration could not be processed.") if success: return HttpResponseRedirect( reverse("league_registration", kwargs={"year": year, "season": season, "division": division}) ) if section == "conduct" or not registration.conduct_complete: return render_to_response( "leagues/registration/conduct.html", {"league": league, "registration": registration, "section": "conduct", "tick_percentage": tick_percentage}, context_instance=RequestContext(request), ) if section == "waiver" or not registration.waiver_complete: return render_to_response( "leagues/registration/waiver.html", {"league": league, "registration": registration, "section": "waiver", "tick_percentage": tick_percentage}, context_instance=RequestContext(request), ) if ( section == "attendance" or registration.attendance == None or (registration.captain == None and league.type == "league") ): if not attendance_form: attendance_form = RegistrationAttendanceForm(instance=registration) return render_to_response( "leagues/registration/attendance.html", { "league": league, "registration": registration, "attendance_form": attendance_form, "section": "attendance", "tick_percentage": tick_percentage, }, context_instance=RequestContext(request), ) if registration.check_price > 0 or registration.paypal_price > 0: if league.checks_accepted and ( section == "pay_type" or not registration.pay_type or (registration.pay_type != "check" and registration.pay_type != "paypal") ): return render_to_response( "leagues/registration/payment.html", { "league": league, "registration": registration, "section": "pay_type", "tick_percentage": tick_percentage, }, context_instance=RequestContext(request), ) if not registration.paypal_invoice_id: registration.paypal_invoice_id = str(uuid.uuid4()) registration.save() if not registration.paypal_complete and not registration.check_complete: baseUrl = request.build_absolute_uri(getattr(settings, "FORCE_SCRIPT_NAME", "/")).replace( request.path_info.replace(" ", "%20"), "" ) paypal_dict = { "amount": registration.paypal_price, "cancel_return": baseUrl + "/leagues/" + str(league.year) + "/" + str(league.season.slug) + "/" + str(league.night_slug) + "/registration/", "invoice": registration.paypal_invoice_id, "item_name": str(league.season_title).capitalize() + " League " + str(league.year) + " - " + str(league.night_title).capitalize(), "notify_url": baseUrl + "/leagues/registration/payment/" + getattr(settings, "PAYPAL_CALLBACK_SECRET", "notification/callback/for/a2ultimate/secret/"), "return_url": baseUrl + "/leagues/" + str(league.year) + "/" + str(league.season.slug) + "/" + str(league.night_slug) + "/registration-complete/", } paypal_form = PayPalPaymentsForm(initial=paypal_dict) # https://ppmts.custhelp.com/app/answers/detail/a_id/165 return render_to_response( "leagues/registration/status.html", { "paypal_form": paypal_form, "league": league, "registration": registration, "section": "status", "tick_percentage": tick_percentage, }, context_instance=RequestContext(request), )