def checkout(request):
    # import pdb; pdb.set_trace()
    cart=Cart(request)
    if cart.count() == 0:
        return HttpResponseRedirect('/my-cart')

    profile = Profile.objects.get(user__username=request.user)
    form = DeliveryAddress(request.POST or None, instance=profile)
    delivery_form = DeliveryServiceForm(request.POST or None)
    tot_weight = request.session['total_weight']

    if form.is_valid() and delivery_form.is_valid():        
        delivery_cost = delivery_form.cleaned_data['service']
        tot_vat = request.POST.get('tot_vat')
        # import pdb; pdb.set_trace()
        # order data
        order = Order()
        order.user = request.user
        order.amount = float(cart.summary()) + float(delivery_cost.cost) + float(tot_vat)
        order.vat = float(tot_vat)
        order.status = 'NEW'
        order.order_notes = request.POST.get('notes')
        order.save()
        # order detail data
        for ca in cart:
            orderdetail = OrderDetail()
            orderdetail.order = order
            orderdetail.product = ca.product
            orderdetail.weight = ca.product.weight
            orderdetail.surcharge = ca.product.surcharge
            orderdetail.price = ca.unit_price
            orderdetail.qty = ca.quantity
            orderdetail.amount = ca.total_price
            orderdetail.save()
        # order delivery data
        orderdelivery = OrderDelivery ()
        orderdelivery.order = order
        orderdelivery.first_name = form.cleaned_data['first_name']
        orderdelivery.last_name = form.cleaned_data['last_name']
        orderdelivery.business_name = form.cleaned_data['business_name']
        orderdelivery.address_line1 = form.cleaned_data['address_line1']
        orderdelivery.address_line2 = form.cleaned_data['address_line2']
        orderdelivery.city = form.cleaned_data['city']
        orderdelivery.state = form.cleaned_data['state']
        orderdelivery.postcode = form.cleaned_data['postcode']
        orderdelivery.country = form.cleaned_data['country']
        orderdelivery.telephone = form.cleaned_data['telephone']
        orderdelivery.service = delivery_cost.title
        orderdelivery.cost = delivery_cost.cost
        orderdelivery.weight = tot_weight
        orderdelivery.save()
        cart.clear()
        messages.success(request, "Your order was complete.")
        return HttpResponseRedirect('/orderreview/'+ order.order_no)

    try:        
        check_band = PostageCountry.objects.get(country=profile.country)        
        band = check_band.band        
        request.session['vat'] = check_band.vat
    except:
        band = ''    
        
    delivery_form.fields['service'] = forms.ModelChoiceField(required=True, queryset=PostageRate.objects.all().filter(band=band,active=True,weight_start__lte=tot_weight,weight_to__gte=tot_weight), widget=forms.Select(attrs={'class': 'form-control'}))

    data = {'form':form,'delivery_form':delivery_form}
    return render_to_response('order/checkout.html', data, context_instance=RequestContext(request, processors=[custom_proc]))