예제 #1
0
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)
예제 #2
0
	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
예제 #3
0
    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
예제 #4
0
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
예제 #5
0
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)
예제 #6
0
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)
예제 #7
0
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)
예제 #8
0
파일: views.py 프로젝트: davogler/POSTv3
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'])
예제 #9
0
파일: views.py 프로젝트: davogler/POSTv3
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'])