def product(request, slug, template="shop/product.html"): """ Display a product - convert the product variations to JSON as well as handling adding the product to either the cart or the wishlist. """ published_products = Product.objects.published(for_user=request.user) product = get_object_or_404(published_products, slug=slug) fields = [f.name for f in ProductVariation.option_fields()] variations = product.variations.all() variations_json = simplejson.dumps([ dict([(f, getattr(v, f)) for f in fields + ["sku", "image_id"]]) for v in variations ]) to_cart = (request.method == "POST" and request.POST.get("add_wishlist") is None) initial_data = {} if variations: initial_data = dict([(f, getattr(variations[0], f)) for f in fields]) initial_data["quantity"] = 1 add_product_form = AddProductForm(request.POST or None, product=product, initial=initial_data, to_cart=to_cart) if request.method == "POST": if add_product_form.is_valid(): if to_cart: quantity = add_product_form.cleaned_data["quantity"] request.cart.add_item(add_product_form.variation, quantity) recalculate_discount(request) info(request, _("Item added to cart")) return redirect("shop_cart") else: skus = request.wishlist sku = add_product_form.variation.sku if sku not in skus: skus.append(sku) info(request, _("Item added to wishlist")) response = redirect("shop_wishlist") set_cookie(response, "wishlist", ",".join(skus)) return response context = { "product": product, "editable_obj": product, "images": product.images.all(), "variations": variations, "variations_json": variations_json, "has_available_variations": any([v.has_price() for v in variations]), "related_products": product.related_products.published(for_user=request.user), "add_product_form": add_product_form } templates = [u"shop/%s.html" % unicode(product.slug), template] return render(request, templates, context)
def product(request, slug, template="shop/product.html"): """ Display a product - convert the product variations to JSON as well as handling adding the product to either the cart or the wishlist. """ published_products = Product.objects.published(for_user=request.user)\ .select_subclasses() product = get_object_or_404(published_products, slug=slug) fields = [f.name for f in ProductVariation.option_fields()] variations = product.variations.all() variations_json = simplejson.dumps([dict([(f, getattr(v, f)) for f in fields + ["sku", "image_id"]]) for v in variations]) to_cart = (request.method == "POST" and request.POST.get("add_wishlist") is None) initial_data = {} if variations: initial_data = dict([(f, getattr(variations[0], f)) for f in fields]) initial_data["quantity"] = 1 add_product_form = AddProductForm(request.POST or None, product=product, initial=initial_data, to_cart=to_cart) if request.method == "POST": if add_product_form.is_valid(): if to_cart: quantity = add_product_form.cleaned_data["quantity"] request.cart.add_item(add_product_form.variation, quantity) recalculate_discount(request) info(request, _("Item added to cart")) return redirect("shop_cart") else: skus = request.wishlist sku = add_product_form.variation.sku if sku not in skus: skus.append(sku) info(request, _("Item added to wishlist")) response = redirect("shop_wishlist") set_cookie(response, "wishlist", ",".join(skus)) return response context = { "product": product, "editable_obj": product, "images": product.images.all(), "variations": variations, "variations_json": variations_json, "has_available_variations": any([v.has_price() for v in variations]), "related_products": product.related_products.published( for_user=request.user), "add_product_form": add_product_form } templates = [] # Check for a template matching the page's content model. if product.content_model is not None: templates.append(u"shop/products/%s.html" % product.content_model) templates.append(template) return render(request, templates, context)
def add_to_cart(request): if not request.method == 'POST': print('AAAA') return HttpResponse({}, status=400) print(request.POST) slug = request.POST.get('product-slug') published_products = Product.objects.published(for_user=request.user) product = get_object_or_404(published_products, slug=slug) fields = [f.name for f in ProductVariation.option_fields()] variations = product.variations.all() variations_json = json.dumps([ dict([(f, getattr(v, f)) for f in fields + ["sku", "image_id"]]) for v in variations ]) to_cart = (request.method == "POST" and request.POST.get("add_wishlist") is None) initial_data = {} if variations: initial_data = dict([(f, getattr(variations[0], f)) for f in fields]) initial_data["quantity"] = 1 add_product_form = AddProductForm(request.POST or None, product=product, initial=initial_data, to_cart=to_cart) if request.method == "POST": print(add_product_form) if add_product_form.is_valid(): if to_cart: print('PRODUCT_FORM', add_product_form) quantity = add_product_form.cleaned_data["quantity"] request.cart.add_item(add_product_form.variation, quantity) recalculate_cart(request) #info(request, _("Item added to cart")) #return redirect("shop_cart") else: skus = request.wishlist sku = add_product_form.variation.sku if sku not in skus: skus.append(sku) #info(requesadd_to_cartt, _("Item added to wishlist")) response = redirect("shop_wishlist") set_cookie(response, "wishlist", ",".join(skus)) #return response data = { 'total_price': format(request.cart.total_price(), '.2f'), 'total_quantity': request.cart.total_quantity(), 'wishlist': len(request.wishlist) } print(data) return HttpResponse(json.dumps(data), content_type="application/json")
def wishlist(request, template="shop/wishlist.html"): """ Display the wishlist and handle removing items from the wishlist and adding them to the cart. """ if not settings.SHOP_USE_WISHLIST: raise Http404 skus = request.wishlist error = None if request.method == "POST": to_cart = request.POST.get("add_cart") add_product_form = AddProductForm(request.POST or None, to_cart=to_cart) if to_cart: if add_product_form.is_valid(): request.cart.add_item(add_product_form.variation, 1) recalculate_discount(request) recalculate_billship_tax(request) message = _("Item added to cart") url = "shop_cart" else: error = add_product_form.errors.values()[0] else: message = _("Item removed from wishlist") url = "shop_wishlist" sku = request.POST.get("sku") if sku in skus: skus.remove(sku) if not error: info(request, message) response = redirect(url) set_cookie(response, "wishlist", ",".join(skus)) return response # Remove skus from the cookie that no longer exist. published_products = Product.objects.published(for_user=request.user) f = {"product__in": published_products, "sku__in": skus} wishlist = ProductVariation.objects.filter(**f).select_related(depth=1) wishlist = sorted(wishlist, key=lambda v: skus.index(v.sku)) context = {"wishlist_items": wishlist, "error": error} response = render(request, template, context) if len(wishlist) < len(skus): skus = [variation.sku for variation in wishlist] set_cookie(response, "wishlist", ",".join(skus)) return response
def wishlist(request, template="shop/wishlist.html"): """ Display the wishlist and handle removing items from the wishlist and adding them to the cart. """ if not settings.SHOP_USE_WISHLIST: raise Http404 skus = request.wishlist error = None if request.method == "POST": to_cart = request.POST.get("add_cart") add_product_form = AddProductForm(request.POST or None, to_cart=to_cart) if to_cart: if add_product_form.is_valid(): request.cart.add_item(add_product_form.variation, 1) recalculate_discount(request) message = _("Item added to cart") url = "shop_cart" else: error = add_product_form.errors.values()[0] else: message = _("Item removed from wishlist") url = "shop_wishlist" sku = request.POST.get("sku") if sku in skus: skus.remove(sku) if not error: info(request, message) response = redirect(url) set_cookie(response, "wishlist", ",".join(skus)) return response # Remove skus from the cookie that no longer exist. published_products = Product.objects.published(for_user=request.user) f = {"product__in": published_products, "sku__in": skus} wishlist = ProductVariation.objects.filter(**f).select_related(depth=1) wishlist = sorted(wishlist, key=lambda v: skus.index(v.sku)) context = {"wishlist_items": wishlist, "error": error} response = render(request, template, context) if len(wishlist) < len(skus): skus = [variation.sku for variation in wishlist] set_cookie(response, "wishlist", ",".join(skus)) return response
def product(request, slug, template="shop/product.html"): """ Display a product - convert the product variations to JSON as well as handling adding the product to either the cart or the wishlist. """ published_products = Product.objects.published(for_user=request.user) product = get_object_or_404(published_products, slug=slug) to_cart = (request.method == "POST" and request.POST.get("add_wishlist") is None) add_product_form = AddProductForm(request.POST or None, product=product, initial={"quantity": 1}, to_cart=to_cart) if request.method == "POST": if add_product_form.is_valid(): if to_cart: quantity = add_product_form.cleaned_data["quantity"] request.cart.add_item(add_product_form.variation, quantity) recalculate_discount(request) info(request, _("Item added to cart")) return HttpResponseRedirect(reverse("shop_cart")) else: skus = request.wishlist sku = add_product_form.variation.sku if sku not in skus: skus.append(sku) info(request, _("Item added to wishlist")) response = HttpResponseRedirect(reverse("shop_wishlist")) set_cookie(response, "wishlist", ",".join(skus)) return response fields = [f.name for f in ProductVariation.option_fields()] fields += ["sku", "image_id"] variations = product.variations.all() variations_json = simplejson.dumps([dict([(f, getattr(v, f)) for f in fields]) for v in variations]) context = { "product": product, "images": product.images.all(), "variations": variations, "variations_json": variations_json, "has_available_variations": any([v.has_price() for v in variations]), "related": product.related_products.published(for_user=request.user), "add_product_form": add_product_form } return render_to_response(template, context, RequestContext(request))
def product(request, slug, template="shop/product.html"): """ Display a product - convert the product variations to JSON as well as handling adding the product to either the cart or the wishlist. """ published_products = Product.objects.published(for_user=request.user) product = get_object_or_404(published_products, slug=slug) if not request.is_ajax(): page = Category.objects.get(slug__exact='shop') products = Product.objects.published(for_user=request.user ).filter(page.category.filters()).distinct() sort_options = [(slugify(option[0]), option[1]) for option in settings.SHOP_PRODUCT_SORT_OPTIONS] sort_by = request.GET.get("sort", sort_options[0][1]) products = paginate(products.order_by(sort_by), request.GET.get("page", 1), settings.SHOP_PER_PAGE_CATEGORY, settings.MAX_PAGING_LINKS) products.sort_by = sort_by sub_categories = page.category.children.published() child_categories = Category.objects.filter(id__in=sub_categories) context = RequestContext(request, locals()) return render_to_response('pages/category.html', {}, context_instance=context) else: fields = [f.name for f in ProductVariation.option_fields()] variations = product.variations.all() variations_json = simplejson.dumps([dict([(f, getattr(v, f)) for f in fields + ["sku", "image_id"]]) for v in variations]) to_cart = (request.method == "POST" and request.POST.get("add_wishlist") is None) initial_data = {} if variations: initial_data = dict([(f, getattr(variations[0], f)) for f in fields]) initial_data["quantity"] = 1 add_product_form = AddProductForm(request.POST or None, product=product, initial=initial_data, to_cart=to_cart) if request.method == "POST": if add_product_form.is_valid(): if to_cart: quantity = add_product_form.cleaned_data["quantity"] request.cart.add_item(add_product_form.variation, quantity) recalculate_cart(request) return HttpResponse(request.cart.total_quantity()) else: skus = request.wishlist sku = add_product_form.variation.sku if sku not in skus: skus.append(sku) info(request, _("Item added to wishlist")) response = redirect("shop_wishlist") set_cookie(response, "wishlist", ",".join(skus)) return response context = { "product": product, "editable_obj": product, "images": product.images.all(), "variations": variations, "variations_json": variations_json, "has_available_variations": any([v.has_price() for v in variations]), "related_products": product.related_products.published( for_user=request.user), "add_product_form": add_product_form } templates = [u"shop/%s.html" % unicode(product.slug), template] return render(request, templates, context)
def wishlist(request, template="shop/wishlist1.html"): """ Display the wishlist and handle removing items from the wishlist and adding them to the cart. """ if not settings.SHOP_USE_WISHLIST: raise Http404 skus = request.wishlist error = None if request.method == "POST": print request.POST print "nihao" to_cart = request.POST.get("add_cart") print len(to_cart) print "to_cart:"+to_cart #{u'sku': [u'28'], u'csrfmiddlewaretoken': [u'P5IBTacZNNoP6QzaVPMScIdje3cGBEbv'], u'add_cart': [u'Buy'], u'quantity': [u'1']}> # test={u'sku': [u'28'], u'csrfmiddlewaretoken': [u'P5IBTacZNNoP6QzaVPMScIdje3cGBEbv'], u'add_cart': [u'Buy'], u'quantity': [u'1']} # add_product_form = AddProductForm(test or None, # to_cart=to_cart) # # print request.POST # print add_product_form if len(to_cart)>10: pass tmp_post=request.POST.copy() wish_skus=tmp_post.getlist("sku") if wish_skus=="none": message = _("error in wishlist") # print "wish_skus:" + wish_skus for i in wish_skus: tmp_post.__setitem__("sku",i) add_product_form = AddProductForm(tmp_post or None, to_cart=to_cart) if add_product_form.is_valid(): request.cart.add_item(add_product_form.variation, 1) recalculate_cart(request) else: error = list(add_product_form.errors.values())[0] # print "error:"+str(skus) skus.remove(i) message = _("Items added to cart") url = "shop_cart" elif to_cart: add_product_form = AddProductForm(request.POST or None, to_cart=to_cart) if add_product_form.is_valid(): request.cart.add_item(add_product_form.variation, 1) print add_product_form.variation recalculate_cart(request) message = _("Item added to cart") url = "shop_cart" else: error = list(add_product_form.errors.values())[0] else: add_product_form = AddProductForm(request.POST or None, to_cart=to_cart) message = _("Item removed from wishlist") url = "shop_wishlist" sku = request.POST.get("sku") print request.POST.get("sku") print skus if sku in skus: skus.remove(sku) if not error: info(request, message) response = redirect(url) set_cookie(response, "wishlist", ",".join(skus)) return response # Remove skus from the cookie that no longer exist. published_products = Product.objects.published(for_user=request.user) f = {"product__in": published_products, "sku__in": skus} wishlist = ProductVariation.objects.filter(**f).select_related(depth=1) wishlist = sorted(wishlist, key=lambda v: skus.index(v.sku)) context = {"wishlist_items": wishlist, "error": error} response = render(request, template, context) if len(wishlist) < len(skus): skus = [variation.sku for variation in wishlist] set_cookie(response, "wishlist", ",".join(skus)) return response
def product(request, slug, template="shop/product.html"): """ Display a product - convert the product variations to JSON as well as handling adding the product to either the cart or the wishlist. """ address = request.session['address'] if 'cart loaded' in request.session: current_store = request.session['stores'][0] else: current_store = [] published_products = Product.objects.published(for_user=request.user) product = get_object_or_404(published_products, slug=slug) fields = [f.name for f in ProductVariation.option_fields()] variations = product.variations.all() variations_json = simplejson.dumps([dict([(f, getattr(v, f)) for f in fields + ["sku", "image_id"]]) for v in variations]) to_cart = (request.method == "POST" and request.POST.get("add_wishlist") is None) initial_data = {} if variations: initial_data = dict([(f, getattr(variations[0], f)) for f in fields]) initial_data["quantity"] = 1 add_product_form = AddProductForm(request.POST or None, product=product, initial=initial_data, to_cart=to_cart) if request.method == "POST": if add_product_form.is_valid(): if to_cart: if 'cart loaded' in request.session: current_store = Store.objects.filter(name__exact=product.store)[0] if current_store != request.session['stores'][0]: info(request, _("Sorry, the item cannot be added to your cart. " "By NY law you cannot shop from two different liquor stores simultaneously.")) return HttpResponseRedirect('/shop/') else: request.session['cart loaded'] = 'cart loaded' store = Store.objects.filter(name__exact=product.store) request.session['stores'] = store request.session['delivery min'] = store[0].delivery_min current_store = store[0] name = unicodedata.normalize('NFKD', current_store.name).encode('ascii','ignore') store_slug = '/shop/'+slugify(name)+'/' request.session['store slug'] = store_slug quantity = add_product_form.cleaned_data["quantity"] request.cart.add_item(add_product_form.variation, quantity) recalculate_cart(request) info(request, _("Item added to cart. Anything else from %s?" % name )) # return redirect("shop_cart") return redirect(store_slug) else: skus = request.wishlist sku = add_product_form.variation.sku if sku not in skus: skus.append(sku) info(request, _("Item added to wishlist")) response = redirect("shop_wishlist") set_cookie(response, "wishlist", ",".join(skus)) return response context = { "product": product, "editable_obj": product, "images": product.images.all(), "variations": variations, "variations_json": variations_json, "has_available_variations": any([v.has_price() for v in variations]), "related_products": product.related_products.published( for_user=request.user), "add_product_form": add_product_form, "address": address, "stores": current_store, } templates = [u"shop/%s.html" % unicode(product.slug), template] # new return render(request, templates, context)
def wishlist(request, template="shop/wishlist1.html"): """ Display the wishlist and handle removing items from the wishlist and adding them to the cart. """ if not settings.SHOP_USE_WISHLIST: raise Http404 skus = request.wishlist error = None # print "hehe" if request.method == "POST": # print request.POST print "nihao" # to_cart = request.POST.get("add_cart").decode('utf-8').encode('GBK') to_cart = request.POST.get("add_cart") if to_cart: tmp_post=request.POST.copy() wish_skus=tmp_post.getlist("sku") if wish_skus=="none": message = _("error in wishlist") # print "wish_skus:" + wish_skus for i in wish_skus: tmp_post.__setitem__("sku",i) add_product_form = AddProductForm(tmp_post or None, to_cart=to_cart) if add_product_form.is_valid(): request.cart.add_item(add_product_form.variation, 1) recalculate_cart(request) else: error = list(add_product_form.errors.values())[0] # print "error:"+str(skus) skus.remove(i) message = _("Items added to cart") url = "shop_cart" else: add_product_form = AddProductForm(request.POST or None, to_cart=to_cart) message = _("Item removed from wishlist") url = "shop_wishlist" sku = request.POST.get("sku") print request.POST.get("sku") print skus if sku in skus: skus.remove(sku) if not error: info(request, message) response = redirect(url) set_cookie(response, "wishlist", ",".join(skus)) return response # Remove skus from the cookie that no longer exist. published_products = Product.objects.published(for_user=request.user) f = {"product__in": published_products, "sku__in": skus} wishlist = ProductVariation.objects.filter(**f).select_related(depth=1) wishlist = sorted(wishlist, key=lambda v: skus.index(v.sku)) context = {"wishlist_items": wishlist, "error": error} response = render(request, template, context) if len(wishlist) < len(skus): skus = [variation.sku for variation in wishlist] set_cookie(response, "wishlist", ",".join(skus)) return response