示例#1
0
 def net(self, items):
     settings = get_shop_shipping_settings()
     calc = CartItemCalculator(self.context)
     shipping_limit_from_gross = settings.shipping_limit_from_gross
     free_shipping_limit = Decimal(str(settings.free_shipping_limit))
     purchase_price = Decimal(0)
     # calculate shipping from gross
     if shipping_limit_from_gross:
         purchase_price += calc.net(items) + calc.vat(items)
     # calculate shipping from net
     else:
         purchase_price += calc.net(items)
     # purchase price exceeds free shipping limit, no shipping costs
     if free_shipping_limit and purchase_price > free_shipping_limit:
         return Decimal(0)
     flat_shipping_cost = Decimal(str(settings.flat_shipping_cost))
     item_shipping_cost = Decimal(str(settings.item_shipping_cost))
     shipping_costs = Decimal(0)
     # item shipping costs set, calculate for contained cart items
     if item_shipping_cost > Decimal(0):
         for item in items:
             if not cart_item_shippable(self.context, item):
                 continue
             shipping_costs += item_shipping_cost * item[1]
     # consider flat shipping cost if set
     if flat_shipping_cost:
         # item shipping costs exceed flat shipping costs
         if shipping_costs > flat_shipping_cost:
             return shipping_costs
         # flat shipping costs apply
         return Decimal(flat_shipping_cost)
     # return calculated shipping costs
     return shipping_costs
示例#2
0
 def calculate(self, items):
     calc = CartItemCalculator(self.context)
     if calc.net(items) + calc.vat(items) > Decimal(FREE_SHIPPING_LIMIT):
         return Decimal(0)
     return Decimal(FLAT_SHIPPING_COST)