Example #1
0
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))
Example #2
0
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))
Example #3
0
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))
Example #4
0
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))
Example #5
0
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),
    )