3
0
Fork 0

[FIX] web_dashboard_tile : previous improvment introduced a regression due to the domain [('hidden', '=', False)] because it call the _compute_data for all the tiles, even if we want to display the tiles of a single category.

12.0
Sylvain LE GAL 2023-04-06 15:51:18 +02:00
parent 16575bf76b
commit 06aa3ee581
5 changed files with 75 additions and 2 deletions

View File

@ -4,7 +4,7 @@
{
"name": "Overview Dashboard (Tiles)",
"summary": "Add Overview Dashboards with Tiles",
"version": "12.0.1.0.2",
"version": "12.0.2.0.0",
"depends": ["web", "board", "mail", "web_widget_color"],
"author": "initOS GmbH & Co. KG, "
"GRAP, "

View File

@ -0,0 +1,25 @@
# Copyright (C) 2023-Today: GTRAP (<http://www.grap.coop/>)
# @author: Sylvain LE GAL (https://twitter.com/legalsylvain)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
import logging
import odoo
_logger = logging.getLogger(__name__)
def migrate(cr, version):
if not version:
return
with odoo.api.Environment.manage():
env = odoo.api.Environment(cr, odoo.SUPERUSER_ID, {})
for category in env["tile.category"].search([]):
_logger.info(
"Rewrite domain and context for the action"
" related to the tile category %s" % category.name
)
vals = category._prepare_action()
category.action_id.write({
"domain": vals["domain"],
"context": vals["context"],
})

View File

@ -0,0 +1,38 @@
# Copyright (C) 2023-Today: GRAP (<http://www.grap.coop/>)
# @author: Sylvain LE GAL (https://twitter.com/legalsylvain)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
import logging
from openupgradelib import openupgrade
logger = logging.getLogger(__name__)
@openupgrade.migrate()
def migrate(env, version):
if not version:
return
cr = env.cr
if openupgrade.table_exists(cr, "pos_config") and openupgrade.column_exists(
cr, "pos_config", "minimum_wallet_amount"
):
cr.execute(
"""
SELECT aj.id, min(pc.minimum_wallet_amount)
FROM account_journal aj
INNER JOIN pos_config_journal_rel ajpc_rel
ON ajpc_rel.journal_id = aj.id
INNER JOIN pos_config pc
ON pc.id = ajpc_rel.pos_config_id
WHERE aj.is_customer_wallet_journal group by aj.id;
"""
)
for (journal_id, minimum_wallet_amount) in cr.fetchall():
if minimum_wallet_amount:
journal = env["account.journal"].browse(journal_id)
logger.info(
"Initialize minimum_wallet_amount to %s for journal %s (company %s)"
% (minimum_wallet_amount, journal.name, journal.company_id.name)
)
journal.minimum_wallet_amount = minimum_wallet_amount

View File

@ -40,13 +40,16 @@ class TileCategory(models.Model):
def _prepare_action(self):
self.ensure_one()
# Do not write domain [('hidden', '=', False)]
# to avoid to call _compute_data on all tiles
# see tile_tile.search()
return {
'name': self.name,
'res_model': 'tile.tile',
'type': 'ir.actions.act_window',
'view_mode': 'kanban',
'context': "{'no_hidden_tiles': True}",
'domain': """[
('hidden', '=', False),
'|', ('user_id', '=', False), ('user_id', '=', uid),
('category_id', '=', {self.id})
]""".format(self=self),

View File

@ -185,6 +185,13 @@ class TileTile(models.Model):
error = fields.Char(string="Error Details", compute="_compute_data")
def search(self, args, offset=0, limit=None, order=None, count=False):
res = super().search(args, offset=offset, limit=limit, order=order, count=count)
if self.env.context.get("no_hidden_tiles", False):
# late research on the hidden field.
return res.filtered(lambda x: not x.hidden)
return res
# Compute Section
@api.depends("primary_format", "secondary_format", "model_id", "domain")
def _compute_data(self):