Esempio n. 1
0
def checkout(request):
    if not request.user.is_authenticated:
        return redirect('login')
    else:
        try:
            if (request.user.is_superuser or
                    request.user.swimmer.graduation_year is not None):
                if request.method == "POST":
                    order_form = OrderForm(request.POST)
                    payment_form = MakePaymentForm(request.POST)

                    if order_form.is_valid() and payment_form.is_valid():
                        # Save The Order
                        order = order_form.save(commit=False)
                        order.date = timezone.now()
                        order.save()

                        # Save the Order Line Items
                        cart = request.session.get('cart', {})
                        save_order_items(order, cart)

                        # Charge the Card
                        items_and_total = get_cart_items_and_total(cart)
                        total = items_and_total['totals']
                        stripe_token = payment_form.cleaned_data['stripe_id']

                        try:
                            customer = charge_card(stripe_token, total)
                        except stripe.error.CardError:
                            messages.error(request, "Your card was declined!")

                        if customer.paid:
                            messages.error(request,
                                           "You have successfully paid!")

                            # Send confirmation email
                            send_confirmation_email(request.user.email,
                                                    request.user,
                                                    items_and_total)

                            # Clear the Cart
                            del request.session['cart']
                            return redirect('get_products')

                else:
                    order_form = OrderForm()
                    payment_form = MakePaymentForm()
                    context = {'order_form': order_form,
                               'payment_form': payment_form,
                               'publishable': settings.STRIPE_PUBLISHABLE}
                    cart = request.session.get('cart', {})
                    cart_items_and_total = get_cart_items_and_total(cart)
                    context.update(cart_items_and_total)

        except Swimmer.DoesNotExist:
            return HttpResponseForbidden()

    return render(request, "checkout/checkout.html", context)
Esempio n. 2
0
def checkout(request):
    print("**** Enter checkout ***")
    print(request.method)
    if request.method == "POST":
        print("you are posting - great")
        # Save The Order
        order_form = OrderForm(request.POST)
        order = order_form.save(commit=False)
        order.date = timezone.now()
        order.user = request.user
        order.save()

        # Save the Order Line Items
        print("in the cart")
        cart = request.session.get('cart', {})
        for id, quantity in cart.items():
            service = get_object_or_404(Service, pk=id)
            order_line_item = OrderLineItem(order=order,
                                            service=service,
                                            quantity=quantity)

            order_line_item.save()
        print("did cart stuff")

        # Charge the Card
        payment_form = MakePaymentForm(request.POST)
        if payment_form.is_valid():
            total = get_cart_items_and_total(cart)['total']
            total_in_cent = int(total * 100)
            try:
                customer = stripe.Charge.create(
                    amount=total_in_cent,
                    currency="EUR",
                    description="Website_Transaction",
                    card=payment_form.cleaned_data['stripe_id'],
                )
                if customer.paid:
                    messages.error(request, "You have successfully paid")
            except stripe.error.CardError:
                messages.error(request, "Your card was declined!")

        #Clear the Cart
        del request.session['cart']
        return redirect("profile")
    else:
        order_form = OrderForm()
        payment_form = MakePaymentForm()
        context = {
            'order_form': order_form,
            'payment_form': payment_form,
            'publishable': settings.STRIPE_PUBLISHABLE_KEY
        }
        cart = request.session.get('cart', {})
        cart_items_and_total = get_cart_items_and_total(cart)
        context.update(cart_items_and_total)

    return render(request, "checkout/checkout.html", context)
Esempio n. 3
0
def checkout(request):
    if request.method == "POST":
        order_form = OrderForm(request.POST)
        payment_form = MakePaymentForm(request.POST)
        print(payment_form.errors)
        if order_form.is_valid() and payment_form.is_valid():
            print("******ODER AND PAYMENT VALID")
            # Save The Order
            order = order_form.save(commit=False)
            order.date = timezone.now()
            order.save()

            # Save the Order Line Items
            cart = request.session.get('cart', {})
            save_order_items(order, cart)

            # Charge the Card
            items_and_total = get_cart_items_and_total(cart)
            total = items_and_total['total']
            stripe_token = payment_form.cleaned_data['stripe_id']

            try:
                customer = charge_card(stripe_token, total)
            except stripe.error.CardError:
                messages.error(request, "Your card was declined!")

            if customer.paid:
                messages.error(request, "You have successfully paid.")

                # Send Email
                if request.user.is_authenticated:
                    send_confirmation_email(request.user.email, request.user,
                                            items_and_total)

                else:
                    messages.error(
                        request,
                        "Please register for easy shopping experience next time."
                    )

                #Clear the Cart
                del request.session['cart']
                return redirect("/")
    else:
        order_form = OrderForm()
        payment_form = MakePaymentForm()
        context = {
            'order_form': order_form,
            'payment_form': payment_form,
            'publishable': settings.STRIPE_PUBLISHABLE
        }
        cart = request.session.get('cart', {})
        cart_items_and_total = get_cart_items_and_total(cart)
        context.update(cart_items_and_total)

        return render(request, "checkout/checkout.html", context)
Esempio n. 4
0
def checkout(request):
    if request.method == "POST":
        order_form = OrderForm(request.POST)
        if order_form.is_valid() and request.POST['stripe_id']:
            # Save The Order
            # añadir cargar user id si lo hay
            order = order_form.save(commit=False)
            order.date = timezone.now()
            order.save()

            # Save the Order Line Items
            cart = request.session.get('cart', {})
            save_order_items(order, cart)

            # Charge the Card
            items_and_total = get_cart_items_and_total(cart)
            total = items_and_total['total']
            stripe_token = request.POST['stripe_id']

            try:
                customer = charge_card(stripe_token, total)
            except stripe.error.CardError:
                messages.warning(request, "¡Pago no completado!")

            if customer['paid']:
                messages.success(request, "¡Pago realizado correctamente!")

                # Send Email
                send_confirmation_email(request.POST['email'],
                                        request.POST['full_name'],
                                        items_and_total)
                send_confirmation_email('*****@*****.**',
                                        request.POST['full_name'],
                                        items_and_total)

                #Clear the Cart
                del request.session['cart']
                return redirect("home")
    else:
        # Si esta registrado pre rellenar
        if request.user.id:
            data = {'email': request.user.email, 'full_name': 'CXXX'}
        else:
            data = {}
        order_form = OrderForm(data)
        payment_form = MakePaymentForm()
        context = {
            'order_form': order_form,
            'payment_form': payment_form,
            'publishable': settings.STRIPE_PUBLISHABLE
        }
        cart = request.session.get('cart', {})
        cart_items_and_total = get_cart_items_and_total(cart)
        context.update(cart_items_and_total)

    return render(request, "checkout/checkout.html", context)
Esempio n. 5
0
def checkout(request):
    if request.method == "POST":
        #save the order
        order_form = OrderForm(request.POST)
        order = order_form.save(commit=False)
        order.date = timezone.now()
        order.save()

        #save order line items

        cart = request.session.get('cart', {})
        for id, quantity in cart.items():
            product = get_object_or_404(Product, pk=id)
            order_line_item = OrderLineItem(order=order,
                                            product=product,
                                            quantity=quantity)
            order_line_item.save()

        #charge the card
        payment_form = MakePaymentForm(request.POST)
        if payment_form.is_valid():
            total = get_cart_items_and_total(cart)['total']
            total_in_cent = int(total * 100)

            try:
                customer = stripe.Charge.create(
                    amount=total_in_cent,
                    currency="EUR",
                    description="Dummy Transaction",
                    card=payment_form.cleaned_data['stripe_id'],
                )
            except stripe.error.CardError:
                messages.error(request, "Your card was declined!")

            if customer.paid:
                messages.error(request, "You have successfully paid")

        #clear the cart
        del request.session['cart']
        return redirect('home')

    else:
        order_form = OrderForm()
        payment_form = MakePaymentForm()
        context = {
            'order_form': order_form,
            'payment_form': payment_form,
            'publishable': settings.STRIPE_PUBLISHABLE
        }
        cart = request.session.get('cart', {})
        cart_items_and_total = get_cart_items_and_total(cart)
        context.update(cart_items_and_total)

    return render(request, "checkout/checkout.html", context)
Esempio n. 6
0
def confirmation(request):
    if not request.session.get('payment-completed', False):
        return redirect("index")
    else:
        request.session['payment-completed'] = False
        cart = request.session.pop('cart', {})
        cart_items_and_total = get_cart_items_and_total(cart)
        if cart_items_and_total['total'] == 0:
            return redirect("index")
        context = get_cart_items_and_total(cart)
        billing_details = Order.objects.latest('id')
        context.update({'billing_details': billing_details})
        return render(request, "checkout/confirmation.html", context)
Esempio n. 7
0
def go_to_checkout(request):
    if request.method == "POST":
        #pdb.set_trace()
        order_form = OrderForm(request.POST)
        payment_form = MakePaymentForm(request.POST)

        if order_form.is_valid():
            # Save The Order
            order = order_form.save(commit=False)
            order.date = timezone.now()
            order.save()

            # Save the Order Line Items
            userid = request.user.id
            cart = request.session.get('cart', {})
            save_order_items(userid, order, cart)

            # Charge the Card
            items_and_total = get_cart_items_and_total(cart)
            total = items_and_total['cart_total']
            #stripe_token=payment_form.cleaned_data['stripe_id']

            try:
                #customer = charge_card(stripe_token, total)
                complete = True

            except stripe.error.CardError:
                messages.error(request, "Your card was declined!")

            if complete:
                messages.success(request, "Thanks, will deliver ypu soon.")

                # Send Email
                # send_confirmation_email(request.user.email, request.user, items_and_total)

                #Clear the Cart
                del request.session['cart']
                return redirect("home")
    else:
        order_form = OrderForm()
        #payment_form = MakePaymentForm()
        context = {
            'order_form': order_form,
            'publishable': settings.STRIPE_PUBLISHABLE
        }
        cart = request.session.get('cart', {})
        cart_items_and_total = get_cart_items_and_total(cart)
        context.update(cart_items_and_total)

        return render(request, "checkout/checkout.html", context)
Esempio n. 8
0
def checkout(request):
    if request.method == "POST":
        order_form = OrderForm(request.POST)
        payment_form = MakePaymentForm(request.POST)

        if order_form.is_valid() and payment_form.is_valid():
            # Save The Order
            order = order_form.save(commit=False)
            order.date = timezone.now()
            order.save()

            # Save the Order Line Items
            cart = request.session.get('cart', {})
            save_order_items(order, cart)

            # Charge the Card
            items_and_total = get_cart_items_and_total(cart)
            total = items_and_total['total']
            stripe_token = payment_form.cleaned_data['stripe_id']

            try:
                customer = charge_card(stripe_token, total)
            except stripe.error.CardError:
                messages.error(request, "Your card was declined!")

            if customer.paid:
                messages.error(request, "You have successfully paid")

                # Send Email
                customer_email = request.POST.get("email")
                full_name = request.POST.get("full_name")
                send_confirmation_email(customer_email, full_name,
                                        items_and_total)

                #Clear the Cart
                del request.session['cart']
                return redirect("home")
    else:
        order_form = OrderForm()
        payment_form = MakePaymentForm()
        context = {
            'order_form': order_form,
            'payment_form': payment_form,
            'publishable': settings.STRIPE_PUBLISHABLE
        }
        cart = request.session.get('cart', {})
        cart_items_and_total = get_cart_items_and_total(cart)
        context.update(cart_items_and_total)

    return render(request, "checkout/checkout.html", context)
Esempio n. 9
0
def view_cart(request):
    cart = request.session.get('cart', {})
    discount = request.session.get('discount', 0)

    context = get_cart_items_and_total(cart, discount)

    return render(request, "cart/view_cart.html", context)
Esempio n. 10
0
def view_cart(request):

    cart = request.session.get('cart', {})

    cart_items = []
    total = 0
    for item_id, item_quantity in cart.items():
        this_product = get_object_or_404(Product, pk=item_id)
        this_total = this_product.price * Decimal(item_quantity)
        total += this_total
        this_item = {
            'product_id': item_id,
            'image': this_product.image,
            'name': this_product.name,
            'quantity': item_quantity,
            'price': this_product.price,
            'total': this_total,
        }
        cart_items.append(this_item)

    args = {'cart_items': cart_items, 'total': total}

    return render(request, "cart/view_cart.html", args)

    context = get_cart_items_and_total(cart)
    return render(request, "cart/view_cart.html", context)
Esempio n. 11
0
def view_cart(request):

    cart = request.session.get('cart', {})
    print(cart)
    print(cart.items())
    context = get_cart_items_and_total(cart)
    return render(request, 'cart/view_cart.html', context)
Esempio n. 12
0
def apply_coupon(request):
   
    if request.method=='POST':
        form=CouponForm(request.POST)
        if form.is_valid():
            if Coupon.objects.filter(code=request.POST['code']).exists():
                cart = request.session.get('cart', {})
                context = get_cart_items_and_total(cart)
                q=Coupon.objects.get(code=request.POST['code'])
                
                total=context['total']
                total=Decimal(total-(total*(q.discount))).quantize(Decimal('.01'))
                cart_items = []
                for item_id, item_quantity in cart.items():
                    this_product = get_object_or_404(Product, pk=item_id)
                    this_total = this_product.price * Decimal(item_quantity)
                    this_item = {
                        'product_id': item_id, 
                        'image': this_product.image,
                        'name': this_product.name,
                        'quantity': item_quantity,
                        'price': this_product.price,
                        'total': this_total,
                    }
                    cart_items.append(this_item)
                    request.session['cart'] = cart  
                # coupon=form.save(commit=False)
                # coupon.save()
                
                return render(request,"cart/view_cart.html",{'cart_items': cart_items,'total': total})
    else:
        form=CouponForm()
    return HttpResponse("cart/view_cart.html",{'form':form})
Esempio n. 13
0
def checkout(request):
    if request.method == "POST":
        # Save The Order
        order_form = OrderForm(request.POST)
        order = order_form.save(commit=False)
        order.date = timezone.now()
        order.save()

        # Save the Order Line Items
        cart = request.session.get('cart', {})
        for id, quantity in cart.items():
            product = get_object_or_404(Product, pk=id)
            order_line_item = OrderLineItem(order=order,
                                            product=product,
                                            quantity=quantity)
            order_line_item.save()

        # Charge the Card

        #Clear the Cart
        del request.session['cart']
        return redirect("home")
    else:
        order_form = OrderForm()
        payment_form = MakePaymentForm()
        context = {
            'order_form': order_form,
            'payment_form': payment_form,
            'publishable': 'whatever'
        }
        cart = request.session.get('cart', {})
        cart_items_and_total = get_cart_items_and_total(cart)
        context.update(cart_items_and_total)

    return render(request, "checkout/checkout.html", context)
Esempio n. 14
0
def show_checkout(request):
    payment_form = PaymentForm()
    cart = request.session.get('cart', {})
    context = get_cart_items_and_total(cart)
    context.update({
        'payment_form': payment_form,
        'publishable': settings.STRIPE_PUBLISHABLE_KEY
    })
    return render(request, "checkout/checkout.html", context)
Esempio n. 15
0
def checkout(request):
    if request.method=="POST":
        order_form      = OrderForm(request.POST)    
        payment_form    = MakePaymentForm(request.POST)
        
        if order_form.is_valid(): 
            # and payment_form.is_valid()
            # Save The Order in the Order database and we keep it somewhere live
            # There are two tables : one with the order (Num / Who / Adress / Time )
            # Another one with : each line is : pk / ordre number / product / qty
            order = order_form.save()
            cart = request.session.get('cart', {})
            for product_id, quantity in cart.items():
                line_item           = OrderLineItem()
                line_item.order     = order # IMPORTANT !! This is SQL (one field) - Here OOM is happening, that takes care of making the links
                line_item.product   = get_object_or_404(Product, pk=product_id)
                line_item.quantity  = quantity
                line_item.save()
            
            del request.session["cart"]
            
        return HttpResponse("That's a post")
            
        
            # Save the Order Line Items
            # cart        = request.session.get('cart', {})
            # save_order_items(order, cart)
        
        #     # Charge the Card
        #     items_and_total     = get_cart_items_and_total(cart)
        #     total               = items_and_total['total']
        #     # stripe_token=payment_form.cleaned_data['stripe_id']

        #     try:
        #         customer        = charge_card(stripe_token, total)
        #     except stripe.error.CardError:
        #         messages.error(request, "Your card was declined!")

        #     if customer.paid:
        #         messages.error(request, "You have successfully paid")

        #         # Send Email
        #         send_confirmation_email(request.user.email, request.user, items_and_total)
        
        #         #Clear the Cart
        #         del request.session['cart']
        #         return redirect("home")
    else:
        order_form      = OrderForm()
        payment_form    = MakePaymentForm()
        
        context         = {'order_form': order_form, 'payment_form': payment_form, "publishable": settings.STRIPE_PUBLISHABLE_KEY}
        cart            = request.session.get('cart', {})
        cart_items_and_total    = get_cart_items_and_total(cart)
        context.update(cart_items_and_total)
    
        return render(request, "checkout/checkout.html", context)
Esempio n. 16
0
def confirm_checkout(request):
    order_form = OrderForm(request.POST)
    payment_form = PaymentForm(request.POST)

    if order_form.is_valid() and payment_form.is_valid():
        order = order_form.save()

        cart = request.session.get('cart', {})

        for product_id, quantity in cart.items():
            lineItem = OrderLineItem(order=order,
                                     quantity=quantity,
                                     product_id=product_id)
            lineItem.save()

        items_and_total = get_cart_items_and_total(cart)
        total = items_and_total['grand_total']
        stripe_token = payment_form.cleaned_data['stripe_id']

        charge = charge_card(total, stripe_token, request)

        if charge == None:
            return HttpResponse("Error creating charge")

        if charge.paid:
            messages.error(request, "You have successfully paid")
            del request.session['cart']
            return redirect("home")
        else:
            return HttpResponse("Charge Not Paid")

    else:
        cart = request.session.get('cart', {})
        context = get_cart_items_and_total(cart)
        context.update({'order_form': order_form})

        return render(request, 'checkout/view_checkout.html', context)
Esempio n. 17
0
def checkout(request):
    if request.method=="POST":
        order_form = OrderForm(request.POST)    
        payment_form = MakePaymentForm(request.POST)
        
        if order_form.is_valid() and payment_form.is_valid():
            order = order_form.save(commit=False)
            order.date = timezone.now()
            order.save()
        
            cart = request.session.get('cart', {})
            for id, quantity in cart.items():
                photo = get_object_or_404(Photo, pk=id)
                order_line_item = OrderLineItem(
                    order = order,
                    photo = photo,
                    quantity = quantity
                    )
                order_line_item.save()
        

            items_and_total = get_cart_items_and_total(cart)
            total = items_and_total['total']
            total_in_cent = int(total*100)
            try:
                customer = stripe.Charge.create(
                    amount=total_in_cent,
                    currency="EUR",
                    description="Dummy Transaction",
                    card=payment_form.cleaned_data['stripe_id'],
                )
            except stripe.error.CardError:
                messages.error(request, "Your card was declined!")


            if customer.paid:
                messages.success(request, "You have successfully paid")
                
                context = {
                    'site_name': "Blah Blah dot com",
                    'user': request.user,
                }
                context.update(items_and_total)
                message = render_to_string('checkout/text_confirmation_email.html', context)
                html_message = render_to_string('checkout/html_confirmation_email.html', context)
                
                subject = 'Thanks for buying our stuff!'
                message = message
                from_email = settings.SYSTEM_EMAIL
                to_email = [request.user.email]
    
                send_mail(subject,message,from_email,to_email,fail_silently=True,html_message=html_message)
        
                del request.session['cart']
                return redirect("photo_list")
    else:
        order_form = OrderForm()
        payment_form = MakePaymentForm()
        context = {'order_form': order_form, 'payment_form': payment_form, 'publishable': settings.STRIPE_PUBLISHABLE }
        cart = request.session.get('cart', {})
        cart_items_and_total = get_cart_items_and_total(cart)
        context.update(cart_items_and_total)
    
    return render(request, "checkout/checkout.html", context)
Esempio n. 18
0
def confirm_checkout(request):
    order_form = OrderForm(request.POST)
    payment_form = PaymentForm(request.POST)

    if order_form.is_valid() and payment_form.is_valid():
        order = order_form.save(commit=False)

        if request.user.profile:
            order.profile = request.user.profile

        order.save()

        cart = request.session.get('cart', {})

        for order_id, basket in cart.items():
            line_item = OrderLineItem(
                order=order,
                product_id=basket['id'],
                quantity=basket['quantity'],
                weight=basket['weight'],
            )
            line_item.save()

        items_and_total = get_cart_items_and_total(cart)
        total = items_and_total['total']
        stripe_token = payment_form.cleaned_data['stripe_id']

        total_in_cent = int(total * 100)

        try:
            charge = stripe.Charge.create(
                amount=total_in_cent,
                currency="EUR",
                description="Dummy Transaction",
                card=stripe_token,
            )

        except:
            messages.error(
                request,
                "Unfortunately there was an ERROR Charging this Credit Card, please try again"
            )
            return redirect('show_checkout')

        if charge.paid:
            messages.success(request, "Thank you, you have successfully paid")
            del request.session['cart']
            return redirect("show_home")
        else:
            messages.error(
                request,
                "Unfortunately there was an ERROR Charging this Credit Card, please try again"
            )
            return redirect('show_checkout')

    else:
        print(order_form.errors)
        cart = request.session.get('cart', {})
        context = get_cart_items_and_total(cart)
        context.update({'form': form})

        return render(request, "checkout/checkout.html", context)
Esempio n. 19
0
def view_cart(request):
    cart = request.session.get('cart', {})
    if not cart:
        return render(request, "cart/empty_cart.html")
    context = get_cart_items_and_total(cart)
    return render(request, "cart/view_cart.html", context)
Esempio n. 20
0
def item_quantity(request):
    cart = request.session.get('cart', {})
    context = get_cart_items_and_total(cart)
    return context