I have this method, which calls for a document associated with 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 everytime I call this from button it throws me this:
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 595, in dispatch
return self._json_response(result)
File "/home/kristian/odoov8/odoo-8.0-20161017/openerp/http.py", line 533, in _json_response
body = simplejson.dumps(response)
File "/usr/local/lib/python2.7/dist-packages/simplejson/__init__.py", line 366, in dumps
return _default_encoder.encode(obj)
File "/usr/local/lib/python2.7/dist-packages/simplejson/encoder.py", line 269, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/usr/local/lib/python2.7/dist-packages/simplejson/encoder.py", line 348, in iterencode
return _iterencode(o, 0)
File "/usr/local/lib/python2.7/dist-packages/simplejson/encoder.py", line 246, in default
raise TypeError(repr(o) + " is not JSON serializable")
I've read this answer
But I'm still not sure about it, it could be because of the domain
where I'm working this on?
The domain you passing in res
has to be list
of tuple
and not list
of tuple
of string
, check below code :
@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[0].id)
]
})
return {
'name': _('Withholding vat customer'),
'type': 'ir.actions.act_window',
'res_model': 'account.wh.iva',
'view_type': 'form',
'view_id': False,
'view_mode': 'form',
'target': 'current',
'domain': [('type', '=', inv.type )],
'context': context,
}