2017-02-04 44 views
0

我試圖改寫訂單項目價格在POS Odoo值是不確定的迴歸模型,JS Odoo POS

我price.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']; 
      }); 

} 

price.xml

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

我收到價值total_price from Model(price.py) 但返回的是undefined in xml文件中的get_unit_display_price。

如何在執行新模型函數(js模型中的值)後,從js中設置xml中的值?

回答

0

有在你的代碼中的許多問題,我可以列出一些:

  1. 在你price.js延伸訂單項目的模型,你叫從後端功能「caculate_price」 =>它是異步的功能,這樣我就可以'立即返回值=>您的函數返回undefined在呼叫成功之前
  2. 您不需要export_as_JSON(),您可以直接從Orderline對象獲取所需的值(字段:product_id,uom,qty,price_unit)。
  3. 在你的「price.xml」中,你想從模型中調用一個函數,你錯過了parentheses,它應該是這樣的line.get_unit_display_price()

怎樣的新模式功能 (從模型JS值)執行之後在XML從JS設置值?

有2個選項:

  • 選項1:通過rpc呼籲服務器PY文件的方法,然後等待響應的結果你做(我不推薦這種方式)。所以當調用完成後,你應該得到一個應該在HTML中顯示值的DOM,然後更新它的值。
  • 選項2:我建議你實現一個「calculate_price」方法,它將在Orderline模型中執行與服務器相同的邏輯,所以你的POS可以在沒有互聯網的情況下工作(半離線模式)。然後你可以很容易地從xml文件中調用它。這意味着你的函數calculate_priceprice.js然後調用它在get_unit_display_price

希望它能幫助,我希望你會做的選擇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 
},