def get_back_on_track(request): ''' will look at the fundraiser and determine where at in the order you should be redirected to. ''' session = SessionVariable(request,'current_fundraiser') if session.has_fundraiser(): order_step = request.session['order_step'] if order_step == 'choose_fundraiser': return HttpResponseRedirect(reverse('choose_fundraiser')) elif order_step == 'selections': fund_type = session.session_fundraiser().type return HttpResponseRedirect(reverse('chosen_fundraiser_type',args=(fund_type.slug,))) elif order_step == 'choose_salsas': return HttpResponseRedirect(reverse('choose_salsas')) elif order_step == 'create_shipment': return HttpResponseRedirect(reverse('create_shipment')) elif order_step == 'checkout': return HttpResponseRedirect(reverse('checkout')) elif order_step == 'process_checkout': return HttpResponseRedirect(reverse('process_checkout')) else: return HttpResponseRedirect(reverse('describe_fundraiser')) else: return HttpResponseRedirect(reverse('describe_fundraiser'))
def choose_fundraiser(request): request.session['order_step'] = 'choose_fundraiser' if request.POST: try: slug = request.POST['option'] option = FundraiserType.objects.get(slug=slug) except: slug = None option = None try: plan_id = request.POST['plan'] plan = FundraiserCategory.objects.get(id=plan_id) except: plan_id = None plan = None if option is None: messages.error(request,'Please select an option.') return HttpResponseRedirect(reverse('choose_fundraiser')) else: session = SessionVariable(request,'current_fundraiser') session_fundraiser = session.session_fundraiser() session_fundraiser.plan = plan session_fundraiser.type = option session_fundraiser.save() return HttpResponseRedirect(reverse('chosen_fundraiser_type')) fundraiser_options = return_all_objects(FundraiserType) plans = return_all_objects(FundraiserCategory) context = { 'types' : fundraiser_options, 'plans' : plans, 'settings' : settings} template = 'fundraiser/choose.html' return render(request,template,context)
def checkout(request): request.session['order_step'] = 'checkout' session = SessionVariable(request,'current_fundraiser') session_shipment = session.session_shipment() session_fundraiser = session.session_fundraiser() try: stripe_api_key = settings.STRIPE_API_KEY except: stripe_api_key = None context = { 'stripe_api_key' : stripe_api_key, 'session_shipment' : session_shipment, 'session_fundraiser' : session_fundraiser } template = 'fundraiser/checkout.html' return render( request,template,context, context_instance=RequestContext(request, processors=[get_home_variables]) )
def edit_shipment(request,id): request.session['order_step'] = 'checkout' session = SessionVariable(request,'current_fundraiser') session_fundraiser = session.session_fundraiser() session_shipment = session.session_shipment() profile_form = ShipmentProfileForm(request.POST or None,instance=session_fundraiser.profile) address_form = AddressForm(request.POST or None, instance=session_shipment.address) if profile_form.is_valid() and address_form.is_valid(): profile_form.save() address_form.save() title = 'You have successfully updated your shipment.' messages.success(request,title) return HttpResponseRedirect(reverse('create_shipment')) template = 'fundraiser/edit_shipment.html' context = { 'shipment_address_form' : address_form, 'shipment_profile_form' : profile_form, 'session_shipment' : session_shipment } return render(request,template,context)
def chosen_fundraiser_type(request): request.session['order_step'] = 'selections' session = SessionVariable(request,'current_fundraiser') session_shipment = session.session_shipment() if request.POST: salsas = ChooseSalsasFundraiser(request) salsas.set_product_and_qty_selection() if salsas.theres_no_selections_made(): title = 'Please make at least one selection!' messages.error(request,title) return HttpResponseRedirect(reverse('chosen_fundraiser_type')) else: if session_shipment.has_selections(): session_shipment.remove_selections() if session_shipment: try: salsas.save_selections() except: title = 'There was an error. Make sure you use only numbers in quantities!' messages.error(request,title) return HttpResponseRedirect(reverse('chosen_fundraiser_type')) return HttpResponseRedirect(reverse('create_shipment')) show_top_sellers = session.session_fundraiser().plan.show_top_sellers context = { 'session' : session, 'settings' : settings, 'show_top_sellers' : show_top_sellers } template = 'fundraiser/choose-salsas.html' return render(request,template,context)
def post(self,request,format=None): session = SessionVariable(request,'current_fundraiser') session_fundraiser = session.session_fundraiser() session_shipment = session.session_shipment() post = request.POST check = post['type'] == 'check' credit = post['type'] == 'credit' comment = post['comment'] response = None comment_form,created = FundraiserOrderComment.objects.get_or_create(fundraiser=session_fundraiser,comment=comment) if created: session_shipment.comment = comment_form session_shipment.save() if check: if session_fundraiser: payment = Payment.objects.create(type='check') payment.fundraiser = session_fundraiser session_fundraiser.status = 'unpaid' session_fundraiser.finalized = True payment.save() session_fundraiser.save() return Response('Success', status=status.HTTP_200_OK) elif credit: stripe.api_key = STRIPE_API_KEY['key'] token = post['token'] amount = float(post['amount']) description = post['description'] transaction_succeeded = False amount_in_cents = (int(amount*100)) try: charge = stripe.Charge.create( amount=amount_in_cents, # amount in cents, again currency="usd", source=token, description=description ) transaction_succeeded = True except stripe.error.CardError, e: return Response(e,status=status.HTTP_404_NOT_FOUND) # if session fundraiser exists and payment was successful: # then create a payment and set the fundraiser if session_fundraiser and transaction_succeeded: payment = Payment.objects.create(type='credit') payment.fundraiser = session_fundraiser session_fundraiser.status = 'paid' session_fundraiser.finalized = True last_4 = charge['card']['last4'] card_type = charge['card']['brand'] payment.last_4 = last_4 payment.card_type = card_type payment.stripe_id = charge['balance_transaction'] payment.save() session_fundraiser.save() return Response('Success', status=status.HTTP_200_OK)