Kiran
Kiran

Reputation: 1531

TypeError: generate_purchase_order() takes exactly 1 argument (5 given)

I am trying to convert openerp 7 code to odoo8. In V7 browse() method had several parameters like self,cr,uid,ids,context but in V8 I think none of these is needed.In my custom module I am trying to create a purchase order based on the information obtained from mrp.I have done a custom calculation for how many Kgs of paper needed for 10000 quantities of books to be manufactured.After calculation this info should go to purchase invoice.Products will be obtained from bill of materials,quantity from no of kgs of paper needed and unit price from product cost attribute.I am unable to solve this error "method takes exactly 1 argument (5 given)"

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'}

Upvotes: 0

Views: 669

Answers (1)

Gopakumar N G
Gopakumar N G

Reputation: 1843

If you are calling the generate_purchase_order method from some other method in your model, then use the decorator @api.multi for that method.

Also in your generate_purchase_order method, replace

for order in self.browse():

by

for order in self:

EDIT

@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'}

Upvotes: 0

Related Questions