예제 #1
0
    def test_form_invalid(self):
        data = {'email': 'testtest.pl', 'subscribe': False}
        form = GuestForm(data=data)
        self.assertFalse(form.is_valid())
        resp = self.client.post(reverse('accounts:guest_register'), data)

        messages = list(resp.wsgi_request._messages)
        self.assertEqual(len(messages), 1)
        self.assertEqual(messages[0].level, 30)
예제 #2
0
def user_guest(request):
	if request.method == 'POST':
		next_post = request.POST.get('next')
		form = GuestForm(request.POST)
		if form.is_valid():
			email = form.data.get('email')
			guestEmail = GuestEmail.objects.create(email=email)
			request.session['guest_email_id'] = guestEmail.id
			return redirect(next_post)
	else:	
		form = GuestForm()
	return render(request, 'carts/checkout.html', {'form':form})
예제 #3
0
def guest_register_view(request):
    form = GuestForm(request.POST or None)
    next_ = request.GET.get('next')
    next_post = request.POST.get('next')
    redirect_path = next_ or next_post or None
    if form.is_valid():
        email = form.cleaned_data.get('email')
        new_guest_email = GuestEmail.objects.create(email=email)
        request.session['guest_email_id'] = new_guest_email.id
        if is_safe_url(redirect_path, request.get_host()):
            return redirect(redirect_path)
        else:
            return redirect('/register/')
    return redirect('/register/')
예제 #4
0
파일: views.py 프로젝트: linusidom/bootcamp
def user_guest(request):
    if request.method == 'POST':
        print('Post Method', request.method, request.POST)
        form = GuestForm(request.POST)
        print('Form Data', form)
        if form.is_valid():
            email = form.data.get('email')
            guestEmail = GuestEmail.objects.create(email=email)
            request.session['guest_email'] = guestEmail.email
            request.session['guest_email_id'] = guestEmail.id
            return redirect('index')
    else:
        form = GuestForm()
    return render(request, 'accounts/user_signup.html', {'form': form})
예제 #5
0
def guest_register_page(request):
    form = GuestForm(request.POST or None)
    context = {
        'form': form,
    }
    next_ = request.GET.get('next')
    next_post = request.POST.get('next')
    redirect_path = next_ or next_post or None
    if form.is_valid():
        email = form.cleaned_data.get("email")
        new_guest_email = GuestEmail.objects.create(email=email)
        request.session['guest_email_id'] = new_guest_email.id
        if is_safe_url(redirect_path, request.get_host()):
            return redirect(redirect_path)
    return redirect('accounts:register')
예제 #6
0
def checkout_home(request):
    cart_obj, cart_created = Cart.objects.new_or_get_cart(request)
    order_obj = None
    if cart_created or cart_obj.products.count() == 0:
        return redirect('cart:home')

    login_form = LoginForm()
    guest_form = GuestForm()
    billing_address_form = AddressForm()
    address_form = AddressForm()

    billing_profile, billing_profile_created = BillingProfile.objects.new_or_get_billing(request)
    
    if billing_profile is not None:
        order_obj, order_obj_created = Order.objects.new_or_get_order(billing_profile, cart_obj)

    context = {
        'object': order_obj,
        'billing_profile': billing_profile,
        'login_form': login_form,
        'guest_form': guest_form,
        'address_form': address_form,
        'billing_address_form': billing_address_form
    }

    return render(request, 'carts/checkout.html', context)
예제 #7
0
def checkout_home(request):
    cart_obj, cart_created = Cart.objects.new_or_get(request)
    order_obj = None
    if cart_created or cart_obj.products.count() == 0:
        return redirect("cart:home")

    user = request.user
    billing_profile = None
    login_form = LoginForm()
    guest_form = GuestForm()
    guest_email_id = request.session.get('guest_email_id')
    if user.is_authenticated():
        billing_profile, billing_profile_created = BillingProfile.objects.get_or_create(
            user=user, email=user.email)
    elif guest_email_id is not None:
        guest_email_obj = GuestEmail.objects.get(id=guest_email_id)
        billing_profile, billing_guest_profile_created = BillingProfile.objects.get_or_create(
            email=guest_email_obj.email)
    else:
        pass

    if billing_profile is not None:
        order_obj, order_obj_created = Order.objects.new_or_get(
            billing_profile, cart_obj)

    context = {
        'object': order_obj,
        'billing_profile': billing_profile,
        'login_form': login_form,
        'guest_form': guest_form
    }

    return render(request, 'carts/checkout.html', context)
예제 #8
0
파일: views.py 프로젝트: senp0u/ECommerce
def checkout_home(request):
    cart_obj, cart_created = Cart.objects.new_or_get(request)
    order_obj = None
    if cart_created or cart_obj.products.count() == 0:
        return redirect("cart:home")

    login_form = LoginForm()
    guest_form = GuestForm()
    address_form = AddressForm()
    shipping_address_id = request.session.get("shipping_address_id", None)
    billing_address_id = request.session.get("billing_address_id", None)

    billing_profile, billing_profile_created = BillingProfile.objects.new_or_get(
        request)
    address_qs = None
    has_card = False
    if billing_profile is not None:
        if request.user.is_authenticated():
            address_qs = Address.objects.filter(
                billing_profile=billing_profile)

        order_obj, order_obj_created = Order.objects.new_or_get(
            billing_profile, cart_obj)
        if shipping_address_id:
            order_obj.shipping_profile = Address.objects.get(
                id=shipping_address_id)
            del request.session["shipping_address_id"]
            order_obj.save()
        if billing_address_id:
            order_obj.billing_address = Address.objects.get(
                id=billing_address_id)
            del request.session["billing_address_id"]
            order_obj.save()
        has_card = billing_profile.has_card

    if request.method == "POST":
        is_prepare = order_obj.check_is_ready_to_be_pay()
        if is_prepare:
            did_charge, crg_msg = billing_profile.charge(order_obj)
            if did_charge:
                order_obj.mark_paid()
                request.session['cart_items'] = 0
                del request.session['cart_id']
                if not billing_profile.user:
                    billing_profile.set_cards_inactive()
                return redirect("cart:success")
            else:
                print(crg_msg)
                return redirect("cart:checkout")
    context = {
        "object": order_obj,
        "billing_profile": billing_profile,
        "login_form": login_form,
        "guest_form": guest_form,
        "address_form": address_form,
        "address_qs": address_qs,
        "has_card": has_card,
        "publish_key": STRIPE_PUB_KEY
    }
    return render(request, "carts/checkout.html", context)
예제 #9
0
def checkout_home(request):
    cart_obj, cart_created = Cart.objects.new_or_get(request)
    order_obj = None
    if cart_created or cart_obj.products.count() == 0:
        return redirect("cart:home")

    login_form = LoginForm()
    guest_form = GuestForm()
    address_form = AddressForm()
    billing_address_id = request.session.get("billing_address_id", None)
    shipping_address_id = request.session.get("shipping_address_id", None)
    billing_profile, billing_profile_created = BillingProfile.objects.new_or_get(
        request)
    if billing_profile is not None:
        order_obj, order_obj_created = Order.objects.new_or_get(
            billing_profile, cart_obj)
        if shipping_address_id:
            order_obj.shipping_address = Address.objects.get(
                id=shipping_address_id)
            del request.session["shipping_address_id"]
        if billing_address_id:
            order_obj.billing_address = Address.objects.get(
                id=billing_address_id)
            del request.session["billing_address_id"]
        if billing_address_id or shipping_address_id:
            order_obj.save()

    context = {
        "object": order_obj,
        "billing_profile": billing_profile,
        "login_form": login_form,
        "guest_form": guest_form,
        "address_form": address_form,
    }
    return render(request, "carts/checkout.html", context)
예제 #10
0
파일: views.py 프로젝트: linusidom/bootcamp
def cart_checkout(request):
    order_obj = None
    old_addresses = None
    credit_card = None
    loginForm = LoginForm()
    guestForm = GuestForm()
    addressForm = AddressForm()
    # print('AddressForm', addressForm)
    cart_obj, cart_created = Cart.objects.new_or_get(request)
    billing_profile, bill_created = BillingProfile.objects.new_or_get(request)
    cards = Card.objects.filter(billing_profile=billing_profile, default=True)
    if cards.exists():
        credit_card = cards.last()

    # print('BillingProfile ',billing_profile)
    if billing_profile is not None:
        order_obj, order_created = Order.objects.new_or_get(
            billing_profile=billing_profile, cart_obj=cart_obj)

    if order_obj is not None:
        old_addresses = Address.objects.filter(billing_profile=billing_profile)

    context = {
        'order_obj': order_obj,
        'loginForm': loginForm,
        'guestForm': guestForm,
        'addressForm': addressForm,
        'billing_profile': billing_profile,
        'old_addresses': old_addresses,
        'credit_card': credit_card,
    }
    return render(request, 'carts/cart_checkout.html', context)
예제 #11
0
def checkout_home(request):
    cart_obj, cart_created = Cart.objects.new_or_get(request)
    order_obj = None
    if cart_created or cart_obj.products.count() == 0:
        print(cart_created)
        print("hello")
        return redirect("cart:home")
    else:
        order_obj, new_order_obj = Order.objects.get_or_create(cart=cart_obj)
    user = request.user
    billing_profile = None
    login_form = LoginForm()
    guest_form = GuestForm()
    guest_email_id = request.session.get("guest_email_id")
    if user.is_authenticated():
        billing_profile, billing_profile_created = BillingProfile.objects.get_or_create(
            user=user, email=user.email)
    elif guest_email_id is not None:
        guest_email_obj = GuestEmail.objects.get(id=guest_email_id)
        billing_profile, billing_guest_profile_created = BillingProfile.objects.get_or_create(
            email=guest_email_obj)
    else:
        pass
    context = {
        "object": order_obj,
        "billing_profile": billing_profile,
        "login_form": login_form,
        "guest_form": guest_form,
    }
    return render(request, "carts/checkout.html", context)
예제 #12
0
def checkout_home(request):
    cart_obj,cart_created=Cart.objects.new_or_get(request)
    order_obj=None
    has_card=False
    if  cart_created or cart_obj.cartitem_set.count()==0:
        redirect('carts:cart_view')
    login_form=LoginForm()
    guest_form=GuestForm()
    # billing model manager
    billing_profile, billing_profile_created = BillingProfile.objects.new_or_get(request)
    if billing_profile is not None:
        # order model manager
        order_obj, order_obj_created = Order.objects.new_or_get(billing_profile, cart_obj)
        has_card=billing_profile.has_card
        # finalize checkout
    if request.method == "POST":
        "check the order is done"
        is_done = order_obj.check_done()

        if is_done:
            order_obj.mark_paid()
            request.session['cart_items'] = 0
            del request.session['cart_id']


        return redirect('carts:success')
    context={
        'billing_profile':billing_profile,
        'object': order_obj,
        'login_form':login_form,
        'guest_form':guest_form,
        "has_card":has_card
    }
    return render(request,'checkout.html',context)
예제 #13
0
def checkout_home(request):
    cart_obj, cart_created = Cart.objects.new_or_get(request)
    order_obj = None
    if cart_created or cart_obj.products.count() == 0:
        return redirect(cart_home)
    else:
        order_obj, new_order_obj = Order.objects.get_or_create(cart=cart_obj)
    
    guest_form = GuestForm()
    login_form = LoginForm()
    address_form = AddressForm()
    shipping_address_id = request.session.get('shipping_address_id', None)
    billing_address_form = AddressForm()
    billing_profile, billing_profile_created = BillingProfile.objects.new_or_get(request)
    if billing_profile is not None:
        order_obj, order_obj_created = Order.objects.new_or_get(billing_profile, cart_obj)
        if shipping_address_id:
            order_obj.shipping_address = shipping_address_id
            order_obj.save()
    context = {
        'object': order_obj,
        'billing_profile': billing_profile,
        'login_form': login_form,
        'guest_form': guest_form,
        'address_form': address_form,
        'billing_address_form': address_form,
    }

    return render(request, 'checkout.html', context)
예제 #14
0
def checkout_home(request):
    (cart_obj, cart_created) = Cart.objects.new_or_get(request)
    order_obj = None
    if cart_created or cart_obj.products.count() == 0:
        return redirect('cart:home')

    login_form = LoginForm()
    guest_form = GuestForm()
    address_form = AddressForm()
    billing_address_id = request.session.get('billing_address_id', None)
    shipping_address_id = request.session.get('shipping_address_id', None)

    (billing_profile, billing_profile_created) = \
        BillingProfile.objects.new_or_get(request)
    address_qs = None
    has_card = False
    if billing_profile is not None:
        if request.user.is_authenticated:
            address_qs = \
                Address.objects.filter(billing_profile=billing_profile)
        (order_obj, order_obj_created) = \
            Order.objects.new_or_get(billing_profile, cart_obj)
        if shipping_address_id:
            order_obj.shipping_address = \
                Address.objects.get(id=shipping_address_id)
            del request.session['shipping_address_id']
        if billing_address_id:
            order_obj.billing_address = \
                Address.objects.get(id=billing_address_id)
            del request.session['billing_address_id']
        if billing_address_id or shipping_address_id:
            order_obj.save()
        has_card = billing_profile.has_card

    if request.method == 'POST':

        # check that order is done

        is_prepared = order_obj.check_done()
        if is_prepared:
            (did_charge, crg_msg) = billing_profile.charge(order_obj)
            if did_charge:
                order_obj.mark_paid()
                request.session['cart_items'] = 0
                del request.session['cart_id']
                return redirect('cart:success')
            else:
                print(crg_msg)
                return redirect('cart:checkout')
    context = {
        'object': order_obj,
        'billing_profile': billing_profile,
        'login_form': login_form,
        'guest_form': guest_form,
        'address_form': address_form,
        'address_qs': address_qs,
        'has_card': has_card,
        'publish_key': STRIPE_PUB_KEY,
    }
    return render(request, 'cart/checkout.html', context)
예제 #15
0
파일: views.py 프로젝트: ELI95/eCommerce
def checkout_home(request):
    cart_obj, cart_created = Cart.objects.new_or_get(request)
    order_obj = None

    if cart_created or cart_obj.products.count() == 0:
        return redirect('cart:home')

    login_form = LoginForm(request=request)
    guest_form = GuestForm(request=request)
    address_form = AddressCheckoutForm()

    shipping_address_required = not cart_obj.is_digital
    shipping_address_id = request.session.get("shipping_address_id", None)
    billing_address_id = request.session.get("billing_address_id", None)
    billing_profile, billing_profile_created = BillingProfile.objects.new_or_get(request)
    address_qs = None
    has_card = False

    if billing_profile is not None:
        if request.user.is_authenticated():
            address_qs = Address.objects.filter(billing_profile=billing_profile)
        order_obj, order_obj_created = Order.objects.new_or_get(billing_profile, cart_obj)
        if shipping_address_id:
            order_obj.shipping_address = Address.objects.get(id=shipping_address_id)
            del request.session["shipping_address_id"]
        if billing_address_id:
            order_obj.billing_address = Address.objects.get(id=billing_address_id)
            del request.session["billing_address_id"]
        if billing_address_id or shipping_address_id:
            order_obj.save()
        has_card = billing_profile.has_card

    if request.method == 'POST':
        'check that order is done'
        is_prepared = order_obj.check_done()
        if is_prepared:
            did_charge, crg_msg = billing_profile.charge(order_obj)
            if did_charge:
                order_obj.mark_paid()
                request.session['cart_items'] = 0
                del request.session['cart_id']
                if not billing_profile.user:
                    billing_profile.set_cards_inactive()
                return redirect('cart:success')
            else:
                print(crg_msg)
                return redirect('cart:checkout')

    context = {
        'object': order_obj,
        'billing_profile': billing_profile,
        'login_form': login_form,
        'guest_form': guest_form,
        "address_form": address_form,
        "address_qs": address_qs,
        "has_card": has_card,
        'publish_key': STRIPE_PUB_KEY,
        "shipping_address_required": shipping_address_required,
    }
    return render(request, 'carts/checkout.html', context)
예제 #16
0
def checkout_home(request):
    cart_obj, cart_created = Cart.objects.new_or_get(request)
    order_obj = None
    if cart_created or cart_obj.products.count() == 0:
        return redirect("cart:home")
    user = request.user
    billing_profile=None
    login_form = LoginForm()
    guest_form = GuestForm()
    guest_email_id = request.session.get('guest_email_id')
    if user.is_authenticated():
        print(user.email)
        billing_profile, billing_profile_created = BillingProfile.objects.get_or_create(user=user, email=user.email)
    elif guest_email_id is not None:
        guest_email_obj = GuestEmail.objects.get(id=guest_email_id)
        billing_profile, billing_guest_profile_created = BillingProfile.objects.get_or_create(email=guest_email_obj.email)
    else:
        pass
    if billing_profile is not None:
        order_qs = Order.objects.filter(billing_profile=billing_profile, cart=cart_obj)
        if order_qs.count() == 1:
            order_obj = order_qs.first()
        else:
            old_order_qs = Order.objects.exclude(billing_profile=billing_profile).filter(cart=cart_obj, active=True)
            if old_order_qs.exists():
                old_order_qs.update(active=False)
            order_obj = Order.objects.create(billing_profile=billing_profile, cart=cart_obj)

    context = {
        "object": order_obj,
        "billing_profile": billing_profile,
        "login_form": login_form,
        "guest_form": guest_form
        }
    return render(request, "carts/checkout.html", context)
예제 #17
0
def checkout_home(request):
    cart_obj,cart_created=Cart.objects.new_or_get(request)
    order_obj=None
    if cart_created or cart_obj.products.count()==0:
        return redirect('cart:home')
    login_form=loginForm(request=request)
    guest_form=GuestForm()
    address_form=AddressForm(request.POST or None)
    shipping_address_id=request.session.get("shipping_address_id",None)
    billing_address_id=request.session.get("billing_address_id",None)
    billing_profile,billing_profile_created=BillingProfile.objects.new_or_get(request)
    address_qs=None
    if billing_profile is not None:
        if request.user.is_authenticated:
            address_qs=Address.objects.filter(billing_profile=billing_profile)
        order_obj, order_obj_created=Order.objects.new_or_get(billing_profile=billing_profile,cart_obj=cart_obj)            
        if shipping_address_id:
            order_obj.shipping_address=Address.objects.get(id=shipping_address_id)
            del request.session["shipping_address_id"]
        if billing_address_id:
            order_obj.billing_address=Address.objects.get(id=billing_address_id)
            del request.session["billing_address_id"]
        if shipping_address_id or billing_address_id:
            order_obj.save()

    context={
        'object':order_obj,
        'billing_profile':billing_profile,
        'login_form':login_form,
        'guest_form':guest_form,
        'address_form':address_form,
        'address_qs':address_qs,
    }
    return render(request,'checkout.html',context)
예제 #18
0
def checkout_home(request):
    cart_obj, cart_created = Cart.objects.new_or_get(request)
    order_obj = None
    if cart_created or cart_obj.products.count() == 0:
        return redirect("cart:home")

    login_form = LoginForm()
    guest_form = GuestForm()
    address_form = AddressForm()
    billing_address_form = AddressForm()

    billing_profile, billing_profile_created = BillingProfile.objects.new_or_get(
        request)
    if billing_profile is not None:
        order_obj, order_obj_created = Order.objects.new_or_get(
            billing_profile, cart_obj)

    context = {
        "object": order_obj,
        "billing_profile": billing_profile,
        "login_form": login_form,
        "guest_form": guest_form,
        "address_form": address_form,
        "billing_address_form": billing_address_form
    }
    return render(request, 'carts/checkout.html', context)
예제 #19
0
def checkout_home(request):

    cart_obj, cart_created = Cart.objects.new_or_get(request)
    order_obj = None

    if cart_created or cart_obj.items.count() == 0:
        return redirect('cart:home')

    login_form = LoginForm()
    guest_form = GuestForm()
    address_form = AddressForm()

    billing_address_id = request.session.get('billing_address_id', None)
    shipping_address_id = request.session.get('shipping_address_id', None)

    billing_profile, billing_profile_created = BillingProfile.objects.new_or_get(
        request)
    has_card = False

    if billing_profile is not None:
        order_obj, order_obj_created = Order.objects.new_or_get(
            billing_profile, cart_obj)
        if shipping_address_id:
            order_obj.shipping_address = Address.objects.get(
                id=shipping_address_id)
            del request.session['shipping_address_id']
        if billing_address_id:
            order_obj.billing_address = Address.objects.get(
                id=billing_address_id)
            del request.session['billing_address_id']
        if billing_address_id or shipping_address_id:
            order_obj.save()
        has_card = billing_profile.has_card

    #Check that order is done
    if request.method == 'POST':
        if order_obj.check_done():
            did_charge, crg_msg = billing_profile.charge(order_obj)
            if did_charge:
                order_obj.mark_paid()
                del request.session['cart_id']
                request.session['cart_total'] = 0
                if billing_profile.user is None:
                    billing_profile.set_cards_inactive(
                    )  #do the all cards inactive
                return redirect('cart:success')
            else:
                return redirect('cart:checkout')
    context = {
        'billing_profile': billing_profile,
        'object': order_obj,
        'login_form': login_form,
        'guest_form': guest_form,
        'address_form': address_form,
        'has_card': has_card,
        'publish_key': STRIPE_PUB_KEY,
    }

    return render(request, 'carts/checkout.html', context)
예제 #20
0
def checkout_home(request):
    cart_obj, cart_created = Cart.objects.new_or_get(request)
    order_obj = None
    if cart_created or cart_obj.products.count() == 0:
        return redirect("cart:home")
    login_form = LoginForm()
    guest_form = GuestForm()
    address_form = AddressForm()
    billing_address_id = request.session.get("billing_address_id", None)
    shipping_address_id = request.session.get("shipping_address_id", None)

    billing_profile, billing_profile_created = BillingProfile.objects.new_or_get(
        request)

    address_qs = None
    if billing_profile is not None:
        if request.user.is_authenticated():
            address_qs = Address.objects.filter(
                billing_profile=billing_profile)

        shipping_address_qs = address_qs.filter(address_type='shipping')
        billing_address_qs = address_qs.filter(address_type='billing_')

        order_obj, order_obj_created = Order.objects.new_or_get(
            billing_profile, cart_obj)
        if shipping_address_id:
            order_obj.shipping_address = Address.objects.get(
                id=shipping_address_id)
            del request.session["shipping_address_id"]

        if billing_address_id:
            order_obj.billing_address = Address.objects.get(
                id=billing_address_id)
            del request.session["billing_address_id"]
        if billing_address_id or shipping_address_id:
            order_obj.save()

    if request.method == "POST":
        "check that order is done"
        is_done = order_obj.check_done()
        print("is_done", is_done)
        print(request.session['cart_id'])
        if is_done:
            order_obj.mark_paid()
            request.session['cart_items'] = 0
            del request.session['cart_id']
            return redirect("cart:success")
        print("sessionID", request.session['card_id'])

    context = {
        "object": order_obj,
        "billing_profile": billing_profile,
        "login_form": login_form,
        "guest_form": guest_form,
        "address_form": address_form,
        "address_qs": address_qs
    }
    print("rendring to checkout")
    return render(request, "carts/checkout.html", context)
예제 #21
0
def checkout_home(request):
    cart_obj = Cart(request)
    if cart_obj.__len__() == 0:
        return redirect("cart:home")

    address_book = None
    login_form = LoginForm(request=request)
    guest_form = GuestForm(request=request)

    # Get cart total from POST request
    cart_total = request.POST.get('cart_total', None)

    billing_profile, billing_profile_created = BillingProfile.objects.new_or_get(
        request)
    order_obj, order_obj_created = Order.objects.new_or_get(billing_profile)

    if billing_profile is not None:
        address_book = Address.objects.all().filter(
            billing_profile=billing_profile)

    if cart_total is not None:
        # Calculate totals
        Order.objects.cart_total(request, obj=order_obj)

        # Remove Applied Coupon if any.
        if order_obj.coupon_applied is True:
            coupon = None
            try:
                coupon = order_obj.coupon
            except:
                pass

            if coupon:
                # Remove Coupon
                CouponCode.objects.remove_coupon(billing_profile, coupon,
                                                 order_obj)

    # If Coupon, pass coupon_code  to the template and state if percentage discount
    coupon = None
    discount_type = None
    if order_obj.coupon:
        coupon = order_obj.coupon
        discount_type = request.session.get("discount_type",
                                            None)  # from session

    context = {
        "billing_profile": billing_profile,
        "login_form": login_form,
        "guest_form": guest_form,
        "address_book": address_book,
        "form": CheckoutAddressForm,
        "order_obj": order_obj,
        "coupon": coupon,
        "discount_type": discount_type
    }
    return render(request, "cart/checkout.html", context)
예제 #22
0
def checkout_home(request):
    cart_obj, cart_created = Cart.objects.new_or_get(request)
    order_obj = None
    if cart_created or cart_obj.products.count() == 0:
        return redirect('cart:home')

    login_form = LoginForm(request=request)
    guest_form = GuestForm(request=request)
    address_form = AddressCheckoutForm()
    billing_address_id = request.session.get('billing_address_id', None)
    shipping_address_required = cart_obj.delivery
    shipping_address_id = request.session.get('shipping_address_id', None)
    billing_profile, billing_profile_created = BillingProfile.objects.new_or_get(request)
    address_qs = None
    has_card = False

    if billing_profile is not None:
        if request.user.is_authenticated:
            address_qs = Address.objects.filter(billing_profile=billing_profile)
        order_obj, order_obj_created = Order.objects.new_or_get(billing_profile, cart_obj)
        if shipping_address_id:
            order_obj.shipping_address = Address.objects.get(id=shipping_address_id)
            del request.session['shipping_address_id']
        if billing_address_id:
            order_obj.billing_address = Address.objects.get(id=billing_address_id)
            del request.session['billing_address_id']
        if billing_address_id or shipping_address_id:
            order_obj.save()
        has_card = billing_profile.has_card

    if request.method == 'POST':
        is_prepared = order_obj.check_done()
        if is_prepared:
            did_charge, orderID = billing_profile.charge('S', order_obj)
            if did_charge:
                order_obj.mark_paid() # sort signal
                request.session['cart_items'] = 0
                del request.session['cart_id']
                if not billing_profile.user:
                    billing_profile.set_cards_inactive()
                return redirect(reverse('cart:success', kwargs={ 'orderID': orderID }))
            else:
                return redirect('cart:checkout')

    context = {
        'object': order_obj,
        'billing_profile': billing_profile,
        'login_form': login_form,
        'guest_form': guest_form,
        'address_form': address_form,
        'address_qs': address_qs,
        'has_card': has_card,
        'publish_key': STRIPE_PUB_KEY,
        'shipping_address_required': shipping_address_required,
    }
    return render(request, 'carts/checkout.html', context)
예제 #23
0
def checkoutHome(request):
    cart_obj, cart_created = Cart.objects.new_or_get(request)
    order_obj = None
    if cart_created or cart_obj.products.count == 0:
        return redirect('cart:home')
    login_form = LoginForm()
    guest_form = GuestForm()
    address_form = AddressForm()
    # billing_address_form = AddressForm()
    billing_address_id = request.session.get('billing_address_id', None)
    shipping_address_id = request.session.get('shipping_address_id', None)
    billing_profile, billing_profile_created = Billing.objects.new_or_get(
        request)
    address_qs = None
    if billing_profile is not None:
        if request.user.is_authenticated:
            address_qs = Address.objects.filter(
                billing_profile=billing_profile)
        #
        # shipping_addres_qs = address_qs.filter(address_type='shipping')
        # billing_addres_qs = address_qs.filter(address_type='billing')
        # address_qs = Address.objects.filter(billing_profile=billing_profile)
        order_obj, order_obj_created = Order.objects.new_or_get(
            billing_profile, cart_obj)
        if shipping_address_id:
            order_obj.shipping_address = Address.objects.get(
                id=shipping_address_id)
            del (request.session['shipping_address_id'])
        if billing_address_id:
            order_obj.billing_address = Address.objects.get(
                id=billing_address_id)
            del (request.session['billing_address_id'])
        if billing_address_id or shipping_address_id:
            order_obj.save()
    if request.method == 'POST':

        is_done = order_obj.check_done()
        if is_done:
            order_obj.mark_paid()
            del (request.session['cart_id'])
            request.session['cart_items'] = 0
        return redirect('cart:success')

        # pass
    # print(address_qs)
    context = {
        "order": order_obj,
        "billing_profile": billing_profile,
        "login_form": login_form,
        "guest_form": guest_form,
        "address_form": address_form,
        "address_qs": address_qs
        # "billing_address_form": billing_address_form,
    }
    # print(context)
    return render(request, 'cart/checkOut.html', context)
예제 #24
0
def checkout(request):
    cart_obj, is_new_cart = Cart.objects.new_or_get(request)
    order_obj = None
    if is_new_cart or cart_obj.products.count()==0:
        return redirect('cart:home')
    
    user = request.user
    billing_profile = None
    if user.is_authenticated:
        billing_profile = None

    login_form = LoginForm()
    guest_login_form = GuestForm()
    address_form = AddressForm()
    billing_address_form = AddressForm()

    billing_profile, created = BillingProfile.objects.new_or_get(request)

    billing_address_id = request.session.get('billing_address_id')
    shipping_address_id = request.session.get('shipping_address_id')
    
    address_qs = None
    if billing_profile is not None:
        address_qs = Address.objects.filter(billing_profile=billing_profile)
        # shipping_address_qs = address_qs.filter(address_type='shipping')
        # billing_address_qs = address_qs.filter(address_type='billing')
        
        order_obj, order_obj_created = Order.objects.new_or_get(billing_profile, cart_obj)

        if billing_address_id:
            order_obj.billing_address = Address.objects.get(id=billing_address_id)
            del request.session['billing_address_id']
        if shipping_address_id:
            order_obj.shipping_address = Address.objects.get(id=shipping_address_id)
            del request.session['shipping_address_id']        
        if billing_address_id or shipping_address_id:
            order_obj.save()
    if request.method == 'POST':
        is_done = order_obj.check_done()
        if is_done:
            order_obj.mark_paid()
            del request.session['cart_id']
            request.session['cart_items'] = 0
            return redirect('/cart/success')
   
    context = {
        'object':order_obj,
        'billing_profile': billing_profile,
        'login_form': login_form,
        'guest_login_form':guest_login_form,
        'address_form': address_form,
        'billing_address_form': billing_address_form,       
        'address_qs' : address_qs,
    }

    return render(request,'carts/checkout.html',context)
예제 #25
0
def checkout_home(request):
    cart_obj, cart_created = Cart.objects.new_or_get(request)
    order_obj = None
    if cart_created or cart_obj.products.count() == 0:
        return redirect("cart:home")
    login_form = LoginForm()
    guest_form = GuestForm()
    address_form = AddressForm()
    payment_form = PaymentSelectForm(request.POST or None)
    billing_address_id = request.session.get("billing_address_id", None)
    shipping_address_id = request.session.get("shipping_address_id", None)

    billing_profile, billing_profile_created = BillingProfile.objects.new_or_get(
        request)
    address_qs = None
    if billing_profile is not None:
        if request.user.is_authenticated:
            address_qs = Address.objects.filter(
                billing_profile=billing_profile)
        order_obj, order_obj_created = Order.objects.new_or_get(
            billing_profile, cart_obj)
        if shipping_address_id:
            order_obj.shipping_address = Address.objects.get(
                id=shipping_address_id)
            del request.session['shipping_address_id']
        if billing_address_id:
            order_obj.billing_address = Address.objects.get(
                id=billing_address_id)
            del request.session['billing_address_id']
        if billing_address_id or shipping_address_id:
            order_obj.save()

    if request.method == "POST":
        #     checks if order is done?

        if request.POST.get('COD') == 'on':
            choice = 'Cash'
            order_obj.update_payment_type(request.POST, choice=choice)
        is_done = order_obj.check_done()
        if is_done:
            order_obj.mark_done()
            del request.session['cart_id']
            request.session['cart_total'] = 0
            return redirect("cart:success")
    context = {
        "object": order_obj,
        "billing_profile": billing_profile,
        "login_form": login_form,
        "guest_form": guest_form,
        "address_form": address_form,
        "address_qs": address_qs,
        # "mpesa_qs": mpesa_qs,
        # "cash_qs": cash_qs,
        "payment_form": payment_form
    }
    return render(request, "carts/checkout.html", context)
예제 #26
0
def checkout_process_view(request):
    """
     change order status to done after checking out
     when order is checked out cart id in the session should be cleared
     redirect to success
     """
    template_name = 'checkout.html'
    cart_obj, cart_created = Cart.objects.new_or_get(request)
    order_obj = None
    if cart_created or cart_obj.products.count() == 0:
        return redirect('cart:cart-product')

    login_form = LoginForm()
    guest_form = GuestForm()
    address_form = AddressForm()
    billing_address_id = request.session.get("billing_address_id", None)
    shipping_address_id = request.session.get("shipping_address_id", None)

    billing_profile, billing_profile_created = BillingProfile.objects.new_or_get(
        request)
    address_qs = None
    if billing_profile is not None:
        if request.user.is_authenticated:
            address_qs = Address.objects.filter(
                billing_profile=billing_profile)
        order_obj, order_obj_created = Order.objects.new_or_get(
            billing_profile, cart_obj)
        if shipping_address_id:
            order_obj.shipping_address = Address.objects.get(
                id=shipping_address_id)
            del request.session["shipping_address_id"]
        if billing_address_id:
            order_obj.billing_address = Address.objects.get(
                id=billing_address_id)
            del request.session["billing_address_id"]
        if billing_address_id or shipping_address_id:
            order_obj.save()

    if request.method == "POST":
        "check that order is done"
        is_done = order_obj.check_done()
        if is_done:
            order_obj.mark_paid()
            request.session['cart_items'] = 0
            del request.session['cart_id']
            return redirect('cart:checkout-done')
    context = {
        'order': order_obj,
        'billing_profile': billing_profile,
        'login_form': login_form,
        'guest_form': guest_form,
        'address_form': address_form,
        'address_qs': address_qs,
    }
    return render(request, template_name, context)
예제 #27
0
def checkout_home(request):
    cart_obj, new_cart_created = Cart.objects.new_or_get(request)
    order_obj = None
    if new_cart_created or cart_obj.products.count() == 0:
        # cart not exist or empty cart, we do not proceed to check out
        return redirect("cart:home")

    login_form = LoginForm()
    guest_form = GuestForm()
    address_form = AddressForm()

    billing_address_id = request.session.get("billing_address_id", None)
    shipping_address_id = request.session.get("shipping_address_id", None)

    billing_profile, billing_guest_profile_created = BillingProfile.objects.new_or_get(
        request)

    address_qs = None

    if billing_profile:
        if request.user.is_authenticated():
            address_qs = Address.objects.filter(
                billing_profile=billing_profile)

        order_obj, order_obj_created = Order.objects.new_or_get(
            billing_profile, cart_obj)
        if shipping_address_id:
            order_obj.shipping_address = Address.objects.get(
                id=shipping_address_id)
            del request.session["shipping_address_id"]
        if billing_address_id:
            order_obj.billing_address = Address.objects.get(
                id=billing_address_id)
            del request.session["billing_address_id"]
        if shipping_address_id or billing_address_id:
            order_obj.save()

    if request.method == 'POST':
        'check order is done'
        is_done = order_obj.check_done()
        if is_done:
            order_obj.mark_paid()
            request.session['cart_items'] = 0
            del request.session['cart_id']
            return redirect("cart:success")

    context = {
        "order": order_obj,
        "billing_profile": billing_profile,
        "login_form": login_form,
        "guest_form": guest_form,
        "address_form": address_form,
        "address_qs": address_qs
    }
    return render(request, "carts/checkout.html", context)
예제 #28
0
def checkout_home(request):
    cart_obj, cart_created = Cart.objects.new_or_get(request)
    order_obj = None
    if cart_created or cart_obj.products.count() == 0:
        return redirect('cart:home')

    login_form = LoginForm()
    guest_form = GuestForm()
    address_form = AddressForm()
    billing_address_form = AddressForm()
    billing_address_id = request.session.get('billing_address_id', None)
    shipping_address_id = request.session.get('shipping_address_id', None)

    billing_profile, billing_profile_created = BillingProfile.objects.new_or_get(
        request)
    address_qs = None
    if request.user.is_authenticated:
        address_qs = Address.objects.filter(billing_profile=billing_profile)

    if billing_profile is not None:
        order_obj, order_obj_created = Order.objects.new_or_get(
            billing_profile, cart_obj)
        if shipping_address_id:
            order_obj.shipping_address = Address.objects.get(
                id=shipping_address_id)
            del request.session['shipping_address_id']
        if billing_address_id:
            order_obj.billing_address = Address.objects.get(
                id=billing_address_id)
            del request.session['billing_address_id']

        if billing_address_id or shipping_address_id:
            order_obj.save()

    if request.method == "POST":
        is_done = order_obj.check_done()
        if is_done:
            order_obj.mark_paid()
            request.session['cart_items'] = 0
            del request.session['cart_id']
            print(order_obj.status)
            return redirect('cart:checkout-success')

    context = {
        'object': order_obj,
        'billing_profile': billing_profile,
        'login_form': login_form,
        'guest_form': guest_form,
        'address_form': address_form,
        'billing_address_form': billing_address_form,
        "address_qs": address_qs,
    }

    return render(request, 'carts/checkout.html', context)
예제 #29
0
def order_checkout(request):
    cart_obj, new = Cart.objects.new_or_get(request)
    if new or cart_obj.products.count() == 0:
        return redirect('cart:home')
    login_form = UserLoginForm()
    guest_user_form = GuestForm()
    ship_add_form = AddressForm()
    bill_add_form = AddressForm()
    billing_address_id = request.session.get("billing_address_id", None)
    shipping_address_id = request.session.get("shipping_address_id", None)
    bill_profile, created = BillingProfile.objects.new_or_get(request)
    order_obj = None
    address_qs = Address.objects.filter(billing_profle=bill_profile)

    if bill_profile is not None:
        # if there are other objects then make them inactive for now,
        if request.user.is_authenticated:
            address_qs = Address.objects.filter(billing_profle=bill_profile)
        order_qs = Order.objects.filter(billing_profle=bill_profile,
                                        cart=cart_obj,
                                        active=True,
                                        status="created")
        if order_qs.count() >= 1:
            order_obj = order_qs.first()
        else:
            order_obj = Order.objects.create(cart=cart_obj,
                                             billing_profle=bill_profile)
        if billing_address_id:
            order_obj.bill_add = Address.objects.get(id=billing_address_id)
            del request.session["billing_address_id"]
        if shipping_address_id:
            order_obj.ship_add = Address.objects.get(id=shipping_address_id)
            del request.session["shipping_address_id"]
        if billing_address_id or shipping_address_id:
            order_obj.save()
    if request.method == 'POST':
        isvalid = order_obj.final_check()
        if isvalid:
            order_obj.status_paid()
            del request.session["cart_id"]
            request.session["cart_items"] = 0
            if 'guest_email_id' in request.session.keys():
                del request.session['guest_email_id']
            return render(request, "order/success.html", {'order': order_obj})
    responseData = {
        'ship_add': ship_add_form,
        'bill_add': bill_add_form,
        'order': order_obj,
        'bill_profile': bill_profile,
        'form': login_form,
        'guest_form': guest_user_form,
        'address_qs': address_qs
    }
    return render(request, 'order/checkout.html', responseData)
예제 #30
0
def checkout_home(request):
    cart_obj, cart_created = Cart.objects.new_or_get(request)
    order_obj = None
    if cart_created or cart_obj.products.count() == 0:
        return redirect("cart:home")

    login_form = LoginForm()
    guest_form = GuestForm()
    address_form = AddressForm()
    billing_address_id = request.session.get("billing_address_id", None)
    shipping_address_id = request.session.get("shipping_address_id", None)

    print("BILLING ID:", billing_address_id)
    print("SHIPPING ID:", shipping_address_id)
    billing_profile, billing_profile_created = BillingProfile.objects.new_or_get(
        request)
    address_qs = None
    if billing_profile is not None:
        if request.user.is_authenticated():
            address_qs = Address.objects.filter(
                billing_profile=billing_profile)
        order_obj, order_obj_created = Order.objects.new_or_get(
            billing_profile, cart_obj)
        if shipping_address_id:
            order_obj.shipping_address = Address.objects.get(
                id=shipping_address_id)
            del request.session["shipping_address_id"]
        if billing_address_id:
            order_obj.billing_address = Address.objects.get(
                id=billing_address_id)
            del request.session["billing_address_id"]

        if billing_address_id or shipping_address_id:
            order_obj.save()

    if request.method == "POST":
        "some check that order is done"
        is_done = order_obj.check_done()
        if is_done:
            order_obj.mark_paid()
            del request.session['cart_id']
            del request.session['cart_total']
        return redirect("cart:success")

    context = {
        "order": order_obj,
        "billing_profile": billing_profile,
        "login_form": login_form,
        "guest_form": guest_form,
        "address_form": address_form,
        "address_qs": address_qs,
    }
    return render(request, "carts/checkout.html", context)