diff --git a/web_company_color/__manifest__.py b/web_company_color/__manifest__.py index e73cf17e5..726ae7761 100644 --- a/web_company_color/__manifest__.py +++ b/web_company_color/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Web Company Color", "category": "web", - "version": "14.0.1.0.0", + "version": "15.0.1.0.0", "author": "Alexandre Díaz, Odoo Community Association (OCA)", "website": "https://github.com/OCA/web", "depends": ["web", "base_sparse_field"], diff --git a/web_company_color/models/assetsbundle.py b/web_company_color/models/assetsbundle.py index 2f2ce0083..aec30736c 100644 --- a/web_company_color/models/assetsbundle.py +++ b/web_company_color/models/assetsbundle.py @@ -1,14 +1,22 @@ # Copyright 2020 Alexandre Díaz # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from odoo.http import request + from odoo.addons.base.models.assetsbundle import AssetsBundle, ScssStylesheetAsset class AssetsBundleCompanyColor(AssetsBundle): def get_company_color_asset_node(self): """Process the user active company scss and returns the node to inject""" - company_id = self.env["res.company"].browse( - self.env.context.get("active_company_id", 0) + try: + active_company_id = int( + request.httprequest.cookies.get("cids", "").split(",")[0] + ) + except Exception: + active_company_id = False + company_id = ( + self.env["res.company"].browse(active_company_id) or self.env.company ) asset = ScssStylesheetAsset(self, url=company_id.scss_get_url()) compiled = self.compile_css(asset.compile, asset.get_source()) - return ("style", {}, compiled) + return "style", {}, compiled diff --git a/web_company_color/models/ir_qweb.py b/web_company_color/models/ir_qweb.py index f43c5aace..1b8a627b8 100644 --- a/web_company_color/models/ir_qweb.py +++ b/web_company_color/models/ir_qweb.py @@ -1,86 +1,40 @@ # Copyright 2020 Alexandre Díaz # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from inspect import unwrap - -from odoo import api, models, tools -from odoo.http import request - -from odoo.addons.base.models.ir_qweb import IrQWeb +from odoo import models from .assetsbundle import AssetsBundleCompanyColor -# Monkey Patch to change the ormcache_context decorator of '_get_asset_nodes' to -# add 'active_company_id' context key. This is done to avoid "clear_caches" usage -# that works in a more aggressive way to the LRU cache. - -_orig_get_asset_nodes = unwrap(IrQWeb._get_asset_nodes) - - -@tools.conditional( - "xml" not in tools.config["dev_mode"], - tools.ormcache_context( - "xmlid", - 'options.get("lang", "en_US")', - "css", - "js", - "debug", - "async_load", - "defer_load", - "lazy_load", - keys=("website_id", "active_company_id"), - ), -) -def _get_asset_nodes__mp( - self, - xmlid, - options, - css=True, - js=True, - debug=False, - async_load=False, - defer_load=False, - lazy_load=False, - values=None, -): - return _orig_get_asset_nodes( - self, - xmlid, - options, - css=css, - js=js, - debug=debug, - async_load=async_load, - defer_load=defer_load, - lazy_load=lazy_load, - values=values, - ) - - -IrQWeb._get_asset_nodes = _get_asset_nodes__mp - class QWeb(models.AbstractModel): _inherit = "ir.qweb" - @api.model - def _render(self, id_or_xml_id, values=None, **options): - """Adds the active company to the context""" - try: - active_company_id = int( - request.httprequest.cookies.get("cids", "").split(",")[0] - ) - except Exception: - active_company_id = False - company_id = ( - self.env["res.company"].browse(active_company_id) - or self.env.user.company_id + def _generate_asset_nodes_cache( + self, + bundle, + css=True, + js=True, + debug=False, + async_load=False, + defer_load=False, + lazy_load=False, + media=None, + ): + res = super()._generate_asset_nodes( + bundle, css, js, debug, async_load, defer_load, lazy_load, media ) - self = self.with_context(active_company_id=company_id.id) - return super()._render(id_or_xml_id, values=values, **options) + if bundle == "web_company_color.company_color_assets": + asset = AssetsBundleCompanyColor( + bundle, [], env=self.env, css=True, js=True + ) + res += [asset.get_company_color_asset_node()] + return res - def _get_asset_content(self, xmlid, options): - """Handle 'special' web_company_color xmlid""" - if xmlid == "web_company_color.company_color_assets": - asset = AssetsBundleCompanyColor(xmlid, [], env=self.env) - return ([], [asset.get_company_color_asset_node()]) - return super()._get_asset_content(xmlid, options) + def _get_asset_content( + self, bundle, nodeAttrs=None, defer_load=False, lazy_load=False + ): + """Handle 'special' web_company_color bundle""" + if bundle == "web_company_color.company_color_assets": + return [], [] + return super()._get_asset_content( + bundle, nodeAttrs, defer_load=defer_load, lazy_load=lazy_load + ) diff --git a/web_company_color/readme/CONTRIBUTORS.rst b/web_company_color/readme/CONTRIBUTORS.rst index 71df9a76b..4159a702b 100644 --- a/web_company_color/readme/CONTRIBUTORS.rst +++ b/web_company_color/readme/CONTRIBUTORS.rst @@ -1,5 +1,6 @@ * Jordi Ballester Alomar (ForgeFlow) -* Lois Rilo (ForgeFlow) +* Lois Rilo (ForgeFlow) * Simone Orsi * Jairo Llopis * Iván Antón +* Bernat Puig (ForgeFlow)