""" Checkout views """ from django.shortcuts import render_to_response from django.template import RequestContext from django.core.urlresolvers import reverse from django.http import HttpResponseRedirect from django.contrib.sites.models import RequestSite from store_order.models import Order from cart import cart from .checkout import create_order from billing import get_integration gc = get_integration("google_checkout") # fps = get_integration("fps") def checkout(request, template_name="checkout/confirm.html"): """ page displayed with order information before order is placed. """ shopping_cart = cart.get_cart(request) if cart.is_empty(request): return HttpResponseRedirect(reverse("shopping_cart")) order = create_order(request) items = [] for item in shopping_cart.cart_items: item_dict = { "amount": item.unit_price, "name": item.name, "description": item.description, "currency": "USD", "id": item.sku, "quantity": item.quantity, } if item.product.tax_free: item_dict["tax-table-selector"] = "TAX_EXEMPT" items.append(item_dict) shipping_costs = [ { "shipping_type": "flat-rate-shipping", "name": "USPS", "currency": "USD", "price": shopping_cart.cart_shipping_total, } ] gc_taxes = { "default-tax-table": { "tax-rules": [ { "shipping-taxed": False, "rate": 0.055, "tax-area": {"us-state-area": ["ME"]}, } ] }, "alternate-tax-tables": [{"name": "TAX_EXEMPT", "standalone": True}], } private_data = order.pk url_scheme = "http" if request.is_secure(): url_scheme = "https" gc_return_url = "%s://%s%s" % ( url_scheme, RequestSite(request).domain, reverse("checkout_receipt"), ) gc.add_fields( { "items": items, "return_url": gc_return_url, "shipping-methods": shipping_costs, "private_data": private_data, "tax-tables": gc_taxes, } ) # caller_reference = shopping_cart.cart_id # print("callerReference = {0}".format(caller_reference)) # fields = { # "itemTotal": shopping_cart.cart_subtotal, # "transactionAmount": shopping_cart.cart_total, # "pipelineName": "SingleUse", # "shipping": shopping_cart.cart_shipping_total, # "callerReference": caller_reference, # 'collectShippingAddress': True, # "paymentReason": shopping_cart.purchase_description, # "paymentPage": request.build_absolute_uri(), # "returnURL": "%s://%s%s" % (url_scheme, # RequestSite(request).domain, # reverse("fps_return_url")) # } # print("Fields = {0}".format(fields)) # Save the fps.fields["callerReference"] in the db along with # the amount to be charged or use the user's unique id as # the callerReference so that the amount to be charged is known # Or save the callerReference in the session and send the user # to FPS and then use the session value when the user is back. # fps.add_fields(fields) context = { "gc": gc, "shopping_cart": shopping_cart, #'fps': fps, "order": order, } # print("View session_key = {0}".format(request.session.session_key)) return render_to_response( template_name, context, context_instance=RequestContext(request) ) def receipt(request, template_name="checkout/receipt.html"): """ page displayed with order information after an order has been placed successfully """ shopping_cart = cart.get_cart(request) try: order = Order.objects.get(cart_id=shopping_cart.cart_id) except Order.DoesNotExist: return HttpResponseRedirect(reverse("shopping_cart")) context = { "shopping_cart": shopping_cart, "order": order, } # flush the session so that we can't get back request.session.flush() return render_to_response( template_name, context, context_instance=RequestContext(request) )