mirror of https://github.com/OCA/web.git
106 lines
3.2 KiB
Python
106 lines
3.2 KiB
Python
# © 2018 Iván Todorovich <ivan.todorovich@gmail.com>
|
|
# © 2019-Today GRAP
|
|
# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
|
|
|
|
from odoo import api, fields, models
|
|
|
|
|
|
class TileCategory(models.Model):
|
|
_name = "tile.category"
|
|
_description = "Dashboard Tile Category"
|
|
_order = "sequence asc"
|
|
|
|
name = fields.Char(required=True)
|
|
|
|
sequence = fields.Integer(required=True, default=10)
|
|
|
|
active = fields.Boolean(default=True)
|
|
|
|
action_id = fields.Many2one(
|
|
string='Odoo Action', comodel_name='ir.actions.act_window',
|
|
readonly=True)
|
|
|
|
menu_id = fields.Many2one(
|
|
string='Odoo Menu', comodel_name='ir.ui.menu', readonly=True)
|
|
|
|
tile_ids = fields.One2many(
|
|
string='Tiles', comodel_name='tile.tile',
|
|
inverse_name='category_id')
|
|
|
|
tile_qty = fields.Integer(
|
|
string='Tiles Quantity',
|
|
compute='_compute_tile_qty',
|
|
store=True,
|
|
)
|
|
|
|
@api.depends('tile_ids')
|
|
def _compute_tile_qty(self):
|
|
for category in self:
|
|
category.tile_qty = len(category.tile_ids)
|
|
|
|
def _prepare_action(self):
|
|
self.ensure_one()
|
|
return {
|
|
'name': self.name,
|
|
'res_model': 'tile.tile',
|
|
'type': 'ir.actions.act_window',
|
|
'view_mode': 'kanban',
|
|
'domain': """[
|
|
('hidden', '=', False),
|
|
'|', ('user_id', '=', False), ('user_id', '=', uid),
|
|
('category_id', '=', {self.id})
|
|
]""".format(self=self),
|
|
}
|
|
|
|
def _prepare_menu(self):
|
|
self.ensure_one()
|
|
return {
|
|
'name': self.name,
|
|
'parent_id': self.env.ref(
|
|
'web_dashboard_tile.menu_dashboard_tile').id,
|
|
'action': 'ir.actions.act_window,%d' % self.action_id.id,
|
|
'sequence': self.sequence,
|
|
}
|
|
|
|
def _create_ui(self):
|
|
IrUiMenu = self.env['ir.ui.menu']
|
|
IrActionsActWindows = self.env['ir.actions.act_window']
|
|
for category in self:
|
|
if not category.action_id:
|
|
category.action_id = IrActionsActWindows.create(
|
|
category._prepare_action())
|
|
if not category.menu_id:
|
|
category.menu_id = IrUiMenu.create(category._prepare_menu())
|
|
|
|
def _delete_ui(self):
|
|
for category in self:
|
|
if category.menu_id:
|
|
category.menu_id.unlink()
|
|
if category.action_id:
|
|
category.action_id.unlink()
|
|
|
|
@api.model
|
|
def create(self, vals):
|
|
category = super().create(vals)
|
|
if category.active:
|
|
category._create_ui()
|
|
return category
|
|
|
|
def write(self, vals):
|
|
res = super().write(vals)
|
|
if 'active' in vals.keys():
|
|
if vals.get('active'):
|
|
self._create_ui()
|
|
else:
|
|
self._delete_ui()
|
|
if 'sequence' in vals.keys():
|
|
self.mapped('menu_id').write({'sequence': vals['sequence']})
|
|
if 'name' in vals.keys():
|
|
self.mapped('menu_id').write({'name': vals['name']})
|
|
self.mapped('action_id').write({'name': vals['name']})
|
|
return res
|
|
|
|
def unlink(self):
|
|
self._delete_ui()
|
|
super().unlink()
|