Search code examples
pythonodooodoo-8

TypeError: 'tuple' object is not callable - Odoo v8


I have this button action, to relate a document to an invoice on Odoo v8.

@api.multi
def button_generate_wh_doc(self):
    context = self._context
    partner = self.env['res.partner']
    res = {}
    for inv in self:
        view_id = self.env['ir.ui.view'].search([
            ('name', '=', 'account.invoice.wh.iva.customer')])
        context = self.env.context.copy()
        context.update({'domain':[(
            ('invoice_id','=',inv.id)
            ('type','=',inv.type)
            ('default_partner_id','=', partner._find_accounting_partner(
                inv.partner_id).id)
            ('default_name' ,'=', inv.name or inv.number)
            ('view_id' ,'=', view_id))]})
    res = {
            'name': _('Withholding vat customer'),
            'type': 'ir.actions.act_window',
            'res_model': 'account.wh.iva',
            'view_type': 'form',
            'view_id': False,
            'view_mode': 'form',
            'nodestroy': True,
            'target': 'current',
            'domain': "[('type', '=', '" + inv.type + "')]",
            'context': context
        }
    return res

But every time I call this action from button, it throws me this:

Odoo Server Error

Traceback (most recent call last):
File "/home/kristian/odoov8/odoo-8.0-20161017/openerp/http.py", line 544, in _handle_exception
return super(JsonRequest, self)._handle_exception(exception)
File "/home/kristian/odoov8/odoo-8.0-20161017/openerp/http.py", line 581, in dispatch
result = self._call_function(**self.params)
File "/home/kristian/odoov8/odoo-8.0-20161017/openerp/http.py", line 317, in _call_function
return checked_call(self.db, *args, **kwargs)
File "/home/kristian/odoov8/odoo-8.0-20161017/openerp/service/model.py", line 118, in wrapper
return f(dbname, *args, **kwargs)
File "/home/kristian/odoov8/odoo-8.0-20161017/openerp/http.py", line 314, in checked_call
return self.endpoint(*a, **kw)
File "/home/kristian/odoov8/odoo-8.0-20161017/openerp/http.py", line 810, in __call__
return self.method(*args, **kw)
File "/home/kristian/odoov8/odoo-8.0-20161017/openerp/http.py", line 410, in response_wrap
response = f(*args, **kw)
File "/home/kristian/odoov8/odoo-8.0-20161017/openerp/addons/web/controllers/main.py", line 948, in call_button
action = self._call_kw(model, method, args, {})
File "/home/kristian/odoov8/odoo-8.0-20161017/openerp/addons/web/controllers/main.py", line 936, in _call_kw
return getattr(request.registry.get(model), method)(request.cr, request.uid, *args, **kwargs)
File "/home/kristian/odoov8/odoo-8.0-20161017/openerp/api.py", line 268, in wrapper
return old_api(self, *args, **kwargs)
File "/home/kristian/odoov8/odoo-8.0-20161017/openerp/api.py", line 399, in old_api
result = method(recs, *args, **kwargs)
File "/home/kristian/odoov8/odoo-venezuela/l10n_ve_withholding_iva/model/invoice.py", line 424, in button_generate_wh_doc
('type','=',inv.type)
TypeError: 'tuple' object is not callable

I've looked for commas or typos but it seems to be alright, any ideas?


Solution

  • You forgot to put the commas, so you're actually trying to do this:

    ('invoice_id','=',inv.id)('type','=',inv.type)
    

    Which makes no sense, it should be:

    ('invoice_id','=',inv.id),
    ('type','=',inv.type)