def cart_inline(request, template_name="lfs/checkout/checkout_cart_inline.html"): """Displays the cart items of the checkout page. Factored out to be reusable for the starting request (which renders the whole checkout page and subsequent ajax requests which refresh the cart items. """ cart = cart_utils.get_cart(request) # Shipping selected_shipping_method = lfs.shipping.utils.get_selected_shipping_method(request) shipping_costs = lfs.shipping.utils.get_shipping_costs(request, selected_shipping_method) # Payment selected_payment_method = lfs.payment.utils.get_selected_payment_method(request) payment_costs = lfs.payment.utils.get_payment_costs(request, selected_payment_method) # cart costs cart_costs = cart_utils.get_cart_costs(request, cart) cart_price = cart_costs["price"] + shipping_costs["price"] + payment_costs["price"] cart_tax = cart_costs["tax"] + shipping_costs["tax"] + payment_costs["tax"] return render_to_string(template_name, RequestContext(request, { "cart" : cart, "cart_price" : cart_price, "cart_tax" : cart_tax, "shipping_price" : shipping_costs["price"], "payment_price" : payment_costs["price"], "selected_shipping_method" : selected_shipping_method, "selected_payment_method" : selected_payment_method, }))
def cart_inline(request, template_name="lfs/cart/cart_inline.html"): """The actual content of the cart. This is factored out to be reused within 'normal' and ajax requests. """ cart = cart_utils.get_cart(request) shopping_url = lfs.cart.utils.get_go_on_shopping_url(request) if cart is None: return render_to_string(template_name, RequestContext(request, { "shopping_url" : shopping_url, })) shop = core_utils.get_default_shop() countries = shop.countries.all() selected_country = shipping_utils.get_selected_shipping_country(request) # Get default shipping method, so that we have a one in any case. selected_shipping_method = shipping_utils.get_selected_shipping_method(request) selected_payment_method = payment_utils.get_selected_payment_method(request) shipping_costs = shipping_utils.get_shipping_costs(request, selected_shipping_method) payment_costs = payment_utils.get_payment_costs(request, selected_payment_method) cart_costs = cart_utils.get_cart_costs(request, cart) cart_price = \ cart_costs["price"] + shipping_costs["price"] + payment_costs["price"] cart_tax = \ cart_costs["tax"] + shipping_costs["tax"] + payment_costs["tax"] max_delivery_time = cart_utils.get_cart_max_delivery_time(request, cart) # Calc delivery date for cart (which is the maximum of all cart items) max_delivery_date = cart_utils.get_cart_max_delivery_time(request, cart) return render_to_string(template_name, RequestContext(request, { "cart" : cart, "max_delivery_date" : max_delivery_date, "cart_price" : cart_price, "cart_tax" : cart_tax, "shipping_methods" : shipping_utils.get_valid_shipping_methods(request), "selected_shipping_method" : selected_shipping_method, "shipping_price" : shipping_costs["price"], "payment_methods" : payment_utils.get_valid_payment_methods(request), "selected_payment_method" : selected_payment_method, "payment_price" : payment_costs["price"], "countries" : countries, "selected_country" : selected_country, "max_delivery_time" : max_delivery_time, "shopping_url" : shopping_url, }))
def cart_inline(request, template_name="lfs/cart/cart_inline.html"): """The actual content of the cart. This is factored out to be reused within 'normal' and ajax requests. """ cart = cart_utils.get_cart(request) shopping_url = lfs.cart.utils.get_go_on_shopping_url(request) if cart is None: return render_to_string(template_name, RequestContext(request, {"shopping_url": shopping_url})) shop = core_utils.get_default_shop() countries = shop.countries.all() selected_country = shipping_utils.get_selected_shipping_country(request) # Get default shipping method, so that we have a one in any case. selected_shipping_method = shipping_utils.get_selected_shipping_method(request) selected_payment_method = payment_utils.get_selected_payment_method(request) shipping_costs = shipping_utils.get_shipping_costs(request, selected_shipping_method) payment_costs = payment_utils.get_payment_costs(request, selected_payment_method) cart_costs = cart_utils.get_cart_costs(request, cart) cart_price = cart_costs["price"] + shipping_costs["price"] + payment_costs["price"] cart_tax = cart_costs["tax"] + shipping_costs["tax"] + payment_costs["tax"] max_delivery_time = cart_utils.get_cart_max_delivery_time(request, cart) # Calc delivery date for cart (which is the maximum of all cart items) max_delivery_date = cart_utils.get_cart_max_delivery_time(request, cart) return render_to_string( template_name, RequestContext( request, { "cart": cart, "max_delivery_date": max_delivery_date, "cart_price": cart_price, "cart_tax": cart_tax, "shipping_methods": shipping_utils.get_valid_shipping_methods(request), "selected_shipping_method": selected_shipping_method, "shipping_price": shipping_costs["price"], "payment_methods": payment_utils.get_valid_payment_methods(request), "selected_payment_method": selected_payment_method, "payment_price": payment_costs["price"], "countries": countries, "selected_country": selected_country, "max_delivery_time": max_delivery_time, "shopping_url": shopping_url, }, ), )
def cart_inline(request, template_name="lfs/checkout/checkout_cart_inline.html"): """Displays the cart items of the checkout page. Factored out to be reusable for the starting request (which renders the whole checkout page and subsequent ajax requests which refresh the cart items. """ cart = cart_utils.get_cart(request) # Shipping selected_shipping_method = lfs.shipping.utils.get_selected_shipping_method( request) shipping_costs = lfs.shipping.utils.get_shipping_costs( request, selected_shipping_method) # Payment selected_payment_method = lfs.payment.utils.get_selected_payment_method( request) payment_costs = lfs.payment.utils.get_payment_costs( request, selected_payment_method) # cart costs cart_costs = cart_utils.get_cart_costs(request, cart) cart_price = cart_costs["price"] + shipping_costs["price"] + payment_costs[ "price"] cart_tax = cart_costs["tax"] + shipping_costs["tax"] + payment_costs["tax"] return render_to_string( template_name, RequestContext( request, { "cart": cart, "cart_price": cart_price, "cart_tax": cart_tax, "shipping_price": shipping_costs["price"], "payment_price": payment_costs["price"], "selected_shipping_method": selected_shipping_method, "selected_payment_method": selected_payment_method, }))
def add_order(request): """Adds an order based on current cart for the current customer. It assumes that the customer is prepared with all needed information. This is within the responsibility of the checkout form. """ customer = customer_utils.get_customer(request) order = None invoice_address = customer.selected_invoice_address if customer.selected_shipping_address: shipping_address = customer.selected_shipping_address else: shipping_address = customer.selected_invoice_address cart = cart_utils.get_cart(request) if cart is None: return order cart_costs = cart_utils.get_cart_costs(request, cart, total=False) shipping_method = shipping_utils.get_selected_shipping_method(request) shipping_costs = shipping_utils.get_shipping_costs(request, shipping_method) payment_method = payment_utils.get_selected_payment_method(request) payment_costs = payment_utils.get_payment_costs(request, payment_method) # Set email dependend on login state. An anonymous customer doesn't have a # django user account, so we set the name of the invoice address to the # customer name. # Note: After this has been processed the order's customer email has an # email in any case. That means you can use it to send emails to the # customer. if request.user.is_authenticated(): user = request.user customer_email = user.email else: user = None customer_email = invoice_address.email # Calculate the totals price = cart_costs["price"] + shipping_costs["price"] + payment_costs["price"] tax = cart_costs["tax"] + shipping_costs["tax"] + payment_costs["tax"] order = Order.objects.create( user = user, session = request.session.session_key, price = price, tax = tax, customer_firstname = invoice_address.firstname, customer_lastname = invoice_address.lastname, customer_email = customer_email, shipping_method = shipping_method, shipping_price = shipping_costs["price"], shipping_tax = shipping_costs["tax"], payment_method = payment_method, payment_price = payment_costs["price"], payment_tax = payment_costs["tax"], invoice_firstname = invoice_address.firstname, invoice_lastname = invoice_address.lastname, invoice_company_name = invoice_address.company_name, invoice_street = invoice_address.street, invoice_zip_code = invoice_address.zip_code, invoice_city = invoice_address.city, invoice_country = invoice_address.country, invoice_phone = invoice_address.phone, shipping_firstname = shipping_address.firstname, shipping_lastname = shipping_address.lastname, shipping_company_name = shipping_address.company_name, shipping_street = shipping_address.street, shipping_zip_code = shipping_address.zip_code, shipping_city = shipping_address.city, shipping_country = shipping_address.country, shipping_phone = shipping_address.phone, message = request.POST.get("message", ""), ) # Copy bank account if one exists if customer.selected_bank_account: bank_account = customer.selected_bank_account order.account_number = bank_account.account_number order.bank_identification_code = bank_account.bank_identification_code order.bank_name = bank_account.bank_name order.depositor = bank_account.depositor order.save() # Copy cart items for cart_item in cart.cartitem_set.all(): OrderItem.objects.create( order=order, price_net = cart_item.get_price_net(), price_gross = cart_item.get_price_gross(), tax = cart_item.get_tax(), product = cart_item.product, product_sku = cart_item.product.sku, product_name = cart_item.product.get_name(), product_amount=cart_item.amount, product_price_net = cart_item.product.get_price_net(), product_price_gross = cart_item.product.get_price_gross(), product_tax = cart_item.product.get_tax(), ) cart_item.product.decrease_stock_amount(cart_item.amount) cart.delete() order_submitted.send(order) # Note: Save order for later use in thank you page. The order will be # removed from the session if the thank you page has been called. request.session["order"] = order return order
def add_order(request): """Adds an order based on current cart for the current customer. It assumes that the customer is prepared with all needed information. This is within the responsibility of the checkout form. """ customer = customer_utils.get_customer(request) order = None invoice_address = customer.selected_invoice_address if customer.selected_shipping_address: shipping_address = customer.selected_shipping_address else: shipping_address = customer.selected_invoice_address cart = cart_utils.get_cart(request) if cart is None: return order cart_costs = cart_utils.get_cart_costs(request, cart, total=False) shipping_method = shipping_utils.get_selected_shipping_method(request) shipping_costs = shipping_utils.get_shipping_costs(request, shipping_method) payment_method = payment_utils.get_selected_payment_method(request) payment_costs = payment_utils.get_payment_costs(request, payment_method) # Set email dependend on login state. An anonymous customer doesn't have a # django user account, so we set the name of the invoice address to the # customer name. # Note: After this has been processed the order's customer email has an # email in any case. That means you can use it to send emails to the # customer. if request.user.is_authenticated(): user = request.user customer_email = user.email else: user = None customer_email = invoice_address.email # Calculate the totals price = cart_costs["price"] + shipping_costs["price"] + payment_costs[ "price"] tax = cart_costs["tax"] + shipping_costs["tax"] + payment_costs["tax"] order = Order.objects.create( user=user, session=request.session.session_key, price=price, tax=tax, customer_firstname=invoice_address.firstname, customer_lastname=invoice_address.lastname, customer_email=customer_email, shipping_method=shipping_method, shipping_price=shipping_costs["price"], shipping_tax=shipping_costs["tax"], payment_method=payment_method, payment_price=payment_costs["price"], payment_tax=payment_costs["tax"], invoice_firstname=invoice_address.firstname, invoice_lastname=invoice_address.lastname, invoice_company_name=invoice_address.company_name, invoice_street=invoice_address.street, invoice_zip_code=invoice_address.zip_code, invoice_city=invoice_address.city, invoice_country=invoice_address.country, invoice_phone=invoice_address.phone, shipping_firstname=shipping_address.firstname, shipping_lastname=shipping_address.lastname, shipping_company_name=shipping_address.company_name, shipping_street=shipping_address.street, shipping_zip_code=shipping_address.zip_code, shipping_city=shipping_address.city, shipping_country=shipping_address.country, shipping_phone=shipping_address.phone, message=request.POST.get("message", ""), ) # Copy bank account if one exists if customer.selected_bank_account: bank_account = customer.selected_bank_account order.account_number = bank_account.account_number order.bank_identification_code = bank_account.bank_identification_code order.bank_name = bank_account.bank_name order.depositor = bank_account.depositor order.save() # Copy cart items for cart_item in cart.cartitem_set.all(): OrderItem.objects.create( order=order, price_net=cart_item.get_price_net(), price_gross=cart_item.get_price_gross(), tax=cart_item.get_tax(), product=cart_item.product, product_sku=cart_item.product.sku, product_name=cart_item.product.get_name(), product_amount=cart_item.amount, product_price_net=cart_item.product.get_price_net(), product_price_gross=cart_item.product.get_price_gross(), product_tax=cart_item.product.get_tax(), ) cart_item.product.decrease_stock_amount(cart_item.amount) cart.delete() order_submitted.send(order) # Note: Save order for later use in thank you page. The order will be # removed from the session if the thank you page has been called. request.session["order"] = order return order