【发布时间】:2018-04-06 02:54:17
【问题描述】:
我需要通过 XMLRPC 检索产品价格。
我正在使用产品价目表,因此可以为每个客户分配一个给定的价目表,该价目表根据类别等提供特定折扣。
我正在努力寻找可以使用哪种方法来检索给定数量的给定product_template id 的价格,如果这实际上可能的话。
到目前为止,我无法尝试任何特定方法,因为如果不实际创建销售订单,我无法确定如何实现。
【问题讨论】:
我需要通过 XMLRPC 检索产品价格。
我正在使用产品价目表,因此可以为每个客户分配一个给定的价目表,该价目表根据类别等提供特定折扣。
我正在努力寻找可以使用哪种方法来检索给定数量的给定product_template id 的价格,如果这实际上可能的话。
到目前为止,我无法尝试任何特定方法,因为如果不实际创建销售订单,我无法确定如何实现。
【问题讨论】:
模块“产品”包含价目表机制。模型product.pricelist 有一个非常好的方法get_product_price(),它可以很容易地在服务器端使用,但不适用于外部/Web API。
但是,如果您有可能编写一个小自定义模块,请执行此操作并覆盖模型 product.pricelist。添加使用此方法的可能性,例如:
由于参数是 RecordSets 而不能使用的原始方法:
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 的“包装器”:
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], {})
【讨论】: