Example #1
0
def render_cart(request, template_name='product/cart_fragment.html'):
    cart = shcart.get_cart_from_request(request)
    cart_items = shcart.get_cart_items(cart)
    if request.is_ajax():
        response = serializers.serialize("json", cart_items)
        return HttpResponse(response, content_type='application/json')
    return render_to_response(template_name, {'cart_items': cart_items} )        
Example #2
0
def show_cart(request):
	template = 'cart/cart.html'

	if request.method == 'POST':
		postdata = request.POST.copy()
		
		if 'remove' in postdata:
			cart.remove_from_cart(request) 

		if 'update' in postdata:
			cart.update_cart(request) 

		if 'Checkout' in postdata:
			checkout_url = checkout.get_checkout_url(request)
			return HttpResponseRedirect(checkout_url)
	
	cart_items = cart.get_cart_items(request)
	page_title = 'Shopping Cart'
	cart_subtotal = cart.cart_subtotal(request)
	
	context = {
			  'cart_items': cart_items,
			  'page_title': page_title,
			  'cart_subtotal': cart_subtotal,
			  }
	return render(request, template, context) 
Example #3
0
def show_cart(request):
    if request.method == 'POST':
        post_data = request.POST.copy()
        if 'submit_remove.x' in post_data:
            cart.remove_from_cart(request)
        if 'submit_update.x' in post_data:
            cart.update_cart(request)
    cart_item_count = cart.cart_distinct_item_count(request)
    cart_items = cart.get_cart_items(request)
    # mostrar el panel amarillo con infos muy importantes(1 de solo 2)
    if request.user.is_authenticated():
        try:
            promo4 = Promo4.objects.get(winner_user=request.user, active=True)
            small_text = "Ud. ha sido el ganador de una rifa, y ahora puede comprar estos productos<br/>"
            big_text = "Por un descuento del %d%%" % promo4.discount
        except Promo4.DoesNotExist:
            code, discount_ = get_discount_code(request)
            small_text = u"Puedes usar tu código de descuento aquí. %s%%" % discount_
            big_text = code

    total, discount, promotions, cart_subtotal, shipping_tax, shipping_tax_promotions = promo(
        request, cart_item_count, cart_items)
    page_title = 'Shopping Cart'
    return render_to_response('cart/show_cart.html',
                              locals(),
                              context_instance=RequestContext(request))
def show_cart(request):
    cart_items = cart.get_cart_items(request)
    cart_subtotal = cart.cart_subtotal(request)
    if len(cart_items) == 0:
        return render(request, 'account/error.html',{'error':'Cart is empty!'})
    else:
        return render(request,'cart/cart.html',{'cart_items':cart_items,
                                            'cart_id':cart_items[0].cart_id,
                                            'cart_subtotal':cart_subtotal, 'user':request.user})
Example #5
0
def confirm_selections(request):
    "Display the selected products and pricing info and identify payment mechanism."
    account = request.user.get_profile().account

    cart = shcart.get_cart_from_request(request)
    cart_items = shcart.get_cart_items(cart)
    cart_total = sum([i.extended_price for i in cart_items])
              
    return render_to_response( "product/product_selection_review.html", locals(), 
        context_instance=RequestContext(request) )
Example #6
0
def confirm_order(request):
    user = request.user
    domain_url = ''.join(['http://', get_current_site(request).domain])
    cart_items = cart.get_cart_items(request)
    page_title = u'Подтверждение'
    cart_item_count = cart.cart_item_count(request)
    cart_total = cart.cart_total(request)
    form = CheckoutForm(request.POST or None, request.FILES or None)
    if request.method == 'POST':
        if form.is_valid():
            # telephone_1 = form.cleaned_data['telephone_1']
            # email = form.cleaned_data['email']
            recipients = ['*****@*****.**', '*****@*****.**']
            # Send email
            mail_template = 'mail/mail_order.html'
            # mail_txt = 'cart/mail.txt'
            # plaintext = get_template(mail_txt)
            # text_content = plaintext.render(d)
            context_dict_0 = {'cart_items': cart_items, 'cart_item_count': cart_item_count, 'cart_total': cart_total,
                              'domain_url': domain_url}
            context_dict = dict(context_dict_0.items() + form.cleaned_data.items())
            mail_theme = u'ЗАКАЗ'
            push_mail(context_dict, mail_theme, recipients, mail_template, False)
            # Clear Cart
            order = cart.create_order(request)
            if order.payment == u'Банковский перевод':
                schet = cart.create_schet(order)
                if order.email:
                    recipients = [order.email, ]
                    mail_template = 'cart/schet.html'
                    context_dict = {'schet': schet}
                    mail_theme = u'Тест - Счет для оплаты от магазина Феникс'
                    push_mail(context_dict, mail_theme, recipients, mail_template, True)
                return render_to_response("cart/schet.html",
                                          {'request': request, 'user': user, 'schet': schet})
            else:
                return render_to_response("cart/thanks.html",
                                          {'request': request, 'user': user})
    else:
        if request.user.is_authenticated():
            user = request.user
            data = {'last_name': user.last_name,
                    'first_name': user.first_name,
                    'patronymic': user.patronymic,
                    'email': user.email,
                    'telephone_1': user.telephone_1,
                    'country': user.country,
                    'region': user.region,
                    'city': user.city,
                    'adress': user.adress,
                    'index': user.index,
                    'skype': user.skype,
                    }
            form = CheckoutForm(initial=data)
    return render_to_response("cart/confirm.html", locals(), context_instance=RequestContext(request))
Example #7
0
def show_cart(request, template_name='cart/cart.html'):
    if request.method == "POST":
        postdata = request.POST.copy()
        if postdata['submit'] == "Remove":
            cart.remove_from_cart(request)
        if postdata['submit'] == "Update":
            cart.update_cart(request)
    cart_items = cart.get_cart_items(request)
    page_title = "Shopping Cart"
    cart_subtotal = cart.cart_subtotal(request)
    return render_to_response(template_name, locals(), RequestContext(request))
Example #8
0
def show_cart(request, template_name="cart/cart.html"): 
    if request.method == 'POST': 
        postdata = request.POST.copy() 
        if postdata['submit'] == 'Remove': 
            cart.remove_from_cart(request) 
        if postdata['submit'] == 'Update': 
            cart.update_cart(request) 
    cart_items = cart.get_cart_items(request) 
    page_title = 'Shopping Cart' 
    cart_subtotal = cart.cart_subtotal(request) 
    return render_to_response(template_name, locals(),context_instance=RequestContext(request))
Example #9
0
def show_cart(request):
    cart_items = cart.get_cart_items(request)

    if request.method == 'POST':
        postdata = request.POST.copy()
        if 'update' in postdata.keys():
            cart.update_cart(request)
        if 'remove' in postdata.keys():
            cart.remove_from_cart(request)
            
    cart_subtotal = cart.get_cart_subtotal(request)
    total = cart_subtotal
    return render_to_response('irteerak/cart.html',locals(),context_instance=RequestContext(request))
Example #10
0
def show_cart(request, template_name = 'cart/cart.html'):
    if request.method == 'POST':
        postdata = request.POST.copy()
        if postdata['submit']=='Remove':
            cart.remove_from_cart(request)
        if postdata['submit']=='Update':
            cart.update_cart(request)
    cart_item = cart.get_cart_items(request)
    cart_id = cart._cart_id(request)
    page_title = 'Корзина'
    cart_subtotal = cart.cart_subtotal(request)
    context = {'cart_item': cart_item, 'cart_id': cart_id, 'cart_subtotal': cart_subtotal}
    return render(request, template_name, context)
Example #11
0
def show_cart(request, template_name="cart/cart.html"):
    if request.method == 'POST':
        subtotal_class = cart.Subtotal(request)
        cart_items = cart.get_cart_items(request)
#        cart_subtotal = subtotal_class.subtotal()
        discount = subtotal_class.discount
        postdata = request.POST.copy()
        form = OrderForm(request.POST)

        if 'Remove' in postdata:
            cart.remove_from_cart(request)
        if 'Update' in postdata:
            cart.update_cart(request)
        if form.is_valid():
            # Пишу клиента в базу
            cart.save_client(request, form)
            # Удаляю сессию у клиента
            del request.session['cart_id']
            is_order = 1
            # Отправляем админу смс
            if SEND_SMS:
                cart.send_sms(cart_items, form)
            # Отправляем админу email
            if SEND_EMAIL:
                cart.send_admin_email(request, cart_items, form)
                if form.cleaned_data['email']:
                    # Отправляем email клиенту
                    cart.send_client_email(cart_items, form)
    else:
        form = OrderForm()

    cart_items = cart.get_cart_items(request)
#    if cart_items:
#        subtotal_class = cart.Subtotal(request)
#        cart_subtotal = subtotal_class.subtotal()
#        discount = subtotal_class.discount
    page_title = 'Корзина'
    return render_to_response(template_name, locals(), context_instance=RequestContext(request))
Example #12
0
def checkout_done(request):
    order = Order.objects.get(pk=request.session[ORDER_ID_SESSION_KEY])     
    cart_items=[] 
    for item in cart.get_cart_items(request):
        oi = OrderItem(product=item.irteera,quantity=item.quantity,
                       price=item.irteera.irteera.prezio_orokorra, 
                       order=order)
                                
        oi.save()

    cart_items = OrderItem.objects.filter(order=order)
    total=order.get_total()
    cart.end_session(request)
    return render_to_response('irteerak/checkout_done.html',locals(),context_instance=RequestContext(request))
Example #13
0
def show_cart(request):
    if request.method == 'POST':
        postdata = request.POST.copy()
        if postdata['submit'] == 'Remove':
            cart.remove_from_cart(request)
        if postdata['submit'] == 'Update':
            cart.update_cart(request)
        if postdata['submit'] == 'Checkout':
            checkout_url = checkout.get_checkout(request)
            return HttpResponseRedirect(checkout_url)
    cart_items = cart.get_cart_items(request)
    page_title = 'Shopping Cart'
    cart_subtotal = cart.cart_subtotal(request)
    return render(request, 'cart/cart.html', locals())
Example #14
0
def show_cart(request, template_name="cart/cart.html"):
    if request.method == "POST":
        postdata = request.POST.copy()
        if postdata['submit'] == "Remove":
            cart.remove_from_cart(request)
        if postdata['submit'] == "Update":
            cart.update_cart(request)
            
    cart_items = cart.get_cart_items(request)
    page_title = 'Shopping Cart'
    cart_subtotal = cart.cart_subtotal(request)

    return render_to_response(template_name, locals(),
                              context_instance=RequestContext(request))
Example #15
0
def show_cart(request, template_name="cart/show_cart.html"):
    page_title = 'Musical Instruments and Sheet Music for Musicians'
    if request.method == 'POST':
        post_data = request.POST.copy()
        if post_data['submit'] == "Update":
            cart.update_cart(request)
        if post_data['submit'] == 'Remove':
            cart.remove_from_cart(request)

    cart_subtotal = cart.cart_subtotal(request)    
    cart_items =  cart.get_cart_items(request)
    
    
    return render_to_response(template_name, locals(),
                              context_instance=RequestContext(request))
Example #16
0
def select_products(request, template="product/product_selection.html", extra_context={}):
    "Provides the template with a product list and the cart item list, combined for users purchase."
    user = request.user
    if user is None or not user.is_authenticated():
        return HttpResponseRedirect('/') ## FIXME with decorators..
    
    account = request.user.get_profile().account

    # post means they've selected somethign to purchase. put the items in your 'cart' and go to confirm stage
    cart = shcart.get_cart_from_request(request)

    if request.method == 'POST':
        shcart.destroy_cart(cart)        
        cart_empty = True        
        product_quantities = [ (int(id[6:]), int(count or 0)) 
                                for (id, count) 
                                    in request.POST.items() 
                                        if id.startswith('count_') and int(count or 0)]
        logger.debug('product_quantities\n\n\n\n %s, %s, %s', product_quantities, bool(product_quantities), len(product_quantities))
        if product_quantities:      
            cart_empty = False                  
            for prod_id, qty in product_quantities:
                shcart.add_item(cart, prod_id, int(qty))                
                
        if '_purchase' in request.POST:            
            if cart_empty:
                errors = ["You cannot checkout until you purchase at least one item!"]
            else:
                # go to confirmation page
                return HttpResponseRedirect(reverse("confirm_purchase_selections"))
        return HttpResponseRedirect(reverse('select_products'))

    cart_items = shcart.get_cart_items(cart)
    cart_total = sum([i.extended_price for i in cart_items])
    item_hash = dict()
    for item in cart_items:
        item_hash[item.product_id] = item

    products = Product.objects.all()
    pricelist = [ (product, item_hash.get(product.id, 0)) for product in products]
        
    # the following won't work, since extended_price is not a database field...
    # cart_total = cart_items.aggregate(Sum('extended_price')).get('extended_price__sum', 0)
        
    logger.debug('cart items: %s', cart_items)
    context = {'pricelist': pricelist, 'cart_items': cart_items, 'cart_total': cart_total}
    context.update(extra_context)
    return render_to_response( template, context, context_instance=RequestContext(request) )
Example #17
0
def show_cart(request, template_name="cart/cart.html"):
    if request.method == 'POST':
        postdata = request.POST.copy()
        if postdata['submit'] == 'Remove':
            cart.remove_from_cart(request)
        if postdata['submit'] == 'Update':
            cart.update_cart(request)
        if postdata['submit'] == 'Checkout':
            checkout_url = checkout.get_checkout_url(request)
            return HttpResponseRedirect(checkout_url)
    cart_items = cart.get_cart_items(request)
    page_title = 'Shopping Cart'
    cart_subtotal = cart.cart_subtotal(request)
    # need for Google Checkout button
    #merchant_id = settings.GOOGLE_CHECKOUT_MERCHANT_ID
    return render_to_response(template_name, locals(),context_instance=RequestContext(request))
Example #18
0
def show_cart(request, template_name="cart/cart.html"):
    categories = Category.objects.all()
    if request.method == "POST":
        postdata = request.POST.copy()
        if postdata["submit"] == "Remove":
            cart.remove_from_cart(request)
        if postdata["submit"] == "Update":
            cart.update_cart(request)
        if postdata["submit"] == "Checkout":
            checkout_url = checkout.get_checkout_url(request)
            return HttpResponseRedirect(checkout_url)
    cart_items = cart.get_cart_items(request)
    page_title = "Shopping Cart"
    cart_subtotal = cart.cart_subtotal(request)
    # for Google Checkout button
    merchant_id = settings.GOOGLE_CHECKOUT_MERCHANT_ID
    return render_to_response(template_name, locals(), context_instance=RequestContext(request))
Example #19
0
def show_cart(request, template_name="cart/cart.html"):
  """Displays the shopping cart page
  """
  context = set_context(request, Context({
    'page_title': 'Shopping Cart',
  }))

  if request.method == 'POST':
    postdata = request.POST.copy()
    if postdata['submit'] == 'Remove':
      cart.remove_from_cart(request)
    if postdata['submit'] == 'Update':
      cart.update_cart(request)

  context['cart_items'] = cart.get_cart_items(request)
  context['cart_subtotal'] = cart.cart_subtotal(request)

  return render(request, template_name, context)
Example #20
0
def checkout(request):
	if request.method == "POST":
		postdata = request.POST.copy()
		form = OrderdetailsForm(postdata)
		if form.is_valid():
			instance = form.save()
			cart_items = get_cart_items(request)
			for cart_item in cart_items:
				product = Product.objects.get(product_name = cart_item['product'])
 				order = Order(product = product, quantity = cart_item['quantity'], order_details_id = instance)
 				order.save()
 				request.session.clear()
			return redirect('thanks')
		
	else:
		form = OrderdetailsForm()
	categories = Product.objects.values_list('category_name', flat = True ).distinct()
	return render(request, 'frontend/checkout.html', {'categories' : categories, 'form' : form} )
Example #21
0
def show_cart(request, template_name="cart/cart.html"):
    categories = Category.objects.all()
    if request.method == 'POST':
        postdata = request.POST.copy()
        if postdata['submit'] == 'Remove':
            cart.remove_from_cart(request)
        if postdata['submit'] == 'Update':
            cart.update_cart(request)
        if postdata['submit'] == 'Checkout':
            checkout_url = checkout.get_checkout_url(request)
            return HttpResponseRedirect(checkout_url)
    cart_items = cart.get_cart_items(request)
    page_title = 'Shopping Cart'
    cart_subtotal = cart.cart_subtotal(request)
    # for Google Checkout button
    merchant_id = settings.GOOGLE_CHECKOUT_MERCHANT_ID
    return render_to_response(template_name,
                              locals(),
                              context_instance=RequestContext(request))
Example #22
0
def show_cart(request, template_name="cart.html"):
    if request.method == 'POST':
        postdata = request.POST.copy()
        s = postdata['submit']
        c = u'\uf021'
        r = u'\uf00d'

        if postdata['submit'] == r:
            cart.remove_from_cart(request)

        if postdata['submit'] == c:
            cart.update_cart(request)

    cart_items = cart.get_cart_items(request)
    page_title = "Ваш Заказ"
    cart_subtotal = cart.cart_subtotal(request)
    cart_distinct = cart.cart_distinct_item_count(request)

    categories = Category.objects.filter(is_active=True)
    brands = Brand.objects.filter(is_active=True)

    return render_to_response(template_name, locals(), context_instance=RequestContext(request))
Example #23
0
def show_cart(request, template_name="cart/cart.html"):
    cart_item_count = cart.cart_item_count(request)
    if request.method == 'POST':
        postdata = request.POST.copy()
        print postdata
        if postdata['submit'] == u'Удалить':
            cart.remove_from_cart(request)
            message = u'Товар удален из корзины.'
            messages.success(request, message)
        if postdata['submit'] == u'Сохранить':
            cart.update_cart(request)
            message = u'Изменения приняты.'
            messages.success(request, message)
        return redirect('show_cart')
    cart_items = cart.get_cart_items(request)
    page_title = u'Корзина'
    cart_total = cart.cart_total(request)
    torgpred = False
    user = request.user
    if user.groups.filter(name=u'Торговые представители').exists():
        torgpred = True
    return render_to_response(template_name, locals(), context_instance=RequestContext(request))
Example #24
0
def ajax_promo3(request):
    cart_item_count = cart.cart_distinct_item_count(request)
    cart_items = cart.get_cart_items(request)
    # ver si este usuario tiene asignado un codigo de descuento.
    try:
        promo3 = Promo3.objects.get(user=request.user)
        real_code = promo3.code
        code = request.POST.get('code', '')
        if real_code == code:
            promotion_by_code_discount = promo3.discount
            success = 'True'
            request.session['promo3_id'] = str(promo3.id)

        else:
            promotion_by_code_discount = None
            success = 'False'
    except Promo3.DoesNotExist:
        success = 'False'
        promotion_by_code_discount = None
    total, discount, promotions, cart_subtotal, shipping_tax, shipping_tax_promotions = promo(
        request,
        cart_item_count,
        cart_items,
        promotion_by_code_discount=promotion_by_code_discount)

    resp_dict = {
        'success': success,
        'total': '$%.2f' % total,
        'discount': '$%.2f' % discount,
        'promotions': promotions,
        'cart_subtotal': '$%.2f' % cart_subtotal,
        'shipping_tax': '$%.2f' % shipping_tax,
        'shipping_tax_promotions': shipping_tax_promotions
    }
    response = json.dumps(resp_dict)
    # request.session['total'] = str(total)
    return HttpResponse(response,
                        content_type='application/javascript; charset=utf-8')
Example #25
0
def checkout_index(request):
    PAYMENT_PROCESS_NAME = getattr(settings, 'CSIRTEERAK_PAYMENT_PROCESS_NAME', 'csirteerak_checkout_done')
    
    cart_items = cart.get_cart_items(request)
    total = cart.get_cart_subtotal(request)
    irteera_dict={}

    for item in cart_items:
       if item.irteera.irteera.id==3:
          irteera_aukera = item.irteera.irteera
       irteeran_okupatuta_n = item.irteera.getDisponibilitatea()
       irteeraren_muga = item.irteera.irteera.bisitari_kopuru_mugatua
       bisitan_honetan_datoz_n = item.quantity
       totalean_bisitan = irteeran_okupatuta_n+bisitan_honetan_datoz_n

       if totalean_bisitan>irteeraren_muga:
          return render_to_response('irteerak/muga.html',locals(),context_instance=RequestContext(request))

    if request.method == 'POST':
        postdata = request.POST.copy()
        postdata['user'] = request.user.id

        form = CheckOutForm(postdata)     

        if form.is_valid():

           item=form.save()
           item.set_order_number()
           request.session[ORDER_ID_SESSION_KEY]=item.id
           return HttpResponseRedirect(reverse(PAYMENT_PROCESS_NAME))
        else:
           form =  CheckOutForm(postdata)
           return render_to_response('irteerak/order_index.html',locals(),context_instance=RequestContext(request))

    form =  CheckOutForm()

    return render_to_response('irteerak/order_index.html',locals(),context_instance=RequestContext(request))
Example #26
0
def create_order(request, postdata):
    order = Order()

    # order.user = None
    # if request.user.is_authenticated():
    # order.user = request.user

    # данные с формы
    data = {
        u"Имя": postdata["first-name"],
        u"Фамилия": postdata["last-name"],
        u"Email": postdata["email"],
        u"Телефон": postdata["phone"],
        u"Время звонка": postdata["call-time"],
        u"Область": postdata["region"],
        u"Город": postdata["city"],
        u"Улица": postdata["street"],
        u"Дом": postdata["building"],
        u"Квартира": postdata["flat"],
        u"Способ доставки": postdata["ship-method"],
        u"Номер склада (адрес офиса)": postdata["warehouse"],
        u"Комментарий к заказу": postdata["comment"],
        u"Дополнительная информация": postdata["additional_info"],
    }

    # добавление данных в модель заказа
    order.first_name = data[u"Имя"]
    order.last_name = data[u"Фамилия"]
    order.email = data[u"Email"]
    order.phone = data[u"Телефон"]
    order.call_time = data[u"Время звонка"]
    order.region = data[u"Область"]
    order.city = data[u"Город"]
    order.street = data[u"Улица"]
    order.building = data[u"Дом"]
    order.flat = data[u"Квартира"]
    order.ship_method = data[u"Способ доставки"]
    order.office = data[u"Номер склада (адрес офиса)"]
    order.additional_info = data[u"Дополнительная информация"]
    order.comment = data[u"Комментарий к заказу"]
    order.ip_address = request.META.get("REMOTE_ADDR")
    order = Order(**data)
    order.status = order.SUBMITTED
    order.save()
    # отправка почты менеджеру
    send_mail_manager(data, order)
    # отправка почты заказчкику
    if data[u"Email"] != "":
        send_mail_customer(data, order)
    # if the order save succeeded
    if order.pk:
        cart_items = cart.get_cart_items(request)
        for ci in cart_items:
            # create order item for each cart item
            oi = OrderItem()
            oi.order = order
            oi.quantity = ci.quantity
            oi.price = ci.price  # now using @property
            oi.product = ci.product
            oi.save()
        # all set, empty cart
        cart.empty_cart(request)
Example #27
0
def paypal_checkout(request,  
                    collection_template='product/paypal_checkout.html', 
                    confirmation_template='product/paypal_checkout.html', 
                    success_url=None,
                    form_class=PaymentForm, 
                    extra_context=None):    
    """
    Checkout the current shopping cart via paypal..
    
    Template context:
        - phase
        - account
        - form        
        - cart_items
    
    Checkout consists of three steps:
        1) collect credit card info (while reviewing order info)
           - on submit we do local validation. cycle until this process succeeds or user quits.
           - user can select paypal checkout from the point which initiates alternate flow (managed by the paypal plugin)
        2) display card info and order info for final review
           - on submit we 
               - create an invoice from the currnent cart
               - destroy the current cart
               - send card / order info to payment gateway for processing
           - if processing succeeds
               - find the invoice and mark it paid
           - else if it fails
               - find the invoice and mark it 'failed'. attach failure info to invoice for tracking        
        3) display invoice and success/failure message         
    
    If the user elects paypal checkout, there is an alternate flow.
    """
    
    def item_from_invoice(inv):
        item = {
            "amt":          inv.total,
            "invnum":       inv.id,
            "custom":       request.session.session_key,    # for debugging
            "desc":         inv.description,
            "cancelurl":    make_site_url(reverse('select_products')),     # Express checkout cancel url
            "returnurl":    make_site_url(reverse('dealer-dashboard'))     # Express checkout return url
        } 
        return item

    phase = request.GET.get('p', 'collect')
    logger.debug('entered paypal_checkout: phase=%s, GET=%s, POST=%s', phase, request.GET, request.POST) 
        
    # gather some info we always need
    account = request.user.get_profile().account
    cart = shcart.get_cart_from_request(request)
    cart_items = shcart.get_cart_items(cart)
    template = collection_template
    
    if request.method == 'GET':
        # dieplay cc form
        form = form_class()
    elif request.method == 'POST':
        # validate the cc form. 
        form = form_class(request.POST, request.FILES) 
        if phase == 'collect':
            logger.debug(' paypal_checkout: collect phase...') 
            if form.is_valid():
                template = confirmation_template
                phase = 'confirm'
        elif phase == 'confirm':
            logger.debug(' paypal_checkout: confirm phase...') 
            if form.is_valid():
                logger.debug(' paypal_checkout: confirm phase valid...') 
                invoice = shcart.create_invoice_from_cart(cart, account, request.user)
                response = form._process(request, item_from_invoice(invoice))
                logger.debug(' paypal_checkout: payment response: %s', response) 
                if not response.flag:      
                    invoice.status = Invoice.Const.PAID
                    invoice.save()
                    register_purchase(invoice.id, invoice.customer, invoice.total, invoice.total_credit)          
                    request.user.message_set.create(message='Payment processed successfully - thanks!')
                    if success_url:
                        return HttpResponseRedirect(success_url)
                else:
                    invoice.status = Invoice.Const.CANCELLED
                    #invoice.notes = '%s: %s' % (response.flag_code, response.flag_info)
                    notes = '%s: %s' % (response.flag_code, response.flag_info)
                    invoice.save()
                    request.user.message_set.create(message='Payment processing error - %s' % notes)
                return HttpResponseRedirect(reverse('invoice-detail', kwargs={'object_id': invoice.id}))
            else:
                phase = 'collect'  # back up...
        else:
            return HttpResponseServerError("Internal error - illegal program state: %s" % phase)            
                
    context = locals()
    context.pop('request')
    logger.debug(' paypal_checkout: exiting with context: %s', context) 
    return render_to_response( template, context, context_instance=RequestContext(request))