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 bidding_view_history_lot(request, id): #TODO: filter by state lot #TODO: add csrf_token to form lot = get_object_or_404(Lot, pk=id) form = BidForm(lot, request.GET or None) if form.is_valid(): if (not request.user.is_authenticated() ) or request.user.is_staff or request.user.is_superuser: return HttpResponseRedirect(settings.LOGIN_URL + "?next=" + request.get_full_path()) if not (lot.is_active() and lot.shop == request.shop): raise Http404 lot.bid(request.user, form.cleaned_data['amount'], request.META['REMOTE_ADDR']) request.flash['message'] = unicode(_("Bid successfully registered.")) request.flash['severity'] = "success" return HttpResponseRedirect( reverse('bidding_view_history_lot', args=[id])) 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'), }) t = loader.get_template('bidding/blocks/view_history_lot_description.html') c = RequestContext(request, {'lot': lot, 'form': form}) block_description = (t.render(c)) image = lot.image() lot_dic = { 'count_bidders': lot.count_bidders(), 'count_bids': lot.count_bids(), 'time_left_long': lot.time_left_long(), 'title': lot.title, 'dir_back': reverse('bidding_view_lot', args=[lot.id]), '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, } } return HttpResponse( my_render( request, { 'history': history, 'description': block_description, 'page_title': lot.title, 'page_description': '%s, %s' % (lot.title, striptags(lot.description)), 'lot': lot_dic, }, 'view_history_lot'))
def bidding_auctions(request, session_id=None): if session_id: session = get_object_or_404(AuctionSession, pk=session_id) lots = Lot.objects.filter(shop=request.shop, session=session, state='A') session_title = session.title else: session_title = 'Highlights' lots = Lot.objects.filter(shop=request.shop, state='A') pager = Paginator(lots, PAGE_LOTS) try: page = int(request.GET.get('page','1')) except: page = 1 try: lots = pager.page(page) except (EmptyPage, InvalidPage): lots = pager.page(pager.num_pages) paged = (pager.num_pages > 1) lots_list = [] for lot in lots.object_list: image = lot.image() lots_list.append({'url': reverse('bidding_view_lot', args=[lot.id]), 'title': lot.title, 'price': money_format(lot.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, } }) sessions = AuctionSession.objects.filter(shop=request.shop, end__gte=datetime.now()) t = loader.get_template('bidding/blocks/sessions.html') c = RequestContext(request, {'sessions': sessions}) block_sessions = (t.render(c)) t = loader.get_template('paginator.html') c = RequestContext(request, {'objects': lots, 'pages': pager.page_range, 'paged': paged,}) paginator = (t.render(c)) try: page = DynamicPageContent.objects.filter(shop=request.shop, page="auctions").get() description = striptags(page.meta_content) except DynamicPageContent.DoesNotExist: description = "No meta description found" param = { 'lots': lots_list, 'sessions': block_sessions, 'session_title': session_title, 'paginator': paginator, 'page_title': 'Auctions', 'page_description': description, } return HttpResponse(my_render(request, param, 'auctions'))
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 bidding_for_sale(request): items_list = Item.objects.filter(shop=request.shop, qty__gte=0, show=True) shop_categories = request.shop.categories_list() shop_subcategories = request.shop.sub_categories_list() pager = Paginator(items_list, PAGE_LOTS) try: page = int(request.GET.get('page', '1')) except: page = 1 try: items = pager.page(page) except (EmptyPage, InvalidPage): items = pager.page(pager.num_pages) paged = (pager.num_pages > 1) items_list = [] for item in items.object_list: image = item.image() items_list.append({ 'url': reverse('bidding_view_item', args=[item.id]), 'title': item.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, } }) t = loader.get_template('paginator.html') c = RequestContext(request, { 'objects': items, 'pages': pager.page_range, 'paged': paged, }) paginator = (t.render(c)) try: page = DynamicPageContent.objects.filter(shop=request.shop, page="for_sale").get() description = striptags(page.meta_content) except DynamicPageContent.DoesNotExist: description = "No meta description found" param = { 'items': items_list, 'shop_categories': shop_categories, 'shop_subcategories': shop_subcategories, 'paginator': paginator, 'page_title': 'For Sale', 'page_description': description, } return HttpResponse(my_render(request, param, 'for_sale'))
def bidding_for_sale(request): items_list = Item.objects.filter(shop=request.shop, qty__gte=0, show=True) shop_categories = request.shop.categories_list() shop_subcategories = request.shop.sub_categories_list() pager = Paginator(items_list, PAGE_LOTS) try: page = int(request.GET.get('page','1')) except: page = 1 try: items = pager.page(page) except (EmptyPage, InvalidPage): items = pager.page(pager.num_pages) paged = (pager.num_pages > 1) items_list = [] for item in items.object_list: image = item.image() items_list.append({'url': reverse('bidding_view_item', args=[item.id]), 'title': item.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, } }) t = loader.get_template('paginator.html') c = RequestContext(request, {'objects': items, 'pages': pager.page_range, 'paged': paged,}) paginator = (t.render(c)) try: page = DynamicPageContent.objects.filter(shop=request.shop, page="for_sale").get() description = striptags(page.meta_content) except DynamicPageContent.DoesNotExist: description = "No meta description found" param = { 'items': items_list, 'shop_categories': shop_categories, 'shop_subcategories': shop_subcategories, 'paginator': paginator, 'page_title': 'For Sale', 'page_description': description, } return HttpResponse(my_render(request, param, 'for_sale'))
def bidding_view_history_lot(request, id): #TODO: filter by state lot #TODO: add csrf_token to form lot = get_object_or_404(Lot, pk=id) form = BidForm(lot, request.GET or None) if form.is_valid(): if (not request.user.is_authenticated()) or request.user.is_staff or request.user.is_superuser: return HttpResponseRedirect(settings.LOGIN_URL+"?next="+request.get_full_path()) if not (lot.is_active() and lot.shop == request.shop): raise Http404 lot.bid(request.user, form.cleaned_data['amount'], request.META['REMOTE_ADDR']) request.flash['message'] = unicode(_("Bid successfully registered.")) request.flash['severity'] = "success" return HttpResponseRedirect(reverse('bidding_view_history_lot', args=[id])) 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'), }) t = loader.get_template('bidding/blocks/view_history_lot_description.html') c = RequestContext(request, {'lot': lot, 'form': form}) block_description = (t.render(c)) image = lot.image() lot_dic = {'count_bidders': lot.count_bidders(), 'count_bids': lot.count_bids(), 'time_left_long': lot.time_left_long(), 'title': lot.title, 'dir_back': reverse('bidding_view_lot', args=[lot.id]), '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, } } return HttpResponse(my_render(request, { 'history': history, 'description': block_description, 'page_title': lot.title, 'page_description': '%s, %s' % (lot.title, striptags(lot.description)), 'lot': lot_dic, }, 'view_history_lot'))
payment_buttons.append(button) except Exception, e: logging.error(e) # t = loader.get_template('my_shopping/blocks/confirm.html') # c = RequestContext(request, {'cart' : cart, # 'payment_buttons': payment_buttons,}) # block_confirm = (t.render(c)) items = [] for item in cart.cartitem_set.all(): image = item.product.image() items.append({ #'image': item.product.image().image.url_100x100 if item.product.image() else None, 'title': item.product.title, 'price': money_format(item.price, shop), 'qty': item.qty, 'sub_total': money_format(item.sub_total(), 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, }, 'id': item.id, }) shippingdata = ({ 'first_name': cart.shippingdata.first_name.title(), 'last_name': cart.shippingdata.last_name.title(), 'street_address': cart.shippingdata.street_address.title(), 'city': cart.shippingdata.city.title(),
def my_render(request, param, name_page=None): """ news_items """ items = Item.objects.filter(shop=request.shop).order_by('-id')[:10] new_items = [] for i in items: image = i.image() plain_item = { 'title': i.title, 'description': i.description, 'price': money_format(i.price, request.shop), 'url': reverse('bidding_view_item', args=[i.id]), 'image': { 'original': image.image.url if image else "", 'small': image.image.url_100x100 if image else "", 'medium': image.image.url_400x400 if image else "", } } new_items.append(plain_item) """ Sessions """ sessions = AuctionSession.objects.filter(shop=request.shop, end__gte=datetime.now()) sessions_list = [] sessions_list.append({ 'title': 'Highlights', 'url': reverse('bidding_auctions') }) for session in sessions: sessions_list.append({ 'title': session.title, 'url': reverse('bidding_auctions_id', args=[session.id]), }) """ Menu """ t = loader.get_template('bidding/blocks/menu_menu.html') c = RequestContext(request, {'shop': request.shop}) menu = (t.render(c)) """ Policies """ policies = ShopPolicies.objects.filter(shop=request.shop) t = loader.get_template('bidding/blocks/policy.html') c = RequestContext(request, {'shop': request.shop}) policies = (t.render(c)) """ Header """ t = loader.get_template('bidding/blocks/header.html') c = RequestContext(request, {'shop': request.shop}) header = (t.render(c)) """ Footer """ t = loader.get_template('bidding/blocks/footer.html') c = RequestContext(request, {'shop': request.shop}) footer = (t.render(c)) about = request.shop.about.body links = [] menus = request.shop.menu_set.all() if menus.count() > 0: for link in menus[0].links(): if link.to == "/auctions/" and not request.shop.auctions_feature_enabled( ): continue links.append({ 'to': link.to, 'name': link.name, }) """ Flash """ t = loader.get_template('bidding/blocks/flash.html') c = RequestContext(request, {}) flash = (t.render(c)) """ Posts """ last = request.shop.last_post() if last: last_post = { 'url': reverse('bidding_view_post', args=[last.id]), 'title': last.title, 'body': last.body, 'date_time': date(last.date_time, 'F j, Y'), } else: last_post = {} env = Environment(loader=ThemeLoader(request.shop, request.is_secure())) env.filters['asset_url'] = env.loader.asset_url if name_page: try: template = env.get_template(name_page) content = template.render(param) except Exception, e: return HttpResponse("Error in template %s. %s" % (name_page, e))
def bidding_auctions(request, session_id=None): if session_id: session = get_object_or_404(AuctionSession, pk=session_id) lots = Lot.objects.filter(shop=request.shop, session=session, state='A') session_title = session.title else: session_title = 'Highlights' lots = Lot.objects.filter(shop=request.shop, state='A') pager = Paginator(lots, PAGE_LOTS) try: page = int(request.GET.get('page', '1')) except: page = 1 try: lots = pager.page(page) except (EmptyPage, InvalidPage): lots = pager.page(pager.num_pages) paged = (pager.num_pages > 1) lots_list = [] for lot in lots.object_list: image = lot.image() lots_list.append({ 'url': reverse('bidding_view_lot', args=[lot.id]), 'title': lot.title, 'price': money_format(lot.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, } }) sessions = AuctionSession.objects.filter(shop=request.shop, end__gte=datetime.now()) shop_categories = request.shop.categories_list() shop_subcategories = request.shop.sub_categories_list() t = loader.get_template('bidding/blocks/sessions.html') c = RequestContext(request, {'sessions': sessions}) block_sessions = (t.render(c)) t = loader.get_template('paginator.html') c = RequestContext(request, { 'objects': lots, 'pages': pager.page_range, 'paged': paged, }) paginator = (t.render(c)) try: page = DynamicPageContent.objects.filter(shop=request.shop, page="auctions").get() description = striptags(page.meta_content) except DynamicPageContent.DoesNotExist: description = "No meta description found" param = { 'lots': lots_list, 'sessions': block_sessions, 'session_title': session_title, 'paginator': paginator, 'page_title': 'Auctions', 'page_description': description, 'shop_categories': shop_categories, 'shop_subcategories': shop_subcategories, } return HttpResponse(my_render(request, param, 'auctions'))
def bidding_home(request): from shops.forms import MailingListMemberForm logging.critical(request.GET.get("u", None)) shop = request.shop if request.method == "POST": form = MailingListMemberForm(request.POST) if form.is_valid(): member = form.save(commit=False) member.shop = shop member.save() request.flash['message'] = unicode( _("Email successfully registered.")) request.flash['severity'] = "success" return HttpResponseRedirect(reverse("home")) else: form = MailingListMemberForm() t = loader.get_template('bidding/blocks/mailing_list_form.html') c = RequestContext(request, {'form': form}) block_mailing_list = (t.render(c)) home = Home.objects.filter(shop=request.shop).get() #TODO: replace collections """ news_items """ items = Item.objects.filter(shop=request.shop).order_by('-id')[:10] new_items = [] for i in items: image = i.image() new_items.append({ 'title': i.title, 'description': i.description, 'price': money_format(i.price, request.shop), 'url': reverse('bidding_view_item', args=[i.id]), 'image': { 'original': image.image.url if image else "", 'small': image.image.url_100x100 if image else "", 'medium': image.image.url_400x400 if image else "", } }) last = request.shop.last_post() if last: last_post = { 'url': reverse('bidding_view_post', args=[last.id]), 'title': last.title, 'body': last.body, 'date_time': date(last.date_time, 'F j, Y'), } else: last_post = {} """ Sessions """ sessions = AuctionSession.objects.filter(shop=request.shop, end__gte=datetime.now()) new_sessions = [] new_sessions.append({ 'title': 'Highligths', 'url': reverse('bidding_auctions') }) for session in sessions: new_sessions.append({ 'title': session.title, 'url': reverse('bidding_auctions_id', args=[session.id]), }) about = request.shop.about.body param = { 'about': about, 'home': { 'title': home.title, 'body': home.body, 'image': home.image }, 'new_items': new_items, 'mailing_list': block_mailing_list, 'page_title': 'Home', 'page_title': 'Home', 'page_description': striptags(home.meta_content), 'sessions': new_sessions, 'url_refund': reverse('bidding_refund'), 'url_privacy_policy': reverse('bidding_privacy_policy'), 'url_terms_of_service': reverse('bidding_terms_of_service'), } return HttpResponse(my_render(request, param, 'home'))
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 my_render(request, param, name_page=None): """ news_items """ items = Item.objects.filter(shop=request.shop).order_by('-id')[:10] new_items = [] for i in items: image = i.image() plain_item = { 'title': i.title, 'description': i.description, 'price': money_format(i.price, request.shop), 'url': reverse('bidding_view_item', args=[i.id]), 'image': {'original': image.image.url if image else "", 'small': image.image.url_100x100 if image else "", 'medium': image.image.url_400x400 if image else "", } } new_items.append(plain_item) """ Sessions """ sessions = AuctionSession.objects.filter(shop=request.shop, end__gte=datetime.now()) sessions_list = [] sessions_list.append({'title': 'Highlights', 'url': reverse('bidding_auctions')}) for session in sessions: sessions_list.append({ 'title': session.title, 'url': reverse('bidding_auctions_id', args=[session.id]), }) """ Menu """ t = loader.get_template('bidding/blocks/menu_menu.html') c = RequestContext(request, {'shop':request.shop}) menu = (t.render(c)) """ Header """ t = loader.get_template('bidding/blocks/header.html') c = RequestContext(request, {'shop':request.shop}) header = (t.render(c)) """ Footer """ t = loader.get_template('bidding/blocks/footer.html') c = RequestContext(request, {'shop':request.shop}) footer = (t.render(c)) about = request.shop.about.body links = [] menus = request.shop.menu_set.all() if menus.count() > 0: for link in menus[0].links(): links.append({ 'to': link.to, 'name': link.name, }) """ Flash """ t = loader.get_template('bidding/blocks/flash.html') c = RequestContext(request, {}) flash = (t.render(c)) """ Posts """ last = request.shop.last_post() if last: last_post = {'url': reverse('bidding_view_post', args=[last.id]), 'title': last.title, 'body': last.body, 'date_time': date(last.date_time,'F j, Y'), } else: last_post = {} env = Environment(loader=ThemeLoader(request.shop, request.is_secure())) env.filters['asset_url'] = env.loader.asset_url if name_page: try: template = env.get_template(name_page) content = template.render(param) except Exception, e: return HttpResponse("Error in template %s. %s" % (name_page, e))
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 bidding_home(request): from shops.forms import MailingListMemberForm shop = request.shop if request.method == "POST": form = MailingListMemberForm(request.POST) if form.is_valid(): member = form.save(commit=False) member.shop = shop member.save() request.flash['message'] = unicode(_("Email successfully registered.")) request.flash['severity'] = "success" return HttpResponseRedirect(reverse("home")) else: form = MailingListMemberForm() t = loader.get_template('bidding/blocks/mailing_list_form.html') c = RequestContext(request, {'form' : form}) block_mailing_list = (t.render(c)) home = Home.objects.filter(shop=request.shop).get() #TODO: replace collections """ news_items """ items = Item.objects.filter(shop=request.shop).order_by('-id')[:10] new_items = [] for i in items: image = i.image() new_items.append({ 'title': i.title, 'description': i.description, 'price': money_format(i.price, request.shop), 'url': reverse('bidding_view_item', args=[i.id]), 'image': {'original': image.image.url if image else "", 'small': image.image.url_100x100 if image else "", 'medium': image.image.url_400x400 if image else "", } }) last = request.shop.last_post() if last: last_post = {'url': reverse('bidding_view_post', args=[last.id]), 'title': last.title, 'body': last.body, 'date_time': date(last.date_time,'F j, Y'), } else: last_post = {} """ Sessions """ sessions = AuctionSession.objects.filter(shop=request.shop, end__gte=datetime.now()) new_sessions = [] new_sessions.append({'title': 'Highligths', 'url': reverse('bidding_auctions')}) for session in sessions: new_sessions.append({ 'title': session.title, 'url': reverse('bidding_auctions_id', args=[session.id]), }) about = request.shop.about.body param = { 'about': about, 'home': { 'title': home.title, 'body': home.body, 'image': home.image }, 'last_post': last_post, 'mailing_list': block_mailing_list, 'new_items': new_items, 'page_title': 'Home', 'page_description': striptags(home.meta_content), 'sessions': new_sessions, } return HttpResponse(my_render(request, param, 'home'))
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'))
logging.debug(button) payment_buttons.append(button) except Exception, e: logging.error(e) # t = loader.get_template('my_shopping/blocks/confirm.html') # c = RequestContext(request, {'cart' : cart, # 'payment_buttons': payment_buttons,}) # block_confirm = (t.render(c)) items = [] for item in cart.cartitem_set.all(): image = item.product.image() items.append({ #'image': item.product.image().image.url_100x100 if item.product.image() else None, 'title': item.product.title, 'price': money_format(item.price, shop), 'qty': item.qty, 'sub_total': money_format(item.sub_total(), 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, } }) shippingdata =({'street_address': cart.shippingdata.street_address.title(), 'city': cart.shippingdata.city.title(), 'state': cart.shippingdata.state.upper(), 'zip': cart.shippingdata.zip, 'country': cart.shippingdata.country.upper(), })
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'))