Instead, create a new BoardView (in JS only) instead, referenced by specifying js_class="board" on the fly on the root node of the arch of the board view. This ensures that the dashboard addon doesn't impact the FormView, and this is necessary to ensure that the next commit doesn't break anything.
53 lines
1.8 KiB
Python
53 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
|
|
from odoo.tools import pycompat
|
|
|
|
|
|
class Board(models.AbstractModel):
|
|
_name = 'board.board'
|
|
_description = "Board"
|
|
_auto = False
|
|
|
|
@api.model
|
|
def create(self, vals):
|
|
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')
|