Files
web/web_dashboard_tile/models/tile_category.py
Sylvain LE GAL dd52e48dce [MIG] web_dashboard_tile from 12.0 to 16.0
- remove 12.0 migration scripts
- bump version to 16.0
- use new api convention @api.model_create_multi ; new compute function logic ;
- add dependency to spreasheet_dashboard to use 'Dashboard' main menu item
- use new way to include assets
- remove totally useless controllers
- distinct different errors, depending on domain or format errors
- fix : _compute_data depends on many fields
- update : documentation and printscreens
2022-10-27 00:00:26 +02:00

108 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_create_multi
def create(self, vals_list):
categories = super().create(vals_list)
categories.filtered(lambda x: x.active)._create_ui()
return categories
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()
return super().unlink()