def cart_total_count(self): # XXX: how to handle float? # XXX: count total items in cart or total unique items in cart? ret = Decimal("0") for uid, count, comment in cookie.extract_items(cookie.read(self.request)): ret += count return ret
def data(self): ret = dict() ret["cart_settings"] = dict() ret["cart_settings"]["hide_cart_if_empty"] = self.hide_cart_if_empty if self.disable_max_article: ret["cart_settings"]["cart_max_article_count"] = 10000 else: ret["cart_settings"][ "cart_max_article_count"] = self.max_artice_count include_shipping_costs = self.include_shipping_costs ret["cart_settings"]["include_shipping_costs"] = include_shipping_costs ret["cart_items"] = list() ret["cart_summary"] = dict() items = cookie.extract_items(cookie.read(self.request)) if items: net = self.net(items) vat = self.vat(items) ret["cart_items"] = self.cart_items(items) ret["cart_summary"]["cart_vat"] = utils.ascur(vat) ret["cart_summary"]["cart_net"] = utils.ascur(net) cart_discount = self.discount(items) discount_net = cart_discount["net"] discount_vat = cart_discount["vat"] discount_total = discount_net + discount_vat ret["cart_summary"]["discount_net"] = "-" + utils.ascur( discount_net) ret["cart_summary"]["discount_vat"] = "-" + utils.ascur( discount_vat) ret["cart_summary"]["discount_total"] = "-" + utils.ascur( discount_total) ret["cart_summary"]["discount_total_raw"] = discount_total total = net + vat - discount_total if include_shipping_costs: shipping = self.shipping(items) total += shipping["net"] + shipping["vat"] label = translate(shipping["label"], context=self.request) ret["cart_summary"]["shipping_label"] = label if shipping["description"]: desc = translate(shipping["description"], context=self.request) ret["cart_summary"]["shipping_description"] = "(%s)" % desc else: ret["cart_summary"]["shipping_description"] = "" ret["cart_summary"]["shipping_net"] = utils.ascur( shipping["net"]) ret["cart_summary"]["shipping_vat"] = utils.ascur( shipping["vat"]) ret["cart_summary"]["shipping_total"] = utils.ascur( shipping["net"] + shipping["vat"]) ret["cart_summary"]["shipping_total_raw"] = (shipping["net"] + shipping["vat"]) # B/C for bda.plone.cart < 0.6 custom templates ret["cart_summary"]["cart_shipping"] = utils.ascur( shipping["net"] + shipping["vat"]) ret["cart_summary"]["cart_total"] = utils.ascur(total) ret["cart_summary"]["cart_total_raw"] = total return ret
def total(self): total = Decimal(0) items = cookie.extract_items(cookie.read(self.request)) net = self.net(items) vat = self.vat(items) cart_discount = self.discount(items) discount_net = cart_discount["net"] discount_vat = cart_discount["vat"] discount_total = discount_net + discount_vat total = net + vat - discount_total if self.include_shipping_costs: shipping = self.shipping(items) total += shipping["net"] + shipping["vat"] return total.quantize(Decimal("1.000"))
def available(self): stock = self.stock # stock not applied if stock is None: # unlimited return None available = stock.available # reduce available count if item already in cart if available is not None: cart_items = cookie.extract_items(cookie.read(self.request)) item_uid = IUUID(self.context) for uid, count, comment in cart_items: if uid == item_uid: available -= float(count) return available
def remove_item_from_cart(request, uid): """Remove single item from cart by uid. """ items = cookie.extract_items(cookie.read(request)) cookie_items = list() for item_uid, count, comment in items: if uid == item_uid: continue cookie_items.append( item_uid + cookie.UID_DELIMITER + six.moves.urllib.parse.quote(comment) + cookie.COUNT_DELIMITER + str(count) ) new_cookie = ",".join(cookie_items) request.response.setCookie("cart", new_cookie, quoted=False, path="/")
def include_shipping_costs(self): items = cookie.extract_items(cookie.read(self.request)) for item in items: if cartitem.cart_item_shippable(self.context, item): return True return False
def aggregated_count(self): items = cookie.extract_items(cookie.read(self.request)) return aggregate_cart_item_count(IUUID(self.context), items)