def add_products(self, ids, context={}): obj = self.browse(ids)[0] pricelist = obj.pricelist_id categ_ids = [c.id for c in obj.product_categs] for prod in get_model("product").search_browse([["categs.id", "in", categ_ids]]): factor = pricelist.factor or 1.0 if pricelist.base_price == "product": base_price = prod.sale_price or 0 elif pricelist.base_price == "other_pricelist": if not pricelist.other_pricelist_id: raise Exception("Missing base price list") base_price = get_model("price.list").get_price( pricelist.other_pricelist_id.id, prod.id, 1) or 0 # XXX: qty elif pricelist.base_price == "volume": base_price = prod.volume or 0 else: raise Exception("Invalid base price type") price = utils.round_amount(base_price * factor, pricelist.rounding, pricelist.rounding_method) vals = { "list_id": pricelist.id, "product_id": prod.id, "price": price, } get_model("price.list.item").create(vals) return { "next": { "name": "pricelist_item", }, "flash": "Products added to price list", }
def add_products(self, ids, context={}): obj = self.browse(ids)[0] pricelist = obj.pricelist_id categ_ids = [c.id for c in obj.product_categs] for prod in get_model("product").search_browse( [["categs.id", "in", categ_ids]]): factor = pricelist.factor or 1.0 if pricelist.base_price == "product": base_price = prod.sale_price or 0 elif pricelist.base_price == "other_pricelist": if not pricelist.other_pricelist_id: raise Exception("Missing base price list") base_price = get_model("price.list").get_price( pricelist.other_pricelist_id.id, prod.id, 1) or 0 # XXX: qty elif pricelist.base_price == "volume": base_price = prod.volume or 0 else: raise Exception("Invalid base price type") price = utils.round_amount(base_price * factor, pricelist.rounding, pricelist.rounding_method) vals = { "list_id": pricelist.id, "product_id": prod.id, "price": price, } get_model("price.list.item").create(vals) return { "next": { "name": "pricelist_item", }, "flash": "Products added to price list", }
def update_prices(self, ids, context={}): for obj in self.browse(ids): for line in obj.lines: prod = line.product_id factor = obj.factor or 1.0 if obj.base_price == "product": base_price = prod.sale_price elif obj.base_price == "other_pricelist": if not obj.other_pricelist_id: raise Exception("Missing base price list") base_price = self.get_price(obj.other_pricelist_id.id, prod.id, 1) # XXX: qty elif obj.base_price == "volume": base_price = prod.volume or 0 else: raise Exception("Invalid base price type") price = utils.round_amount(base_price * factor, obj.rounding, obj.rounding_method) line.write({"price": price})