def checkout(request): try: the_id = request.session['cart_id'] cart = Cart.objects.get(id=the_id) except: the_id = None return redirect(reverse("cart")) try: new_order = Order.objects.get(cart=cart) except Order.DoesNotExist: new_order = Order() new_order.cart = cart new_order.user = request.user new_order.order_id = id_generator() request.session['order_id'] = str(new_order.order_id) new_order.save() except: #work on some error message return redirect("process_payment") #run credit card if new_order.status == "Finished": cart.delete() del request.session['cart_id'] del request.session['items_total'] return redirect(reverse("cart")) context = {} template = "cart/checkout.html" return render(request, template, context)
def get(self, request, *args, **kwargs): get_data = super(CheckoutView, self).get(request, *args, **kwargs) cart = self.get_object() user_checkout_id = request.session.get("user_checkout_id") if user_checkout_id != None: user_checkout = UserCheckout.objects.get(id=user_checkout_id) billing_address_id = request.session.get("billing_address_id") shipping_address_id = request.session.get("shipping_address_id") if billing_address_id == None or shipping_address_id == None: return redirect("order_address") else: billing_address = UserAddress.objects.get(id=billing_address_id) shipping_address = UserAddress.objects.get(id=shipping_address_id) new_order = Order() new_order.cart = cart new_order.user = user_checkout new_order.billing_address = billing_address new_order.shipping_address = shipping_address new_order.save() return get_data
def get(self, request, *args, **kwargs): get_data = super(CheckoutView, self).get(request, *args, **kwargs) cart = self.get_object() user_checkout_id = request.session.get("user_checkout_id") if user_checkout_id != None: user_checkout = UserCheckout.objects.get(id=user_checkout_id) # user=user_checkout billing_address_id = request.session.get("billing_address_id") shipping_address_id = request.session.get("shipping_address_id") print(billing_address_id) print(shipping_address_id) if billing_address_id == None or shipping_address_id == None: return redirect("order_address") else: billing_address = UserAddress.objects.get( id=billing_address_id) shipping_address = UserAddress.objects.get( id=shipping_address_id) try: new_order_id = request.session["order_id"] new_order = Order.objects.get(id=new_order_id) except: new_order = Order() request.session["order_id"] = new_order.id # new_order=Order() new_order.cart = cart new_order.user = user_checkout new_order.billing_address = billing_address new_order.shipping_address = shipping_address new_order.save() return get_data
def create_order(cart, request): try: new_order = Order.objects.get(cart=cart) except Order.DoesNotExist: new_order = Order() new_order.cart = cart new_order.user = request.user new_order.order_id = order_id_generator() new_order.save() except: # error message return HttpResponseRedirect(reverse('cart')) return new_order
def order(request): try: the_id = request.session['cart_id'] cart = Cart.objects.get(id=the_id) except: the_id = None return HttpResponseRedirect(reverse('cart_view')) if request.method == 'POST': form = OrderCreateForm(request.POST) if form.is_valid(): order = form.save(commit=False) order.order_id = the_id order.cart = cart order.save() try: new_order = Order.objects.get(cart=cart) messages.success( request, 'Спасибо за заказ! Ваш заказ №{}. Скоро с Вами свяжется наш менеджер.' .format(the_id)) del request.session['cart_id'] del request.session['items_total'] return HttpResponseRedirect('/') except Order.DoesNotExist: new_order = Order() new_order.cart = cart new_order.order_id = the_id new_order.save() messages.success( request, 'Спасибо за заказ! Ваш заказ №{}. Скоро с Вами свяжется наш менеджер.' .format(the_id)) del request.session['cart_id'] del request.session['items_total'] except: return HttpResponseRedirect(reverse('cart_view')) if new_order.status == 'Finished': cart.delete() return HttpResponseRedirect(reverse('cart_view')) context = {} template_name = 'base.html' return render(request, template_name, context)
def checkout(request): ## using the session we created during carts to collect the cart_id. try: the_id = request.session['cart_id'] cart= Cart.objects.get(id= the_id) print cart except : the_id= None ## Redirects to a url that we had initially configured in django urls page return HttpResponseRedirect(reverse("cart")) # Creating a new instance if there is no order present. This instance will be saved as the # new order. try: new_order = Order.objects.get(cart=cart) except Order.DoesNotExist: new_order = Order() new_order.cart = cart new_order.user = request.user new_order.order_id = id_generator() new_order.save() # it will return the user back to the cart except: return HttpResponseRedirect(reverse("cart")) # If the order is indicated as finished the cart will be deleted as well as # resetting the total number of items back to zero. if new_order.status== "Finished": del request.session['cart_id'] del request.session['items_total'] return HttpResponseRedirect(reverse("cart")) context={} return render(request, "products/home.html", context)
def checkout(request): """Checkout.""" # import ipdb; ipdb.set_trace() try: the_id = request.session['cart_id'] cart = Cart.objects.get(id=the_id) except: the_id = None return HttpResponseRedirect(reverse("cart")) try: cart_items = CartItem.objects.filter(cart=cart, active=True) if cart_items.count() < 1: return HttpResponseRedirect(reverse("cart")) for item in cart_items: variant = Variation.objects.get(id=item.variation.id) if item.quantity > variant.quantity: return HttpResponseRedirect(reverse("cart")) except: pass for item in cart_items: if item.variation.quantity <= 0: return HttpResponseRedirect(reverse("cart")) # Getting or creating new Order try: new_order = Order.objects.get(cart=cart) except Order.DoesNotExist: new_order = Order() new_order.cart = cart new_order.user = request.user new_order.order_id = id_generator() new_order.save() except: new_order = None # work on some error message return HttpResponseRedirect(reverse("cart")) # Saving Order in CartItem. try: cart_order = Order.objects.get(order_id=new_order.order_id) cart_items = CartItem.objects.filter(cart=cart, active=True) for cart_item in cart_items: if not cart_item.order: cart_item.order = cart_order cart_item.save() except: print "Failed to save Order in CartItem. Please Check the checkout view in Orders." # Calculating final amount final_amount = 0 if new_order is not None: new_order.sub_total = cart.total new_order.save() final_amount = new_order.get_final_amount() # Adding address try: address_added = request.GET.get("address_added") except: address_added = None if address_added is None: address_form = UserAddressForm() else: address_form = None current_addresses = UserAddress.objects.filter(user=request.user) billing_addresses = UserAddress.objects.get_billing_addresses( user=request.user) print billing_addresses # Saving nessary info at Stripe if request.method == "POST": shipping_a = request.POST['shipping_address'] try: shipping_address_instance = UserAddress.objects.get(id=shipping_a) except: shipping_address_instance = None try: razor_payment_id = request.POST['razorpay_payment_id'] url = 'https://api.razorpay.com/v1/payments/%s' % razor_payment_id resp = requests.get(url, data={}, auth=(razor_key_id, razor_secret)) response = json.loads(resp.content) if response['error_code'] == "" or response['error_code'] == None: for x in new_order.cartitem_set.all(): x.status = "Placed" x.save() new_order.razor_payment_id = response['id'] new_order.payment = "Paid" new_order.shipping_address = shipping_address_instance new_order.save() del request.session['cart_id'] del request.session['items_total'] import ipdb ipdb.set_trace() for item in cart_items: variant = Variation.objects.get(id=item.variation.id) variant.quantity -= item.quantity messages.success(request, "Thank your order. It has been completed!") return HttpResponseRedirect(reverse("user_orders")) except: messages.error(request, 'Payment Failed. Please try again later!') return HttpResponseRedirect(reverse("checkout")) context = { "order": new_order, "address_form": address_form, "current_addresses": current_addresses, "billing_addresses": billing_addresses, "final_amount": final_amount, "stripe_pub": stripe_pub, "razor_key_id": razor_key_id } template = "orders/checkout.html" return render(request, template, context)
def checkout(request): try: the_cart_id = request.session['cart_id'] cart = Cart.objects.get(id=the_cart_id) subbies = CartItem.subbie_type.filter(cart=cart) singles = CartItem.single_type.filter(cart=cart) cart_items = CartItem.objects.filter(cart=cart) except: the_cart_id = None return HttpResponseRedirect(reverse("view_cart")) try: user = request.user except: user = None try: new_order = Order.objects.get(cart=cart) except Order.DoesNotExist: new_order = Order() new_order.cart = cart new_order.order_id = id_generator() new_order.save() except: new_order = None return HttpResponseRedirect(reverse("view_cart")) if request.user.is_authenticated(): new_order.user = request.user print new_order.user print "we gota new order user" new_order.total = cart.total new_order.shipping = cart.shipping_total if new_order.coupon: coupon = new_order.coupon percent_discount = coupon.percent_discount new_total = new_order.total - new_order.total * (float(percent_discount) / 100) print new_total new_order.total = new_total new_order.save() pay_form = PayForm() order = new_order subgo = False singo = False paygo = False usergo = False if subbies and singles: for sub in subbies: if sub.recipient: subgo = True else: subgo = False if order.main_recipient: singo = True else: singo = False if subgo == True and singo == True: paygo = True else: paygo = False elif not subbies and singles: if order.main_recipient: singo = True else: singo = False if subgo == False and singo == True: paygo = True else: paygo = False elif subbies and not singles: for sub in subbies: if sub.recipient: subgo = True else: subgo = False if subgo == True and singo == False: paygo = True else: paygo = False # check user status user = request.user if user.is_authenticated(): usergo = True elif singles and not subbies: usergo = True else: usergo = False if request.POST: pay_form = PayForm(request.POST) token = request.POST['stripeToken'] last4 = request.POST['last4'] card_type = request.POST['card_type'] payer_name = request.POST['name'] payer_email = request.POST['email'] if pay_form.is_valid(): amount = int(order.total * 100) # convert to cents fee = int(order.total * 100 * settings.TRINITY_FEE * .01) # % of inputed ($) amount, in cents try: customer = stripe.Customer.create( source=token, description=payer_email, api_key=settings.TRINITY_API_KEY, ) charge = stripe.Charge.create( amount=amount, # amount in cents, again currency="usd", application_fee=fee, customer=customer.id, api_key=settings.TRINITY_API_KEY, ) order.status = "Finished" order.payer_name = payer_name order.payer_email = payer_email order.last4 = last4 order.card_type = card_type order.save() if request.user.is_authenticated(): try: # see if any other cc exist, and un default them credit_cards = CreditCard.objects.filter(user=user) for card in credit_cards: card.default = False card.save() except: pass cc = CreditCard(user=user, last4=last4, card_type=card_type) cc.stripe_id = customer.id cc.payer_name = payer_name cc.payer_email = payer_email cc.save() else: print "no user at hand" pass order_id = order.order_id # make records here: # get recipient, check for last record. is last record greater than sub. first issue? # first look for latest record for this recipient, if greater than subscription.first_issue for sub in subbies: # two paths here- regular subbie and renewal recipient = sub.recipient print recipient if sub.subscription.type == 2: # renewal last_record = Record.objects.filter(recipient=recipient).order_by('issue').last() ish = last_record.issue + 1 else: ish = sub.subscription.first_issue # try: # all_record = Record.objects.get(recipient=sub.recipient, originating_order=order, issue=ish) for x in range(0, sub.subscription.term): try: record = Record.objects.get(recipient=sub.recipient, originating_order=order, issue=ish) pass except Record.DoesNotExist: new_record = Record(recipient=sub.recipient, originating_order=order, issue=ish) new_record.save() ish += 1 for single in singles: ish = int(single.single.slug) try: bo = BackIssue.objects.get( recipient=order.main_recipient, originating_order=order, issue=ish, quantity=single.quantity) pass except BackIssue.DoesNotExist: new_bo = BackIssue( recipient=order.main_recipient, originating_order=order, issue=ish, quantity=single.quantity) new_bo.save() order.status = "Recorded" order.save() try: the_cart_id = request.session['cart_id'] cart = Cart.objects.get(id=the_cart_id) except: cart = False if cart: deactivate = Cart.objects.get(id=the_cart_id) deactivate.active = False deactivate.save() del request.session['cart_id'] del request.session['items_total'] # now we notify. current_site = Site.objects.get_current() local = settings.LOCAL email_context = { "cart": cart, "subbies": subbies, "singles": singles, "order": order, "cart_items": cart_items, "current_site": current_site, "local": local, } if settings.EMAIL_NOTIFICATIONS is True: recipient = "*****@*****.**" print "email notifications are true and we're about to send" purchase_notify(email_context, recipient) else: print "email settings not true" pass return HttpResponseRedirect(reverse('result', args=(order_id,))) except stripe.CardError, e: # Since it's a decline, stripe.error.CardError will be caught body = e.json_body err = body['error'] print "Status is: %s" % e.http_status print "Type is: %s" % err['type'] print "Code is: %s" % err['code'] print "Message is: %s" % err['message'] messages.error(request, "%s The payment could not be completed." % err['message']) except stripe.error.InvalidRequestError, e: # Invalid parameters were supplied to Stripe's API messages.error(request, "%s The payment could not be completed." % err['message']) except stripe.error.AuthenticationError, e: # Authentication with Stripe's API failed (maybe you changed API keys recently) messages.error(request, "%s The payment could not be completed." % err['message'])
def checkout_saved_cc(request): try: the_cart_id = request.session['cart_id'] cart = Cart.objects.get(id=the_cart_id) subbies = CartItem.subbie_type.filter(cart=cart) singles = CartItem.single_type.filter(cart=cart) cart_items = CartItem.objects.filter(cart=cart) cc_id = request.POST['ccRadios'] cc = CreditCard.objects.get(id=cc_id) except: the_cart_id = None return HttpResponseRedirect(reverse("view_cart")) try: user = request.user except: user = None try: new_order = Order.objects.get(cart=cart) except Order.DoesNotExist: new_order = Order() new_order.cart = cart new_order.order_id = id_generator() new_order.save() except: new_order = None return HttpResponseRedirect(reverse("view_cart")) if request.POST: order = new_order amount = int(order.total * 100) # convert to cents fee = int(order.total * 100 * settings.TRINITY_FEE * .01) # % of inputed ($) amount, in cents customer = cc.stripe_id try: charge = stripe.Charge.create( amount=amount, # amount in cents, again currency="usd", application_fee=fee, customer=customer, api_key=settings.TRINITY_API_KEY, ) order.status = "Finished" order.payer_name = cc.payer_name order.payer_email = cc.payer_email order.last4 = cc.last4 order.card_type = cc.card_type order.save() order_id = order.order_id # make records here: # get recipient, check for last record. is last record greater than sub. first issue? # first look for latest record for this recipient, if greater than subscription.first_issue print "HERE in checkout-cc, we are going to make recrods" print "order is %s" % order print "cart is %s" % cart print "cart items is %s" % cart_items print "subbies is %s" % subbies print "singlges is %s" % singles for sub in subbies: # two paths here- regular subbie and renewal print "wea are in subbie path" recipient = sub.recipient print recipient print "type is %s" % sub.subscription.type if sub.subscription.type == 2: # renewal print "chcekout cc, renewal" last_record = Record.objects.filter(recipient=recipient).order_by('issue').last() ish = last_record.issue + 1 else: # not renewal print "checkout cc not renewal" ish = sub.subscription.first_issue # try: # all_record = Record.objects.get(recipient=sub.recipient, originating_order=order, issue=ish) for x in range(0, sub.subscription.term): try: record = Record.objects.get(recipient=sub.recipient, originating_order=order, issue=ish) pass except Record.DoesNotExist: new_record = Record(recipient=sub.recipient, originating_order=order, issue=ish) new_record.save() ish += 1 for single in singles: ish = int(single.single.slug) print "cehkout cc single" try: bo = BackIssue.objects.get( recipient=order.main_recipient, originating_order=order, issue=ish, quantity=single.quantity) pass except BackIssue.DoesNotExist: new_bo = BackIssue( recipient=order.main_recipient, originating_order=order, issue=ish, quantity=single.quantity) new_bo.save() order.status = "Recorded" order.save() try: the_cart_id = request.session['cart_id'] cart = Cart.objects.get(id=the_cart_id) except: cart = False if cart: deactivate = Cart.objects.get(id=the_cart_id) deactivate.active = False deactivate.save() del request.session['cart_id'] del request.session['items_total'] # now we notify. current_site = Site.objects.get_current() local = settings.LOCAL email_context = { "cart": cart, "subbies": subbies, "singles": singles, "order": order, "cart_items": cart_items, "current_site": current_site, "local": local, } if settings.EMAIL_NOTIFICATIONS is True: recipient = "*****@*****.**" print "email notifications are true and we're about to send" purchase_notify(email_context, recipient) else: print "email settings not true" pass return HttpResponseRedirect(reverse('result', args=(order_id,))) except stripe.CardError, e: # Since it's a decline, stripe.error.CardError will be caught body = e.json_body err = body['error'] print "Status is: %s" % e.http_status print "Type is: %s" % err['type'] print "Code is: %s" % err['code'] print "Message is: %s" % err['message'] messages.error(request, "%s The payment could not be completed." % err['message']) except stripe.error.InvalidRequestError, e: # Invalid parameters were supplied to Stripe's API messages.error(request, "%s The payment could not be completed." % err['message'])