kopia lustrzana https://github.com/longclawshop/longclaw
				
				
				
			
		
			
				
	
	
		
			81 wiersze
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			81 wiersze
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Python
		
	
	
| from django.shortcuts import render, get_object_or_404
 | |
| from django.views.generic import TemplateView
 | |
| from django.views.decorators.http import require_GET
 | |
| from django.http import HttpResponseRedirect
 | |
| 
 | |
| try:
 | |
|     from django.urls import reverse
 | |
| except ImportError:
 | |
|     from django.core.urlresolvers import reverse
 | |
| 
 | |
| from longclaw.longclawshipping.forms import AddressForm
 | |
| from longclaw.longclawcheckout.forms import CheckoutForm
 | |
| from longclaw.longclawcheckout.utils import create_order
 | |
| from longclaw.longclawbasket.utils import get_basket_items
 | |
| from longclaw.longclaworders.models import Order
 | |
| 
 | |
| 
 | |
| @require_GET
 | |
| def checkout_success(request, pk):
 | |
|     order = get_object_or_404(Order, id=pk)
 | |
|     return render(request, "longclawcheckout/success.html", {'order': order})
 | |
| 
 | |
| 
 | |
| class CheckoutView(TemplateView):
 | |
|     template_name = "longclawcheckout/checkout.html"
 | |
|     checkout_form = CheckoutForm
 | |
|     shipping_address_form = AddressForm
 | |
|     billing_address_form = AddressForm
 | |
| 
 | |
|     def get_context_data(self, **kwargs):
 | |
|         context = super(CheckoutView, self).get_context_data(**kwargs)
 | |
|         items, _ = get_basket_items(self.request)
 | |
|         total_price = sum(item.total() for item in items)
 | |
|         site = getattr(self.request, 'site', None)
 | |
|         context['checkout_form'] = self.checkout_form(
 | |
|             self.request.POST or None)
 | |
|         context['shipping_form'] = self.shipping_address_form(
 | |
|             self.request.POST or None,
 | |
|             prefix='shipping',
 | |
|             site=site)
 | |
|         context['billing_form'] = self.billing_address_form(
 | |
|             self.request.POST or None,
 | |
|             prefix='billing',
 | |
|             site=site)
 | |
|         context['basket'] = items
 | |
|         context['total_price'] = total_price
 | |
|         return context
 | |
| 
 | |
|     def post(self, request, *args, **kwargs):
 | |
|         context = self.get_context_data(**kwargs)
 | |
|         checkout_form = context['checkout_form']
 | |
|         shipping_form = context['shipping_form']
 | |
|         all_ok = checkout_form.is_valid() and shipping_form.is_valid()
 | |
|         if all_ok:
 | |
|             email = checkout_form.cleaned_data['email']
 | |
|             shipping_option = checkout_form.cleaned_data.get(
 | |
|                 'shipping_option', None)
 | |
|             shipping_address = shipping_form.save()
 | |
| 
 | |
|             if checkout_form.cleaned_data['different_billing_address']:
 | |
|                 billing_form = context['billing_form']
 | |
|                 all_ok = billing_form.is_valid()
 | |
|                 if all_ok:
 | |
|                     billing_address = billing_form.save()
 | |
|             else:
 | |
|                 billing_address = shipping_address
 | |
| 
 | |
|         if all_ok:
 | |
|             order = create_order(
 | |
|                 email,
 | |
|                 request,
 | |
|                 shipping_address=shipping_address,
 | |
|                 billing_address=billing_address,
 | |
|                 shipping_option=shipping_option,
 | |
|                 capture_payment=True
 | |
|             )
 | |
|             return HttpResponseRedirect(reverse(
 | |
|                 'longclaw_checkout_success',
 | |
|                 kwargs={'pk': order.id}))
 | |
|         return super(CheckoutView, self).render_to_response(context)
 |