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_profile_for_fundraiser(request): session = SessionVariable(request) try: user_profiles = Profile.objects.filter(account=session.user()) except: user_profiles = None template = "fundraiser/choose_profile_for_fundraiser.html" context = {'user_profiles' : user_profiles} return render(request,template,context)
def start_process(request): session = SessionVariable(request) if session.user(): if session.user_has_a_profile(): return HttpResponseRedirect(reverse('choose_profile_for_fundraiser')) else: return HttpResponseRedirect(reverse('describe_fundraiser')) else: return HttpResponseRedirect(reverse('describe_fundraiser'))
def choose_salsas(request): request.session['order_step'] = 'choose_salsas' session_shipment = SessionVariable(request,'current_fundraiser').session_shipment() session_fundraiser = SessionVariable(request,'current_fundraiser').session_fundraiser() session_fundraiser.discount = 0 session_fundraiser.save() context = {} template = 'fundraiser/shipment.html' return render(request,template,context)
def auth_simple_sign_up(request): form = SimpleSignUpForm(request.POST or None) if form.is_valid(): cleaned_form = form.cleaned_data username = cleaned_form['username'] password = cleaned_form['password'] confirmation = cleaned_form['confirm'] user,created = User.objects.get_or_create(username=username) if created: session_finalized_fundraiser = SessionVariable(request).session_finalized_fundraiser() user.set_password(password) user.save() if session_finalized_fundraiser is None: title = 'session expired. call back office to set up account.' messages.error(request,title) return HttpResponseRedirect(reverse('describe_fundraiser')) profile = session_finalized_fundraiser.profile profile.account = user profile.save() session_finalized_fundraiser.account = user session_finalized_fundraiser.save() auth = authenticate(username=username,password=password) login(request,auth) title = str(user.username) + ', You have successfully signed up! See your profile to manage your Organization.' messages.success(request,title) return HttpResponseRedirect(reverse('process_checkout')) else: title = 'Username exists, pick a more unique username!' messages.error(request,title) return HttpResponseRedirect(reverse('process_checkout')) else: title = 'There was an error in creating your account. Make sure passwords match!' messages.error(request,title) return HttpResponseRedirect(reverse('process_checkout'))
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 profile_show(request): session = SessionVariable(request) context = {'user_profiles' : session.profiles()} template = 'account/profile/show.html' return render(request,template,context)
def __init__(self,request,code): self.request = request self.code = code self.type = None self.discount = None self.session_fundraiser = SessionVariable(request,'current_fundraiser').session_fundraiser()
class Discount: def __init__(self,request,code): self.request = request self.code = code self.type = None self.discount = None self.session_fundraiser = SessionVariable(request,'current_fundraiser').session_fundraiser() def check_if_generic_code(self): try: generic_code = GenericDiscount.objects.get(special_code=self.code) if generic_code.active == False: generic_code = False else: self.type = 'generic' self.discount = generic_code except: generic_code = False return generic_code def check_if_single_code(self): try: single_code = SingleDiscount.objects.get(special_code=self.code) if single_code.active == False: single_code = False else: self.type = 'single' self.discount = single_code except: single_code = False return single_code def is_valid(self): if self.check_if_generic_code(): return self.check_if_generic_code() elif self.check_if_single_code(): return self.check_if_single_code() else: return False def set_discount(self): if self.discount.percent and self.discount.dollars: discount = (self.session_fundraiser.total_cost() * self.discount.to_percent()) discount += self.discount.dollars self.session_fundraiser.discount = discount self.session_fundraiser.save() elif self.discount.percent: discount = (self.session_fundraiser.total_cost() * self.discount.to_percent()) self.session_fundraiser.discount = discount self.session_fundraiser.save() elif self.discount.dollars: self.session_fundraiser.discount = self.discount.dollars self.session_fundraiser.save() else: return False def use_discount(self): if self.type: if self.discount.active == False: return False else: if self.type == 'single': self.discount.fundraiser = self.session_fundraiser self.discount.used += 1 self.set_discount() if self.discount.expired(): self.discount.active = False self.discount.save() return True
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)
def process_checkout(request): request.session['order_step'] = None try: if request.session['current_fundraiser']: request.session['finalized_order'] = request.session['current_fundraiser'] del request.session['current_fundraiser'] except: pass try: finalized_order = Fundraiser.objects.get(id=request.session['finalized_order']) order_type = str(finalized_order.get_payment_type()) except: finalized_order = None order_type = None session_finalized_fundraiser = SessionVariable(request).session_finalized_fundraiser() context = { 'finalized_order' : finalized_order, 'order_type' : order_type, 'form' : SimpleSignUpForm } # if session_finalized_fundraiser.profile.email: if session_finalized_fundraiser.profile.email and not session_finalized_fundraiser.receipt_email_sent: data = { 'user' : session_finalized_fundraiser.profile.contact_person(), 'organization' : session_finalized_fundraiser.profile.organization, 'address' : session_finalized_fundraiser.shipment().address.street, 'city' : session_finalized_fundraiser.shipment().address.city, 'state' : session_finalized_fundraiser.shipment().address.state, 'zip_code' : session_finalized_fundraiser.shipment().address.zip_code, 'total' : session_finalized_fundraiser.net_total_in_dollars(), 'title' : session_finalized_fundraiser.title, 'selections' : session_finalized_fundraiser.selections_str(), 'shipping' : session_finalized_fundraiser.free_shipping(), 'phone' : session_finalized_fundraiser.profile.phone_number } template_name = EMAIL_TEMPLATE_DIR + 'email_fundraiser_receipt_text_based.txt' text_email = loader.render_to_string(template_name,data) email = session_finalized_fundraiser.profile.email type = session_finalized_fundraiser.type send_fundraiser_receipt_email.delay( str(finalized_order.organization())+' Fundraiser', text_email, 'Jose Madrid Salsa fundraising <*****@*****.**>', [email], type.id ) session_finalized_fundraiser.receipt_email_sent = True session_finalized_fundraiser.save() template = 'fundraiser/checkout-invoice.html' return render(request,template,context)
def create_shipment(request): request.session['order_step'] = 'create_shipment' shipment_profile_form = ShipmentProfileForm(request.POST or None) shipment_address_form = AddressForm(request.POST or None) billing_address_form = AddressForm(request.POST or None) if shipment_profile_form.is_valid() and shipment_address_form.is_valid(): a = shipment_address_form.cleaned_data p = shipment_profile_form.cleaned_data title = a['title'] street = a['street'] line_2 = a['line_2'] city = a['city'] state = a['state'] zip_code = a['zip_code'] first_name = p['first_name'] last_name = p['last_name'] phone = p['phone_number'] email = p['email'] try: address, created = Address.objects.get_or_create( title=title, street=street, line_2=line_2, city=city, state=state, zip_code=zip_code ) except: address = Address.objects.filter(street=street).first() session_fundraiser = SessionVariable(request,'current_fundraiser').session_fundraiser() session_shipment = SessionVariable(request,'current_fundraiser').session_shipment() if session_fundraiser.profile is None: messages.error( request, "Your profile was deleted from logging out, you'll have to recreate it.") return HttpResponseRedirect(reverse('describe_fundraiser')) else: session_shipment.address = address session_shipment.title = title session_shipment.save() session_fundraiser.profile.first_name = first_name session_fundraiser.profile.last_name = last_name session_fundraiser.profile.phone_number = phone session_fundraiser.profile.email = email session_fundraiser.profile.address = address session_fundraiser.profile.save() return HttpResponseRedirect(reverse('checkout')) context = { 'shipment_profile_form' : shipment_profile_form, 'shipment_address_form' : shipment_address_form, 'billing_address_form' : billing_address_form } template = 'fundraiser/shipment.html' return render(request,template,context)