0

我正在尝试覆盖 POS Odoo 中的 Orderline 价格

我的价格.js

get_unit_display_price: function(){
    var self = this;                
    var line = self.export_as_JSON();
    var product = this.pos.db.get_product_by_id(line.product_id);        
    fields.product_id  = line.product_id;
    fields.pricelist_id   = this.pos.config.pricelist_id[0];
    fields.uom = product.uom_id;
    fields.line_qty = line.qty;
    fields.price_unit = line.price_unit;
    var model = new Model('pos.order');
     this.total_price = model.call('calculate_price',
            [0, fields]).done(function(result){
                 total_price = result['total_price'];
                 return  result['total_price'];
            });

}

价格.xml

    <t t-jquery=".price" t-operation="append">      
        <t t-esc="widget.format_currency(line.get_unit_display_price)"/>
    </t>

我从 Model (price.py)中获取值total_price但在 xml 文件的 get_unit_display_price 中返回未定义

执行新模型函数后如何从 js 中设置 xml 值(模型中的 js 值)?

4

2 回答 2

0
get_orderline: function() {
    var order = this.pos.get_order();
    var orderlines = order.orderlines.models;
    var all_lines = [];
    for (var i = 0; i < orderlines.length; i++) {
        var line = orderlines[i]
        if (line) {
            all_lines.push({
                'product_id': line.product.id,
                'qty': line.quantity,
                'price': line.get_display_price(),
            })
        }
    }
    return all_lines
},
于 2017-06-05T09:41:37.360 回答
0

您的代码中有很多问题,我可以列出一些:

  1. 在扩展 Orderline 模型的 price.js 中,您从后端调用了函数“caculate_price”=> 它是异步函数,所以我不能立即为您返回值 =>undefined在调用成功之前您的函数返回
  2. 您不需要export_as_JSON(),您可以直接从 Orderline 对象中获取您想要的值(字段:product_id、uom、qty、price_unit)。
  3. 在你的“price.xml”中,你想从模型中调用一个函数,你错过了括号,应该是这样line.get_unit_display_price()的。

执行新模型函数后如何从 js 中设置 xml 值(模型中的 js 值)?

有2个选项:

  • 选项1:通过调用服务器上py文件的方法rpc,然后像你一样等待响应结果(我不推荐这种方式)。所以当调用完成后,你应该得到一个 DOM,值应该以 HTML 显示,然后更新它的值。
  • 选项 2:我建议您实施一种方法“calculate_price”,该方法将执行与模型中的服务器相同的逻辑Orderline,因此您的 POS 可以在没有互联网的情况下工作(半离线模式)。然后你可以很容易地从 xml 文件中调用它。calculate_price这意味着您在price.js然后调用它中编写函数get_unit_display_price

希望它有帮助,我希望你会做选项2。

于 2017-02-04T12:13:42.987 回答