获得给定客户的产品价格的方法

时间:2018-04-06 02:54:17

标签: odoo xml-rpc odoo-10

我需要通过XMLRPC检索产品价格。

我正在使用产品价格清单,因此可以为每个客户分配一个给定的价格表,根据类别等给出特定的折扣。

我很难找到哪种方法可以用来检索给定数量的给定product_template id的价格,如果实际可行的话。

到目前为止,我还没能尝试任何具体方法,因为我无法确定如何在不实际创建销售订单的情况下实现这一目标。

1 个答案:

答案 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], {})