def checkout_manual_payment(request):
    from payments.models import ManualPaymentShopSettings
    
    
    id = request.POST.get("manual_payment_id", None)
    payment = get_object_or_404(ManualPaymentShopSettings, pk=id)
    
    if request.method == "POST":
        cart = request.cart

        #### Verify Products Availability
        if not cart.is_available():
            request.flash['message'] = 'Items not longer available: '
            for item in cart.items_not_availables():
                request.flash['message'] += item.product.title
            cart.remove_not_available_items()
            
            return HttpResponseRedirect(reverse('my_shopping'))
        
        sell = cart.close(payment_method="%s - %s" % ('Manual Payment', payment.name))
    
    return HttpResponse(my_render(request, {'instructions': payment.instructions,
                                         'page_title': 'Manual payment',
                                         'page_description': 'Manual payment' 
                                         }, 'manual_payment'))
def checkout_manual_payment(request):
    from payments.models import ManualPaymentShopSettings

    id = request.POST.get("manual_payment_id", None)
    payment = get_object_or_404(ManualPaymentShopSettings, pk=id)

    if request.method == "POST":
        cart = request.cart

        #### Verify Products Availability
        if not cart.is_available():
            request.flash['message'] = 'Items not longer available: '
            for item in cart.items_not_availables():
                request.flash['message'] += item.product.title
            cart.remove_not_available_items()

            return HttpResponseRedirect(reverse('my_shopping'))

        sell = cart.close(payment_method="%s - %s" %
                          ('Manual Payment', payment.name))

    return HttpResponse(
        my_render(
            request, {
                'instructions': payment.instructions,
                'page_title': 'Manual payment',
                'page_description': 'Manual payment'
            }, 'manual_payment'))
def checkout_shipping(request):
    from sell.forms import ShippingDataForm
    
    if request.method == 'POST':
        shipping_form = ShippingDataForm(data=request.POST)
        if shipping_form.is_valid():
            #profile = request.user.get_profile()
            cart = request.cart
            
            try:
                oldshipping = cart.shippingdata
                cart.shippingdata = None
                cart.save()
                oldshipping.delete()
            except:
                pass
            
            shipping = shipping_form.save(commit=False)
            shipping.save()
            
            cart.shippingdata = shipping
            cart.save()
            
            return HttpResponseRedirect(reverse("myshopping_checkout_confirm"))
    else:
        #initial = {'street_address': '13444 Main Street', 'city': 'Springfield', 'state' : 'Maryland', 'zip': '20104', 'country' : 'USA' }
        shipping_form = ShippingDataForm()
        
    return HttpResponse(my_render(request, {'form_shipping': shipping_form.as_p(),
                                            'page_title': 'Shipping',
                                            'page_description': 'Shipping',
                                            'url_home' : reverse("home"),
                                            }, 'shipping'))
def register(request):
    #TODO: transaction
    form = BidderForm(request, request.POST or None)
    if form.is_valid():
        #Generate user
        user = User.objects.create_user(form.cleaned_data["username"],
                                        form.cleaned_data["email"], 
                                        form.cleaned_data["password1"])
#        user.first_name = form.cleaned_data["first_name"]
#        user.last_name = form.cleaned_data["last_name"]
#        user.is_active = False
        
        
        user.save()
        
#        """ Set cart """
#        cart = Cart(bidder=user)
#        cart.save()
        
        """ Set profile """
        profile = Profile(user=user)
        
#        profile.street_address = form.cleaned_data["street_address"]
#        profile.city = form.cleaned_data["city"]
#        profile.state = form.cleaned_data["state"]
#        profile.zip = form.cleaned_data["zip"]
#        profile.country = form.cleaned_data["country"]
#        profile.phone = form.cleaned_data["phone"]
#        profile.photo = form.cleaned_data["photo"]
#        profile.birth = datetime.date(
#                      int(form.cleaned_data['year']),
#                      int(form.cleaned_data['month']),
#                      int(form.cleaned_data['day']),
#                      )

        profile.save()

        """ Send mail to confirm account """
        email_verify = EmailVerify(user=user, user_activation=True)
        code = email_verify.generate_code()
        email_verify.save()
        
                              
        #send_mail_account_confirmation(user, email_verify.code, request.shop.name_shop(), request.get_host())        

        return HttpResponseRedirect(reverse('confirmemail', args=[code]))
                    
        #return HttpResponseRedirect(reverse('welcome'))
    
    print form.errors
    
    t = loader.get_template('users/blocks/register.html')
    c = RequestContext(request, {'form': form})
    block_register = (t.render(c))
    return HttpResponse(my_render(request, {'register': block_register,
                                         'page_title': 'Register',
                                         'page_description': 'Register' 
                                         }, 'register'))
def welcome(request):
    #def welcome(request, template_name='users/welcome.html'):
#    t = loader.get_template('users/blocks/welcome.html')
#    c = RequestContext(request, {})
#    block_welcome = (t.render(c))
    return HttpResponse(my_render(request, {'name_shop': request.shop.name_shop,
                                            'page_title': 'Welcome',
                                            'page_description': 'Welcome',                                          
                                           }, 'welcome'))
def register(request):
    #TODO: transaction
    form = BidderForm(request, request.POST or None)
    if form.is_valid():
        #Generate user
        user = User.objects.create_user(form.cleaned_data["username"],
                                        form.cleaned_data["email"],
                                        form.cleaned_data["password1"])
        #        user.first_name = form.cleaned_data["first_name"]
        #        user.last_name = form.cleaned_data["last_name"]
        #        user.is_active = False

        user.save()

        #        """ Set cart """
        #        cart = Cart(bidder=user)
        #        cart.save()
        """ Set profile """
        profile = Profile(user=user)

        #        profile.street_address = form.cleaned_data["street_address"]
        #        profile.city = form.cleaned_data["city"]
        #        profile.state = form.cleaned_data["state"]
        #        profile.zip = form.cleaned_data["zip"]
        #        profile.country = form.cleaned_data["country"]
        #        profile.phone = form.cleaned_data["phone"]
        #        profile.photo = form.cleaned_data["photo"]
        #        profile.birth = datetime.date(
        #                      int(form.cleaned_data['year']),
        #                      int(form.cleaned_data['month']),
        #                      int(form.cleaned_data['day']),
        #                      )

        profile.save()
        """ Send mail to confirm account """
        email_verify = EmailVerify(user=user, user_activation=True)
        code = email_verify.generate_code()
        email_verify.save()

        #send_mail_account_confirmation(user, email_verify.code, request.shop.name_shop(), request.get_host())

        return HttpResponseRedirect(reverse('confirmemail', args=[code]))

        #return HttpResponseRedirect(reverse('welcome'))

    print form.errors

    t = loader.get_template('users/blocks/register.html')
    c = RequestContext(request, {'form': form})
    block_register = (t.render(c))
    return HttpResponse(
        my_render(
            request, {
                'register': block_register,
                'page_title': 'Register',
                'page_description': 'Register'
            }, 'register'))
def welcome(request):
    #def welcome(request, template_name='users/welcome.html'):
    #    t = loader.get_template('users/blocks/welcome.html')
    #    c = RequestContext(request, {})
    #    block_welcome = (t.render(c))
    return HttpResponse(
        my_render(
            request, {
                'name_shop': request.shop.name_shop,
                'page_title': 'Welcome',
                'page_description': 'Welcome',
            }, 'welcome'))
def my_shopping(request):
    my_cart = request.cart

    my_orders = Sell.objects.filter(shop=request.shop, bidder=request.user)

    cart_list = []
    for item in my_cart.cartitem_set.all():
        # the product could be removed by the admin
        if item.product == None:
            my_cart.remove(item)
            continue

        if item.product.type() == "Item":
            #url = reverse('bidding_view_item', args=[item.product.id])
            url_remove = reverse('remove_from_cart', args=[item.id])
        else:
            #url = reverse('bidding_view_lot', args=[item.product.id])
            url_remove = ''
        image = item.product.image()
        cart_list.append({
            'url':
            item.product.get_bidding_url(),
            'title':
            item.product.title,
            #'image': item.product.image().image.url_100x100 if item.product.image() else None,
            'price':
            money_format(item.price, request.shop),
            'qty':
            item.qty,
            'sub_total':
            money_format(item.sub_total(), request.shop),
            'can_remove': (item.product.type() == "Item"),
            'url_remove':
            url_remove,
            'image': {
                'original': image.image.url if image else None,
                'small': image.image.url_100x100 if image else None,
                'medium': image.image.url_400x400 if image else None,
            }
        })

    param = {
        'cart_items': cart_list,
        'total_cart': money_format(my_cart.total(), request.shop),
        'total': money_format(my_cart.total(), request.shop),
        'page_title': 'My Shopping',
        'page_description': 'My Shopping',
        'url_checkout': reverse('myshopping_checkout_shipping'),
        'clean_cart_url': reverse('clean_cart'),
    }

    return HttpResponse(my_render(request, param, 'my_shopping'))
def checkout_shipping(request):
    from sell.forms import ShippingDataForm

    cart = request.cart
    if request.method == 'POST':
        shipping_form = ShippingDataForm(data=request.POST)
        if shipping_form.is_valid():
            profile = request.user.profile

            try:
                oldshipping = cart.shippingdata
                cart.shippingdata = None
                cart.save()

                if shipping_form.save_shipping():
                    profile.update_shipping_info(shipping_form)

                oldshipping.delete()
            except:
                pass

            profile.update_user_info(shipping_form)

            shipping = shipping_form.save(commit=False)
            shipping.save()

            cart.shippingdata = shipping
            cart.save()

            return HttpResponseRedirect(reverse("myshopping_checkout_confirm"))
    else:
        initial = {
            'first_name': cart.bidder.first_name,
            'last_name': cart.bidder.last_name,
            'street_address': cart.bidder.profile.street_address,
            'city': cart.bidder.profile.city,
            'state': cart.bidder.profile.state,
            'zip': cart.bidder.profile.zip,
            'country': cart.bidder.profile.country
        }
        shipping_form = ShippingDataForm(initial=initial)

    return HttpResponse(
        my_render(
            request, {
                'form_shipping': shipping_form.as_p(),
                'page_title': 'Shipping',
                'page_description': 'Shipping',
                'url_home': reverse("home"),
            }, 'shipping'))
def checkout_manual_payment(request):
    from payments.models import ManualPaymentShopSettings
    
    
    id = request.POST.get("manual_payment_id", None)
    payment = get_object_or_404(ManualPaymentShopSettings, pk=id)
    
    if request.method == "POST":
        cart = request.cart
        sell = cart.close(payment_method="%s - %s" % ('Manual Payment', payment.name))
    
    return HttpResponse(my_render(request, {'instructions': payment.instructions,
                                         'page_title': 'Manual payment',
                                         'page_description': 'Manual payment' 
                                         }, 'manual_payment'))
def checkout_shipping(request):
    from sell.forms import ShippingDataForm
    
    cart = request.cart    
    if request.method == 'POST':
        shipping_form = ShippingDataForm(data=request.POST)
        if shipping_form.is_valid():
            profile = request.user.profile
            
            try:
                oldshipping = cart.shippingdata
                cart.shippingdata = None
                cart.save()

                if shipping_form.save_shipping():
                    profile.update_shipping_info(shipping_form)

                oldshipping.delete()
            except:
                pass
            
            profile.update_user_info(shipping_form)
            
            shipping = shipping_form.save(commit=False)
            shipping.save()
            
            cart.shippingdata = shipping
            cart.save()
            
            return HttpResponseRedirect(reverse("myshopping_checkout_confirm"))
    else:
        initial = {'first_name': cart.bidder.first_name,
                   'last_name': cart.bidder.last_name,
                   'street_address': cart.bidder.profile.street_address,
                   'city': cart.bidder.profile.city,
                   'state' : cart.bidder.profile.state,
                   'zip': cart.bidder.profile.zip,
                   'country' : cart.bidder.profile.country }
        shipping_form = ShippingDataForm(initial=initial)
        
    return HttpResponse(my_render(request, {'form_shipping': shipping_form.as_p(),
                                            'page_title': 'Shipping',
                                            'page_description': 'Shipping',
                                            'url_home' : reverse("home"),
                                            }, 'shipping'))
def my_shopping(request):
    my_cart = request.cart
    
    my_orders = Sell.objects.filter(shop=request.shop, bidder=request.user)
     
    cart_list = []
    for item in my_cart.cartitem_set.all():
        # the product could be removed by the admin
        if item.product == None:
            my_cart.remove(item)
            continue
        
        if item.product.type() == "Item":
            #url = reverse('bidding_view_item', args=[item.product.id])
            url_remove = reverse('remove_from_cart', args=[item.id])
        else: 
            #url = reverse('bidding_view_lot', args=[item.product.id])
            url_remove = ''
        image = item.product.image()
        cart_list.append({'url': item.product.get_bidding_url(),
                          'title': item.product.title,
                          #'image': item.product.image().image.url_100x100 if item.product.image() else None,
                          'price': money_format(item.price, request.shop),
                          'qty': item.qty,
                          'sub_total': money_format(item.sub_total(), request.shop),
                          'can_remove': (item.product.type() == "Item"),
                          'url_remove': url_remove, 
                          'image': {'original': image.image.url if image else None,
                                    'small': image.image.url_100x100 if image else None,
                                    'medium': image.image.url_400x400 if image else None,
                                   } 
                         })

    param = {
             'cart_items': cart_list,
             'total_cart': money_format(my_cart.total(), request.shop),
             'total': money_format(my_cart.total(), request.shop),
             'page_title': 'My Shopping',
             'page_description': 'My Shopping',
             'url_checkout': reverse('myshopping_checkout_shipping'),
             'clean_cart_url': reverse('clean_cart'),
             }
    
    return HttpResponse(my_render(request, param, 'my_shopping'))
Beispiel #13
0
def login(request,
          template_name='registration/login.html',
          redirect_field_name=REDIRECT_FIELD_NAME):
    "Displays the login form and handles the login action."
    redirect_to = request.REQUEST.get(redirect_field_name, '')
    if request.method == "POST":
        form = AuthenticationForm(request=request, data=request.POST)
        if form.is_valid():
            # Light security check -- make sure redirect_to isn't garbage.
            if not redirect_to or '//' in redirect_to or ' ' in redirect_to:
                redirect_to = settings.LOGIN_REDIRECT_URL
            #from django.contrib.auth import login
            from auth import login
            login(request, form.get_user())
            if request.session.test_cookie_worked():
                request.session.delete_test_cookie()
            return HttpResponseRedirect(redirect_to)
    else:
        form = AuthenticationForm(request)
    request.session.set_test_cookie()
    if Site._meta.installed:
        current_site = Site.objects.get_current()
    else:
        current_site = RequestSite(request)

    from django.template import loader
    from bidding.views import my_render

    t = loader.get_template(template_name)
    c = RequestContext(
        request, {
            'form': form,
            redirect_field_name: redirect_to,
            'site': current_site,
            'site_name': current_site.name,
        })
    block_login = (t.render(c))
    return HttpResponse(
        my_render(
            request, {
                'form_login': block_login,
                'page_title': 'Login',
                'page_description': 'Login'
            }, 'login'))
def login(request, template_name='registration/login.html', redirect_field_name=REDIRECT_FIELD_NAME):
    "Displays the login form and handles the login action."
    redirect_to = request.REQUEST.get(redirect_field_name, '')
    if request.method == "POST":
        form = AuthenticationForm(request=request, data=request.POST)
        if form.is_valid():
            # Light security check -- make sure redirect_to isn't garbage.
            if not redirect_to or '//' in redirect_to or ' ' in redirect_to:
                redirect_to = settings.LOGIN_REDIRECT_URL
            #from django.contrib.auth import login
            from auth import login
            login(request, form.get_user())
            if request.session.test_cookie_worked():
                request.session.delete_test_cookie()
            return HttpResponseRedirect(redirect_to)
    else:
        form = AuthenticationForm(request)
    request.session.set_test_cookie()
    if Site._meta.installed:
        current_site = Site.objects.get_current()
    else:
        current_site = RequestSite(request)
    
    from django.template import loader    
    from bidding.views import my_render
     
    t = loader.get_template(template_name)
    c = RequestContext(request, {
                                'form': form, redirect_field_name: redirect_to,
                                'site': current_site,
                                'site_name': current_site.name,
                                 })
    block_login = (t.render(c))
    return HttpResponse(my_render(request, {'form_login': block_login,
                                            'page_title': 'Login',
                                            'page_description': 'Login' 
                                           }, 'login'))        
def success(request):    
    from payments.gateways.paypal import PayPalGateway
    from payments.models import PayPalShopSettings, PayPalToken, PayPalTransaction
    from preferences.models import Preference
    from sell.templatetags.sell_tags import money_format

    cart = request.cart
    
    #### Verify Products Availability
    if not cart.is_available():
        request.flash['message'] = 'Items not longer available: '
        for item in cart.items_not_availables():
            request.flash['message'] += item.product.title
        cart.remove_not_available_items()
        
        return HttpResponseRedirect(reverse('my_shopping'))
    
    if request.method == 'GET':
        payerid = request.GET.get('PayerID', None)
        token = request.GET.get('token', None)
    else:
        payerid = request.POST.get('PayerID', None)
        token = request.POST.get('token', None)
    
    if None in (token, payerid):
        request.flash['message'] = unicode(_("Payment failed, try other method."))
        request.flash['severity'] = "error"
        return HttpResponseRedirect(reverse('my_shopping'))
    
    shop = request.shop   
    paypal_settings = PayPalShopSettings.objects.filter(shop = shop).get()
    
    try:
        paypaltoken = PayPalToken.objects.filter(token=token).get()
    except PayPalToken.DoesNotExist:
        request.flash['message'] = unicode(_("Payment failed, try other method."))
        request.flash['severity'] = "error"
        return HttpResponseRedirect(reverse('my_shopping'))

    if paypaltoken.confirmed == True:
        request.flash['message'] = unicode(_("Payment is already confirmed!"))
        request.flash['severity'] = "notice"
        return HttpResponseRedirect(reverse('my_shopping'))

    cart = paypaltoken.cart
    #currency = Preference.get_preference(shop).checkout_currency
    total_amount = "%0.2f" % cart.total_with_taxes()
    
    
    if request.method != 'POST':
        
        t = loader.get_template('payments/payment_paypal_confirm.html')
        c = RequestContext(request, {
                                     'payerid': payerid,
                                     'token': token,
                                     #'api_signature': settings.PAYPAL_SIGNATURE,                                                                   
                                     #'api_user': settings.PAYPAL_USERNAME,
                                     #'api_password': settings.PAYPAL_PASSWORD
                                    })
        block = (t.render(c))
        
        param = {'total_amount': money_format(total_amount, shop),
                 'paypaltoken': paypaltoken,
                 'cart': cart,
                 'cancel_url': reverse('payments_cancel'),
                 'form_paypal_confirm': block,
                }
        
        return HttpResponse(my_render(request, param, 'payment_paypal_confirm'))        
    
    
    action = request.POST.get('action', 'cancel').lower()
    
    if action == 'confirm':
        
        paypal_gw = PayPalGateway(username=settings.PAYPAL_USERNAME,
                                  password=settings.PAYPAL_PASSWORD,
                                  sign=settings.PAYPAL_SIGNATURE,
                                  debug=settings.PAYPAL_DEBUG)
       
        #return_url = request.build_absolute_uri(reverse("paypal_success"))
        #cancel_url = request.build_absolute_uri(reverse("paypal_cancel"))
        is_token_data = paypal_gw.GetExpressCheckoutDetails(paypaltoken.token, subject=paypal_settings.email)
        
        if not is_token_data:
            logging.critical("Error found when trying to do a GetExpressCheckoutDetails api call on Paypal. RESPONSE: %s" % paypal_gw.api_response)
            request.flash['message'] = unicode(_("Could not get transaction data from PayPal. Please contact admin to complete your purchase!"))
            request.flash['severity'] = "error"
            return HttpResponseRedirect(reverse('my_shopping'))
        
        
        ack = paypal_gw.api_response['ACK'][0]            
        
        if ack != "Success":
            logging.critical("Paypal Api Response Failure. RESPONSE: %s" % paypal_gw.api_response)
            request.flash['message'] = unicode(_("There was an error when trying to get data from PayPal. Please contact admin to complete your purchase!"))
            request.flash['severity'] = "error"
            return HttpResponseRedirect(reverse('my_shopping'))
        
        try:
            amount = decimal.Decimal(paypal_gw.api_response['PAYMENTREQUEST_0_AMT'][0])
        except KeyError:
            logging.critical("Fail when trying to read the payment amount. The API response don't have an AMT key. RESPONSE: %s" % paypal_gw.api_response)    
            request.flash['message'] = unicode(_("We have found an error when trying to validate your purchase!"))
            request.flash['severity'] = "error"
            return HttpResponseRedirect(reverse('my_shopping'))
        
        if amount != cart.total_with_taxes():
            request.flash['message'] = unicode(_("You have authorized us to charge you just $%s, but you want buy $%s! Please contact admin if you think this is a mistake!" % (amount, cart.total_with_taxes())))
            request.flash['severity'] = "error"
            return HttpResponseRedirect(reverse('my_shopping'))
        
    
        payment_request = {
            'PAYMENTREQUEST_0_PAYMENTACTION': 'Sale',
            'PAYMENTREQUEST_0_AMT': "%0.2f" % cart.total_with_taxes(), 
            #'PAYMENTREQUEST_0_TAXAMT': "%0.2f" % cart.taxes(),
            #'PAYMENTREQUEST_n_SHIPPINGAMT': "%0.2f" % cart.shipping_charge(),
            #'PAYMENTREQUEST_0_ITEMAMT': "%0.2f" % cart.total(),
            'PAYMENTREQUEST_0_CURRENCYCODE': Preference.get_preference(shop).checkout_currency,
            'PAYMENTREQUEST_0_NOTIFYURL': request.build_absolute_uri(reverse("payments_paypal_ipn")),
            'SUBJECT': paypal_settings.email
        }
        success = paypal_gw.DoExpressCheckoutPayment(payment_request, paypaltoken.token, payerid)
        
        
        if success:
            #Close and clean the cart
            sell = cart.close("PayPal")
            #Set the sell payments as paid
            sell.payment.pay()
            paypaltoken.confirmed = True
            paypaltoken.save()
            
            # {'PAYMENTINFO_0_TRANSACTIONTYPE': 'expresscheckout', 'ACK': 'Success', 'PAYMENTINFO_0_PAYMENTTYPE': 'instant', 'PAYMENTINFO_0_REASONCODE': 'None', 'SHIPPINGOPTIONISDEFAULT': 'false', 'INSURANCEOPTIONSELECTED': 'false', 'CORRELATIONID': '8d20dfd3e3575', 'PAYMENTINFO_0_TAXAMT': '0.00', 'PAYMENTINFO_0_TRANSACTIONID': '6MH53467HE876651A', 'PAYMENTINFO_0_PENDINGREASON': 'None', 'PAYMENTINFO_0_AMT': '57.00', 'PAYMENTINFO_0_PROTECTIONELIGIBILITY': 'Ineligible', 'PAYMENTINFO_0_ERRORCODE': '0', 'TOKEN': 'EC-7MR99474WD5992801', 'VERSION': '63.0', 'SUCCESSPAGEREDIRECTREQUESTED': 'false', 'BUILD': '1482946', 'PAYMENTINFO_0_CURRENCYCODE': 'USD', 'PAYMENTINFO_0_FEEAMT': '1.95', 'TIMESTAMP': '2010-09-08T18:03:24Z', 'PAYMENTINFO_0_ACK': 'Success', 'PAYMENTINFO_0_ORDERTIME': '2010-09-08T18:03:23Z', 'PAYMENTINFO_0_PAYMENTSTATUS': 'Completed'}
            txn_id = paypal_gw.api_response['PAYMENTINFO_0_TRANSACTIONID']
            
            transaction = PayPalTransaction()
            transaction.transaction_id = txn_id
            transaction.sell = sell
            transaction.save()
            
            return HttpResponseRedirect(reverse('payments_success'))
        else:
            request.flash['message'] = unicode(_("Payment Failed!"))
            request.flash['severity'] = "error"
            return HttpResponseRedirect(reverse('my_shopping'))
    else:
        paypaltoken.delete()
        request.flash['message'] = unicode(_("Payment cancel!"))
        request.flash['severity'] = "notice"
        return HttpResponseRedirect(reverse('my_shopping'))
def my_orders(request):
    my_orders = Sell.objects.filter(shop=request.shop, bidder=request.user)

    inner_q = BidHistory.objects.filter(
        bidder=request.user,
        lot__state='A').values_list('lot').distinct().query
    lots_in_auctions = Lot.objects.filter(pk__in=inner_q)

    bids_list = []
    for lot in lots_in_auctions:
        history = []
        for bid in lot.history():
            history.append({
                'bidder_username':
                bid.bidder.username,
                'bid_amount':
                money_format(bid.bid_amount, request.shop),
                'bid_time':
                date(bid.bid_time, 'r'),
            })
        image = lot.image()
        bids_list.append({
            'url': reverse('bidding_view_lot', args=[lot.id]),
            #'image': lot.image().image.url_100x100 if lot.image() else None,
            'title': lot.title,
            'is_active': lot.is_active(),
            'count_bids': lot.count_bids(),
            'current_bid': lot.current_bid(),
            'time_left': lot.time_left(),
            'history': history,
            'image': {
                'original': image.image.url if image else None,
                'small': image.image.url_100x100 if image else None,
                'medium': image.image.url_400x400 if image else None,
            }
        })

    my_orders_list = []
    for sell in my_orders:
        items = []
        for item in sell.sellitem_set.all():
            image = item.product.image()
            items.append({
                #'image': item.product.image().image.url_100x100 if item.product.image() else None,
                'url': item.product.get_bidding_url(),
                'title': item.product.title,
                'price': money_format(item.price, request.shop),
                'image': {
                    'original': image.image.url if image else None,
                    'small': image.image.url_100x100 if image else None,
                    'medium': image.image.url_400x400 if image else None,
                }
            })
        payment_history = []
        for payment in sell.payment.paymenthistory_set.all():
            payment_history.append({
                'date_time': date(payment.date_time, 'r'),
                'state': payment.get_state_display(),
            })

        shipping_history = []
        for shipping in sell.shipping.shippinghistory_set.all():
            shipping_history.append({
                'date_time': date(shipping.date_time, 'r'),
                'state': shipping.get_state_display(),
            })

        my_orders_list.append({
            'id': sell.id,
            'date_time': date(sell.date_time, 'r'),
            'total': money_format(sell.total, request.shop),
            'payment_history': payment_history,
            'shipping_history': shipping_history,
            'item_set': items,
        })

    param = {
        'bids': bids_list,
        'my_orders': my_orders_list,
        'page_title': 'My Orders',
        'page_description': 'My Orders',
    }

    return HttpResponse(my_render(request, param, 'my_orders'))
def success(request):    
    from payments.gateways.paypal import PayPalGateway
    from payments.models import PayPalShopSettings, PayPalToken, PayPalTransaction
    from preferences.models import Preference
    from sell.templatetags.sell_tags import money_format

    
    if request.method == 'GET':
        payerid = request.GET.get('PayerID', None)
        token = request.GET.get('token', None)
    else:
        payerid = request.POST.get('PayerID', None)
        token = request.POST.get('token', None)
    
    if None in (token, payerid):
        request.flash['message'] = unicode(_("Payment failed, try other method."))
        request.flash['severity'] = "error"
        return HttpResponseRedirect(reverse('my_shopping'))
    
    shop = request.shop   
    paypal_settings = PayPalShopSettings.objects.filter(shop = shop).get()
    profile = request.user.get_profile()
    
    
    try:
        paypaltoken = PayPalToken.objects.filter(token=token).get()
    except PayPalToken.DoesNotExist:
        request.flash['message'] = unicode(_("Payment failed, try other method."))
        request.flash['severity'] = "error"
        return HttpResponseRedirect(reverse('my_shopping'))

    if paypaltoken.confirmed == True:
        request.flash['message'] = unicode(_("Payment is already confirmed!"))
        request.flash['severity'] = "notice"
        return HttpResponseRedirect(reverse('my_shopping'))

    cart = paypaltoken.cart
    #currency = Preference.get_preference(shop).checkout_currency
    total_amount = "%0.2f" % cart.total_with_taxes()
    
    
    if request.method != 'POST':
        
        t = loader.get_template('payments/payment_paypal_confirm.html')
        c = RequestContext(request, {
                                     'payerid': payerid,
                                     'token': token,
                                    })
        block = (t.render(c))
        
        param = {'total_amount': money_format(total_amount, shop),
                 'paypaltoken': paypaltoken,
                 'cart': cart,
                 'cancel_url': reverse('payments_cancel'),
                 'form_paypal_confirm': block,
                }
        
        return HttpResponse(my_render(request, param, 'payment_paypal_confirm'))        
    
    
    action = request.POST.get('action', 'cancel').lower()
    
    if action == 'confirm':
        
        paypal_gw = PayPalGateway(username=settings.PAYPAL_USERNAME,
                                  password=settings.PAYPAL_PASSWORD,
                                  sign=settings.PAYPAL_SIGNATURE,
                                  debug=settings.PAYPAL_DEBUG)
       
        token_data = paypal_gw.GetExpressCheckoutDetails("http://www.google.com", "http://www.google.com", paypaltoken.token)
        ack = paypal_gw.api_response['ACK'][0]
        
        try:
            amount = decimal.Decimal(paypal_gw.api_response['AMT'][0])
        except KeyError:
            logging.critical("Fail when trying to read the payment amount. The API response don't have an AMT key. RESPONSE: %s" % paypal_gw.api_response)    
            request.flash['message'] = unicode(_("We have found an error when trying to validate your purchase!"))
            request.flash['severity'] = "error"
            return HttpResponseRedirect(reverse('my_shopping'))
        
        if ack != "Success":
            request.flash['message'] = unicode(_("Fail when trying to validate your PayPal Token. Please contact admin to complete your purchase!"))
            request.flash['severity'] = "error"
            return HttpResponseRedirect(reverse('my_shopping'))
        
        if amount != cart.total_with_taxes():
            request.flash['message'] = unicode(_("You have authorized us to charge you just $%s, but you want buy $%s! Please contact admin if you think this is a mistake!" % (amount, cart.total_with_taxes())))
            request.flash['severity'] = "error"
            return HttpResponseRedirect(reverse('my_shopping'))
    
        payment_request = {
            'PAYMENTREQUEST_0_PAYMENTACTION': 'Sale',
            'PAYMENTREQUEST_0_AMT': "%0.2f" % cart.total_with_taxes(), 
            #'PAYMENTREQUEST_0_TAXAMT': "%0.2f" % cart.taxes(),
            #'PAYMENTREQUEST_n_SHIPPINGAMT': "%0.2f" % cart.shipping_charge(),
            #'PAYMENTREQUEST_0_ITEMAMT': "%0.2f" % cart.total(),
            'PAYMENTREQUEST_0_CURRENCYCODE': Preference.get_preference(shop).checkout_currency,
            'PAYMENTREQUEST_0_NOTIFYURL': request.build_absolute_uri(reverse("payments_paypal_ipn")),
            'SUBJECT': paypal_settings.email
        }
        success = paypal_gw.DoExpressCheckoutPayment(payment_request, paypaltoken.token, payerid)
        
        
        if success:
            #Close and clean the cart
            sell = cart.close("PayPal")
            #Set the sell payments as paid
            sell.payment.pay()
            paypaltoken.confirmed = True
            paypaltoken.save()
            
            # {'PAYMENTINFO_0_TRANSACTIONTYPE': 'expresscheckout', 'ACK': 'Success', 'PAYMENTINFO_0_PAYMENTTYPE': 'instant', 'PAYMENTINFO_0_REASONCODE': 'None', 'SHIPPINGOPTIONISDEFAULT': 'false', 'INSURANCEOPTIONSELECTED': 'false', 'CORRELATIONID': '8d20dfd3e3575', 'PAYMENTINFO_0_TAXAMT': '0.00', 'PAYMENTINFO_0_TRANSACTIONID': '6MH53467HE876651A', 'PAYMENTINFO_0_PENDINGREASON': 'None', 'PAYMENTINFO_0_AMT': '57.00', 'PAYMENTINFO_0_PROTECTIONELIGIBILITY': 'Ineligible', 'PAYMENTINFO_0_ERRORCODE': '0', 'TOKEN': 'EC-7MR99474WD5992801', 'VERSION': '63.0', 'SUCCESSPAGEREDIRECTREQUESTED': 'false', 'BUILD': '1482946', 'PAYMENTINFO_0_CURRENCYCODE': 'USD', 'PAYMENTINFO_0_FEEAMT': '1.95', 'TIMESTAMP': '2010-09-08T18:03:24Z', 'PAYMENTINFO_0_ACK': 'Success', 'PAYMENTINFO_0_ORDERTIME': '2010-09-08T18:03:23Z', 'PAYMENTINFO_0_PAYMENTSTATUS': 'Completed'}
            txn_id = paypal_gw.api_response['PAYMENTINFO_0_TRANSACTIONID']
            
            transaction = PayPalTransaction()
            transaction.transaction_id = txn_id
            transaction.sell = sell
            transaction.save()
            
            return HttpResponseRedirect(reverse('payments_success'))
        else:
            request.flash['message'] = unicode(_("Payment Failed!"))
            request.flash['severity'] = "error"
            return HttpResponseRedirect(reverse('my_shopping'))
    else:
        paypaltoken.delete()
        request.flash['message'] = unicode(_("Payment cancel!"))
        request.flash['severity'] = "notice"
        return HttpResponseRedirect(reverse('my_shopping'))
def success(request):
    return HttpResponse(my_render(request, {}, 'payment_success'))
def my_orders(request):
    my_orders = Sell.objects.filter(shop=request.shop, bidder=request.user)

    inner_q = BidHistory.objects.filter(bidder=request.user, lot__state='A').values_list('lot').distinct().query
    lots_in_auctions = Lot.objects.filter(pk__in=inner_q)
    
    bids_list = []
    for lot in lots_in_auctions:
        history = []    
        for bid in lot.history():
            history.append({'bidder_username': bid.bidder.username,
                            'bid_amount': money_format(bid.bid_amount, request.shop),
                            'bid_time': date(bid.bid_time, 'r'),
                            })      
        image = lot.image()   
        bids_list.append({'url': reverse('bidding_view_lot', args=[lot.id]),
                          #'image': lot.image().image.url_100x100 if lot.image() else None,
                          'title': lot.title,
                          'is_active': lot.is_active(),
                          'count_bids': lot.count_bids(),
                          'current_bid': lot.current_bid(),
                          'time_left': lot.time_left(),
                          'history': history,
                          'image': {
                                    'original': image.image.url if image else None,
                                    'small': image.image.url_100x100 if image else None,
                                    'medium': image.image.url_400x400 if image else None,
                                   }
                          })

    my_orders_list = []
    for sell in my_orders:
        items = []
        for item in sell.sellitem_set.all():
            image = item.product.image()
            items.append({
                          #'image': item.product.image().image.url_100x100 if item.product.image() else None,
                          'url': item.product.get_bidding_url(),
                          'title': item.product.title,
                          'price': money_format(item.price, request.shop),
                          'image': {
                                    'original': image.image.url if image else None,
                                    'small': image.image.url_100x100 if image else None,
                                    'medium': image.image.url_400x400 if image else None,
                                   }
                          })
        payment_history = []    
        for payment in sell.payment.paymenthistory_set.all():
            payment_history.append({
                                    'date_time': date(payment.date_time, 'r'),
                                    'state': payment.get_state_display(),
                                    })

        shipping_history = []    
        for shipping in sell.shipping.shippinghistory_set.all():
            shipping_history.append({
                                    'date_time': date(shipping.date_time, 'r'),
                                    'state': shipping.get_state_display(),
                                    })
            
        my_orders_list.append({'id': sell.id,
                               'date_time': date(sell.date_time, 'r'),
                               'total': money_format(sell.total, request.shop),
                               'payment_history': payment_history,
                               'shipping_history': shipping_history,
                               'item_set': items,
                              })
        
    param = {
             'bids': bids_list,
             'my_orders': my_orders_list,
             'page_title': 'My Orders',
             'page_description': 'My Orders',
             }
    
    return HttpResponse(my_render(request, param, 'my_orders'))        
def cancel(request):
    return HttpResponse(my_render(request, {}, 'payment_cancel'))
                     'zip': cart.shippingdata.zip,
                     'country': cart.shippingdata.country.upper(),
                     })
    
    cart_dic = {'cart_items': items,
                'shippingdata': shippingdata,
                'total': money_format(cart.total(), shop),
                'taxes': money_format(cart.taxes(), shop),
                'shipping_charge': money_format(cart.shipping_charge(), shop),
                'total_with_taxes': money_format(cart.total_with_taxes(), shop),
                }
    
    return HttpResponse(my_render(request, {'cart': cart_dic,
                                            'payment_buttons': payment_buttons,
                                            'page_title': 'Confirm',
                                            'page_description': 'Confirm',
                                            'admin_email': shop.admin.email,                                          
                                           },
                                  'confirm'))


@shop_required    
def remove_from_cart(request, id):
    
    cartitem = get_object_or_404(CartItem, pk=id)
            
    cart = request.cart
    #cart.remove(cartitem)
    cart.remove_one(cartitem)
    
    request.flash['message'] = unicode(_("Product removed from your cart"))
    })

    cart_dic = {
        'cart_items': items,
        'shippingdata': shippingdata,
        'total': money_format(cart.total(), shop),
        'taxes': money_format(cart.taxes(), shop),
        'shipping_charge': money_format(cart.shipping_charge(), shop),
        'total_with_taxes': money_format(cart.total_with_taxes(), shop),
    }

    return HttpResponse(
        my_render(
            request, {
                'cart': cart_dic,
                'payment_buttons': payment_buttons,
                'page_title': 'Confirm',
                'page_description': 'Confirm',
                'admin_email': shop.admin.email,
            }, 'confirm'))


@shop_required
def remove_from_cart(request, id):

    cartitem = get_object_or_404(CartItem, pk=id)

    cart = request.cart
    #cart.remove(cartitem)
    cart.remove_one(cartitem)

    request.flash['message'] = unicode(_("Product removed from your cart"))