def renew_membership(request, club_name): """new club memberships and renewals""" user = request.user up = user.get_profile() club = Club.objects.get(safe_name=club_name) try: m = Membership.objects.get(user_prof=up, club=club, paid=True) m.price = club.renew_cost except Membership.DoesNotExist: #create new membership m = Membership() m.club = club m.user_prof = up m.price = club.new_member_cost m.start = datetime.date.today() m.valid_thru = m.start + datetime.timedelta(days=365) #create an order order = Order() order.user_prof = up order.save() m.order = order m.save() redirect_target = request.build_absolute_uri( reverse('club_detail', kwargs={'club_name': club_name})) # What you want the button to do. paypal_dict = { "business": club.paypal_email, #'business': '*****@*****.**', "amount": order.calc_total_price(), "item_name": 'Membership for %s ' % club.name, "invoice": order.pk, "notify_url": request.build_absolute_uri(reverse('paypal-ipn')), "return_url": redirect_target, "cancel_return": redirect_target, } paypal_form = PayPalPaymentsForm(initial=paypal_dict) context = { 'paypal_form': paypal_form.render(), 'price': paypal_dict['amount'], 'club': club, 'order': order, 'items': [i.as_leaf_model().cart_name() for i in order.items.all()] } return render_to_response('registration/start_pay.html', context, context_instance=RequestContext(request))
class TestOrder(unittest.TestCase): def tearDown(self): clear_db() def setUp(self): self.c = Club() self.c.name = "test club" self.c.full_clean() self.c.save() self.season = Season() self.season.club = self.c self.season.year = 2011 self.season.save() self.race_class = RaceClass() self.race_class.name = "CSP" self.race_class.pax = .875 self.race_class.club = self.c self.race_class.save() self.e = Event() self.e.name = "test event" self.e.date = datetime.date.today() self.e.season = self.season self.e.club = self.c self.e.save() self.user = User() self.user.first_name = "justin" self.user.last_name = "gray" self.user.username = "******" self.user.save() self.user2 = User() self.user2.first_name = "sirius" self.user2.last_name = "gray" self.user2.username = "******" self.user2.save() def test_total_price(self): self.o = Order() self.o.user_prof = self.user.get_profile() self.o.save() item1 = Registration() item1.number = 11 item1.race_class = self.race_class item1.pax_class = None item1.event = self.e item1.price = "40.00" item1.order = self.o item1.club = self.c item1.save() item2 = Membership() item2.user_prof = self.user.get_profile() item2.club = self.c item2.num = 1 item2.start = datetime.date.today() - datetime.timedelta(days=300) item2.valid_thru = datetime.date.today() + datetime.timedelta(days=1) item2.price = "60.00" item2.order = self.o item2.save() self.o.calc_total_price() self.assertEqual(self.o.total_price, "100.00") club = Club() club.name = "test-test" club.save() c = Coupon() c.discount_amount = "10.00" c.permanent = True c.code = "aaa" c.expires = datetime.date.today() + datetime.timedelta(days=1) c.club = club c.save() self.o.coupon = c self.o.calc_total_price() self.assertEqual(self.o.total_price, '90.00')
class TestOrder(unittest.TestCase): def tearDown(self): clear_db() def setUp(self): self.c = Club() self.c.name = "test club" self.c.full_clean() self.c.save() self.season = Season() self.season.club = self.c self.season.year = 2011 self.season.save() self.race_class = RaceClass() self.race_class.name = "CSP" self.race_class.pax = .875 self.race_class.club = self.c self.race_class.save() self.e = Event() self.e.name = "test event" self.e.date = datetime.date.today() self.e.season = self.season self.e.club = self.c self.e.save() self.user = User() self.user.first_name = "justin" self.user.last_name = "gray" self.user.username = "******" self.user.save() self.user2 = User() self.user2.first_name = "sirius" self.user2.last_name = "gray" self.user2.username = "******" self.user2.save() def test_total_price(self): self.o = Order() self.o.user_prof = self.user.get_profile() self.o.save() item1 = Registration() item1.number = 11 item1.race_class = self.race_class item1.pax_class = None item1.event = self.e item1.price = "40.00" item1.order = self.o item1.club = self.c item1.save() item2 = Membership() item2.user_prof = self.user.get_profile() item2.club = self.c item2.num = 1 item2.start = datetime.date.today() - datetime.timedelta(days=300) item2.valid_thru = datetime.date.today()+datetime.timedelta(days=1) item2.price = "60.00" item2.order = self.o item2.save() self.o.calc_total_price() self.assertEqual(self.o.total_price, "100.00") club = Club() club.name ="test-test" club.save() c = Coupon() c.discount_amount = "10.00" c.permanent = True c.code = "aaa" c.expires = datetime.date.today() + datetime.timedelta(days=1) c.club = club c.save() self.o.coupon = c self.o.calc_total_price() self.assertEqual(self.o.total_price, '90.00')
def event_register(request, club_name, season_year, event_name, username=None): """register for an event""" up = request.user.get_profile() e = Event.objects.select_related('season', 'season__club', 'user_profile').\ get(season__club__safe_name=club_name, season__year=season_year, safe_name=event_name) redirect_target = reverse('registration.views.event', args=[club_name, season_year, event_name]) form_template = 'registration/event_reg_form.html' reg = None if username: reg = e.regs.get(user_profile__user__username=username) show_cars = bool( Car.objects.filter(user_profile=up, provisional=False).count()) class UserRegForm( RegForm ): #have to create the form here, since it's specific to a user car = CarChoiceField(queryset=Car.objects.filter(user_profile=up, provisional=False), required=False, empty_label=None) event = ModelChoiceField(queryset=Event.objects.filter(pk=e.pk), initial=e.pk, widget=HiddenInput()) club = ModelChoiceField(queryset=Club.objects.filter(pk=e.club.pk), initial=e.club.pk, widget=HiddenInput()) user_profile = ModelChoiceField( queryset=UserProfile.objects.filter(pk=up.pk), initial=up.pk, widget=HiddenInput()) def __init__(self, *args, **kwargs): super(UserRegForm, self).__init__(*args, **kwargs) if not show_cars: self.fields['car'].widget = HiddenInput() if reg and reg.paid: #hide reg if paid self.fields['prepay'].widget = HiddenInput() self.fields['coupon_code'].widget = HiddenInput() if request.method == 'POST': form = UserRegForm(request.POST, request.FILES, user=request.user, instance=reg) if form.is_valid(): reg = form.save() if form.cleaned_data['prepay']: #figure out base reg price (member or not?) member = up.is_member(e.club) if member: reg.price = e.member_price else: reg.price = e.non_member_price up = request.user.get_profile() #construct order, add reg to order order = Order() order.user_prof = up if form.coupon: order.coupon = form.coupon order.coupon.uses_left -= 1 order.save() reg.order = order reg.save() # What you want the button to do. paypal_dict = { "business": e.club.paypal_email, #'business': '*****@*****.**', "amount": order.calc_total_price(), "item_name": 'Registration for %s %s' % (e.club.name, e.name), "invoice": order.pk, "notify_url": request.build_absolute_uri(reverse('paypal-ipn')), "return_url": request.build_absolute_uri(redirect_target), "cancel_return": request.build_absolute_uri(redirect_target), } if paypal_dict[ 'amount'] == '0.00': #don't need to pay if the price is 0 order.payment_complete() return HttpResponseRedirect(redirect_target) else: paypal_form = PayPalPaymentsForm(initial=paypal_dict) context = { 'paypal_form': paypal_form.render(), 'price': paypal_dict['amount'], 'club': e.club, 'order': order, 'items': [ i.as_leaf_model().cart_name() for i in order.items.all() ] } return render_to_response( 'registration/start_pay.html', context, context_instance=RequestContext(request)) return HttpResponseRedirect(redirect_target) else: form = UserRegForm(instance=reg) context = { 'event': e, 'season': e.season, 'club': e.club, 'form': form, } return render_to_response(form_template, context, context_instance=RequestContext(request))