Done for res.partner.bank, res.company and board models. Some override may have been ignored because heavily linked to business code (like company in stock). See merge commit for more details. Task ID-2330149 COM PR odoo/odoo#61246 ENT PR odoo/enterprise#14561
52 lines
1.8 KiB
Python
52 lines
1.8 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo import api, models
|
|
|
|
|
|
class Board(models.AbstractModel):
|
|
_name = 'board.board'
|
|
_description = "Board"
|
|
_auto = False
|
|
|
|
@api.model_create_multi
|
|
def create(self, vals_list):
|
|
return self
|
|
|
|
@api.model
|
|
def fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False):
|
|
"""
|
|
Overrides orm field_view_get.
|
|
@return: Dictionary of Fields, arch and toolbar.
|
|
"""
|
|
|
|
res = super(Board, self).fields_view_get(view_id=view_id, view_type=view_type, toolbar=toolbar, submenu=submenu)
|
|
|
|
custom_view = self.env['ir.ui.view.custom'].search([('user_id', '=', self.env.uid), ('ref_id', '=', view_id)], limit=1)
|
|
if custom_view:
|
|
res.update({'custom_view_id': custom_view.id,
|
|
'arch': custom_view.arch})
|
|
res.update({
|
|
'arch': self._arch_preprocessing(res['arch']),
|
|
'toolbar': {'print': [], 'action': [], 'relate': []}
|
|
})
|
|
return res
|
|
|
|
@api.model
|
|
def _arch_preprocessing(self, arch):
|
|
from lxml import etree
|
|
|
|
def remove_unauthorized_children(node):
|
|
for child in node.iterchildren():
|
|
if child.tag == 'action' and child.get('invisible'):
|
|
node.remove(child)
|
|
else:
|
|
remove_unauthorized_children(child)
|
|
return node
|
|
|
|
archnode = etree.fromstring(arch)
|
|
# add the js_class 'board' on the fly to force the webclient to
|
|
# instantiate a BoardView instead of FormView
|
|
archnode.set('js_class', 'board')
|
|
return etree.tostring(remove_unauthorized_children(archnode), pretty_print=True, encoding='unicode')
|