2016-07-12 23 views
0

我想將openerp 7代碼轉換爲odoo8。在V7中,browse()方法有幾個參數,比如self,cr,uid,ids,context,但在V8中我認爲這些都不是必需的。在我的自定義模塊中,我試圖根據從mrp獲得的信息創建購買訂單。我已經做了一個自定義的計算,以便生產10000本圖書所需的紙張數量。經過計算,此信息應該用於購買發票。產品將從物料清單中獲得,數量從所需的紙張數量和從產品成本attribute.I單價是無法解決這個錯誤 「方法需要完全1個參數(5給出)」TypeError:generate_purchase_order()只需要1個參數(給定5)

mrp.py,

from openerp import models 
class mrp_production(models.Model): 
    _inherit = 'mrp.production' 

    def generate_purchase_order(self,supplier_id,warehouse_id): 
     purchase_obj = self.env['purchase.order'] 
     purchase_line_obj = self.env['purchase.order.line'] 
     warehouse_obj = self.env['stock.warehouse'] 

     warehouse = warehouse_obj.browse(warehouse_id) 
     if not warehouse: 
      return False 
     if isinstance(warehouse, list): 
      warehouse = warehouse[0] 

     for order in self: 
      vals = {} 
      vals = purchase_obj.onchange_partner_id() 
      vals['origin'] = order.name 
      vals['partner_id'] = supplier_id 

      vals['warehouse_id'] = warehouse_id 
      vals['location_id'] = warehouse.lot_stock_id.id 
      vals['date_order'] = order.date_planned 
      purchase_id = purchase_obj.create(vals) 

      for line in self.bom_id.bom_line_ids: 
       if not line.product_id: 
        continue 

       line_vals = purchase_line_obj.onchange_product_id(line.product_id.id, 
               line.product_uom_qty, line.product_uom.id, supplier_id, 
               date_planned=line.date_planned)['value'] 
       line_vals['name'] = line.name 
       line_vals['product_id'] = line.product_id.id 
       if not line_vals.get('price_unit', False): 
        line_vals['price_unit'] = line.product_id.list_price 
       line_vals['product_uom'] = line.product_uom.id 
       line_vals['product_uom_qty'] = 181.13 
       line_vals['order_id'] = purchase_id 
       purchase_line_obj.create(line_vals) 

     return True 

generate_purchase_order.py,

from openerp import models,fields,api 
class generate_purchase_order(models.Model): 
    _name = 'mrp_to_purchase_order.generate_purchase_order' 
    _description = 'Generate Purchase Order' 

    partner_id = fields.Many2one('res.partner', 'Supplier', required=True, domain="[('supplier','=',True)]") 
    warehouse_id = fields.Many2one('stock.warehouse', 'Warehouse', required=True) 

    @api.multi 
    def onchange_partner_id(self,partner_id): 
     return {} 

    def generate_purchase_order(self): 
     for wizard in self: 
      #mrp_order_ids = [context['active_id']] 
      mrp_obj = self.env['mrp.production'] 
      mrp_obj.generate_purchase_order(wizard.partner_id.id, wizard.warehouse_id.id) 
     return { 'type': 'ir.actions.act_window_close'} 

回答

0

如果要調用從模型中的其他一些方法generate_purchase_order方法,然後用裝飾@api.multi該方法。

而且在generate_purchase_order方法,更換

for order in self.browse(): 

通過

for order in self: 

編輯

@api.multi 
def generate_purchase_order(self): 
    for wizard in self: 
     #mrp_order_ids = [context['active_id']] 
     mrp_obj = self.env['mrp.production'] 
     # Get the mrp record 
     mrp_rec = code to get mrp record 
     mrp_rec.generate_purchase_order(wizard.partner_id.id, wizard.warehouse_id.id) 
     return { 'type': 'ir.actions.act_window_close'} 
+0

generate_purchase_order方法正在從另一個類 – Bhanukiran

+0

更新中調用的代碼的方法,所以我c是否應該檢查'generate_purchase_order'中的哪一行會導致錯誤? –

+0

browse()問題是solvd,但我現在得到這個錯誤:TypeError:generate_purchase_order()需要剛好1個參數(給出5) – Bhanukiran

相關問題