diff --git a/src/budy/models/bundle.py b/src/budy/models/bundle.py index 498eae8c..7661c4c1 100644 --- a/src/budy/models/bundle.py +++ b/src/budy/models/bundle.py @@ -143,6 +143,13 @@ def order_name(self): def line_cls(cls): return bundle_line.BundleLine + @classmethod + def eval_shipping(cls, *args, **kwargs): + shipping = appier.conf("BUDY_SHIPPING", None) + if not shipping: return 0.0 + shipping = eval(shipping) + return shipping(*args, **kwargs) + def pre_validate(self): base.BudyBase.pre_validate(self) self.calculate() @@ -305,10 +312,8 @@ def build_taxes(self): return 0.0 def build_shipping(self): - shipping = appier.conf("BUDY_SHIPPING", None) - if not shipping: return 0.0 - shipping = eval(shipping) - return shipping(self.sub_total, self.taxes, self.quantity) + cls = self.__class__ + return cls.eval_shipping(self.sub_total, self.taxes, self.quantity) def collect_empty(self): empty = [] diff --git a/src/budy/models/product.py b/src/budy/models/product.py index 21b43b67..a509597a 100644 --- a/src/budy/models/product.py +++ b/src/budy/models/product.py @@ -43,6 +43,7 @@ import appier from . import base +from . import bundle class Product(base.BudyBase): @@ -408,6 +409,13 @@ def simple_csv_url(cls, absolute = False): absolute = absolute ) + @classmethod + def _build(cls, model, map): + price = model.get("price", None) + if price == None: shipping_cost = None + else: shipping_cost = bundle.Bundle.eval_shipping(price, 0.0, 0.0) + model["shipping_cost"] = shipping_cost + def pre_save(self): base.BudyBase.pre_save(self) if not self.measurements: return