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
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)