我需要通过XMLRPC检索产品价格。
我正在使用产品价格清单,因此可以为每个客户分配一个给定的价格表,根据类别等给出特定的折扣。
我很难找到哪种方法可以用来检索给定数量的给定product_template
id的价格,如果实际可行的话。
到目前为止,我还没能尝试任何具体方法,因为我无法确定如何在不实际创建销售订单的情况下实现这一目标。
答案 0 :(得分:0)
模块“产品”包含价格表的机制。模型product.pricelist
有一个非常好的方法get_product_price()
,可以很容易地在服务器端使用,但不能用于外部/ Web API。
但是,如果您有可能编写一个小的自定义模块,请执行此操作并覆盖模型product.pricelist
。添加使用此方法的可能性,例如:
由于参数是RecordSets而无法使用的Origin方法:
def get_product_price(self, product, quantity, partner, date=False, uom_id=False):
""" For a given pricelist, return price for a given product """
self.ensure_one()
return self._compute_price_rule([(product, quantity, partner)], date=date, uom_id=uom_id)[product.id][0]
外部/网络API的“Wrapper”:
def web_api_get_product_price(
self, product_id, quantity, partner_id, date=False, uom_id=False):
""" For a given pricelist, return price for a given product
callable from web api"""
self.ensure_one()
# get records
product = self.env['product.product'].browse(product_id)
partner = self.env['res.partner'].browse(partner_id)
# call origin method
return self.get_product_price(
product, quantity, partner, date=date, uom_id=uom_id)
现在你可以调用这个方法,例如:
import xmlrpclib
db = 'db_name'
password = 'admin'
common = xmlrpclib.ServerProxy('http://localhost:8069/xmlrpc/2/common')
uid = common.authenticate(db, 'admin', password, {})
models = xmlrpclib.ServerProxy('http://localhost:8069/xmlrpc/2/object')
pricelist_id = 1
product_id = 5
partner_id = 7
quantity = 20
price = models.execute_kw(
db, uid, password, 'product.pricelist',
'web_api_get_product_price',
[[pricelist_id], product_id, quantity, partner_id], {})