Пример #1
0
 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
Пример #2
0
 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
Пример #3
0
 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"))
Пример #4
0
 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
Пример #5
0
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="/")
Пример #6
0
 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
Пример #7
0
 def aggregated_count(self):
     items = cookie.extract_items(cookie.read(self.request))
     return aggregate_cart_item_count(IUUID(self.context), items)