首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeError: generate_purchase_order()只取一个参数(5个给定)

TypeError: generate_purchase_order()只取一个参数(5个给定)
EN

Stack Overflow用户
提问于 2016-07-12 06:14:05
回答 1查看 663关注 0票数 0

我正在尝试将openerp 7代码转换为odoo8。在V7浏览()方法中有几个参数,如self、cr、uid、In、上下文等,但在V8中,我认为没有一个是needed.In --我的自定义模块是根据从my获得的信息创建一个采购订单。我已经对10000本书所需的纸张量进行了自定义计算,这一信息将从材料清单中获得invoice.Products,从不需要纸张的数量中获取数量,从产品成本属性中获得单价。我无法解决这个错误。“方法需要一个参数(5 )”。

mrp.py,

代码语言:javascript
复制
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,

代码语言:javascript
复制
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'}
EN

回答 1

Stack Overflow用户

发布于 2016-07-12 07:05:00

如果您要从模型中的其他方法调用generate_purchase_order方法,那么对该方法使用装饰器@api.multi

同样在您的generate_purchase_order方法中,替换

代码语言:javascript
复制
for order in self.browse():

通过

代码语言:javascript
复制
for order in self:

编辑

代码语言:javascript
复制
@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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38321221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档