first commit
This commit is contained in:
128
modules/dashboard/ir.py
Normal file
128
modules/dashboard/ir.py
Normal file
@@ -0,0 +1,128 @@
|
||||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
import math
|
||||
|
||||
from lxml import etree
|
||||
|
||||
from trytond.pool import Pool, PoolMeta
|
||||
from trytond.transaction import Transaction
|
||||
|
||||
|
||||
class View(metaclass=PoolMeta):
|
||||
__name__ = 'ir.ui.view'
|
||||
|
||||
@staticmethod
|
||||
def dashboard_id():
|
||||
'''
|
||||
Return the database id of view_dashboard
|
||||
'''
|
||||
ModelData = Pool().get('ir.model.data')
|
||||
models_data = ModelData.search([
|
||||
('fs_id', '=', 'view_dashboard'),
|
||||
('module', '=', 'dashboard'),
|
||||
], limit=1)
|
||||
if not models_data:
|
||||
return 0
|
||||
model_data, = models_data
|
||||
return model_data.db_id
|
||||
|
||||
@staticmethod
|
||||
def _dashboard_element_action(action):
|
||||
'''
|
||||
Return etree Element for the given dashboard action.
|
||||
'''
|
||||
return etree.Element('action', {
|
||||
'name': str(action.act_window.id),
|
||||
})
|
||||
|
||||
@classmethod
|
||||
def dashboard_view(cls, arch):
|
||||
'''
|
||||
Add action to view arch of dashboard
|
||||
'''
|
||||
User = Pool().get('res.user')
|
||||
tree = etree.fromstring(arch)
|
||||
root = tree.getroottree().getroot()
|
||||
user = User(Transaction().user)
|
||||
if user.dashboard_layout == 'square':
|
||||
root.set('col', str(int(math.ceil(math.sqrt(
|
||||
len(user.dashboard_actions))))))
|
||||
for action in user.dashboard_actions:
|
||||
root.append(cls._dashboard_element_action(action))
|
||||
elif user.dashboard_layout == 'stack_right':
|
||||
group = None
|
||||
root.set('col', '2')
|
||||
for action in user.dashboard_actions:
|
||||
element = cls._dashboard_element_action(action)
|
||||
if group is None:
|
||||
root.append(element)
|
||||
group = etree.Element('group', {
|
||||
'col': '1',
|
||||
'yexpand': '1',
|
||||
'yfill': '1',
|
||||
})
|
||||
root.append(group)
|
||||
else:
|
||||
group.append(element)
|
||||
elif user.dashboard_layout == 'stack_left':
|
||||
root.set('col', '2')
|
||||
group = etree.Element('group', {
|
||||
'col': '1',
|
||||
'yexpand': '1',
|
||||
'yfill': '1',
|
||||
})
|
||||
root.append(group)
|
||||
first = True
|
||||
for action in user.dashboard_actions:
|
||||
element = cls._dashboard_element_action(action)
|
||||
if first:
|
||||
first = False
|
||||
root.append(element)
|
||||
else:
|
||||
group.append(element)
|
||||
elif user.dashboard_layout == 'stack_top':
|
||||
root.set('col', '1')
|
||||
group = etree.Element('group', {
|
||||
'col': str(len(user.dashboard_actions) - 1),
|
||||
'xexpand': '1',
|
||||
})
|
||||
root.append(group)
|
||||
first = True
|
||||
for action in user.dashboard_actions:
|
||||
element = cls._dashboard_element_action(action)
|
||||
if first:
|
||||
first = False
|
||||
root.append(element)
|
||||
else:
|
||||
group.append(element)
|
||||
elif user.dashboard_layout == 'stack_bottom':
|
||||
root.set('col', '1')
|
||||
group = etree.Element('group', {
|
||||
'col': str(len(user.dashboard_actions) - 1),
|
||||
'xexpand': '1',
|
||||
})
|
||||
first = True
|
||||
for action in user.dashboard_actions:
|
||||
element = cls._dashboard_element_action(action)
|
||||
if first:
|
||||
first = False
|
||||
root.append(element)
|
||||
else:
|
||||
group.append(element)
|
||||
root.append(group)
|
||||
arch = etree.tostring(tree, encoding='utf-8').decode('utf-8')
|
||||
return arch
|
||||
|
||||
@classmethod
|
||||
def read(cls, ids, fields_names):
|
||||
res = super().read(ids, fields_names)
|
||||
if Transaction().user == 0:
|
||||
return res
|
||||
dashboard_id = cls.dashboard_id()
|
||||
if fields_names is None \
|
||||
or 'arch' in fields_names:
|
||||
if dashboard_id in ids:
|
||||
for res2 in res:
|
||||
if res2['id'] == dashboard_id:
|
||||
res2['arch'] = cls.dashboard_view(res2['arch'])
|
||||
return res
|
||||
Reference in New Issue
Block a user