community_themes/muk_web_enterprise_theme/models/res_config_settings.py

188 lines
5.8 KiB
Python
Raw Normal View History

2025-07-19 01:29:09 +07:00
from odoo import api, fields, models
class ResConfigSettings(models.TransientModel):
_inherit = 'res.config.settings'
@property
def THEME_COLOR_FIELDS(self):
return [
'color_appbar_text',
'color_appbar_active',
'color_appbar_background',
]
@property
def COLOR_ASSET_THEME_LIGHT_URL(self):
return '/muk_web_enterprise_theme/static/src/scss/colors_light.scss'
@property
def COLOR_BUNDLE_THEME_LIGHT_NAME(self):
return 'web._assets_primary_variables'
@property
def COLOR_ASSET_THEME_DARK_URL(self):
return '/muk_web_enterprise_theme/static/src/scss/colors_dark.scss'
@property
def COLOR_BUNDLE_THEME_DARK_NAME(self):
return 'web.assets_web_dark'
#----------------------------------------------------------
# Fields
#----------------------------------------------------------
theme_favicon = fields.Binary(
related='company_id.favicon',
readonly=False
)
theme_background_image_light = fields.Binary(
related='company_id.background_image_light',
readonly=False
)
theme_background_image_dark = fields.Binary(
related='company_id.background_image_dark',
readonly=False
)
theme_color_appbar_text_light = fields.Char(
string='AppsBar Text Light Color'
)
theme_color_appbar_active_light = fields.Char(
string='AppsBar Active Light Color'
)
theme_color_appbar_background_light = fields.Char(
string='AppsBar Background Light Color'
)
theme_color_appbar_text_dark = fields.Char(
string='AppsBar Text Dark Color'
)
theme_color_appbar_active_dark = fields.Char(
string='AppsBar Active Dark Color'
)
theme_color_appbar_background_dark = fields.Char(
string='AppsBar Background Dark Color'
)
#----------------------------------------------------------
# Helper
#----------------------------------------------------------
def _get_light_theme_color_values(self):
return self.env['web_editor.assets'].get_color_variables_values(
self.COLOR_ASSET_THEME_LIGHT_URL,
self.COLOR_BUNDLE_THEME_LIGHT_NAME,
self.THEME_COLOR_FIELDS
)
def _get_dark_theme_color_values(self):
return self.env['web_editor.assets'].get_color_variables_values(
self.COLOR_ASSET_THEME_DARK_URL,
self.COLOR_BUNDLE_THEME_DARK_NAME,
self.THEME_COLOR_FIELDS
)
def _set_light_theme_color_values(self, values):
colors = self._get_light_theme_color_values()
for var, value in colors.items():
values[f'theme_{var}_light'] = value
return values
def _set_dark_theme_color_values(self, values):
colors = self._get_dark_theme_color_values()
for var, value in colors.items():
values[f'theme_{var}_dark'] = value
return values
def _detect_light_theme_color_change(self):
colors = self._get_light_theme_color_values()
return any(
self[f'theme_{var}_light'] != val
for var, val in colors.items()
)
def _detect_dark_theme_color_change(self):
colors = self._get_dark_theme_color_values()
return any(
self[f'theme_{var}_dark'] != val
for var, val in colors.items()
)
def _replace_light_theme_color_values(self):
variables = [
{
'name': field,
'value': self[f'theme_{field}_light']
}
for field in self.THEME_COLOR_FIELDS
]
return self.env['web_editor.assets'].replace_color_variables_values(
self.COLOR_ASSET_THEME_LIGHT_URL,
self.COLOR_BUNDLE_THEME_LIGHT_NAME,
variables
)
def _replace_dark_theme_color_values(self):
variables = [
{
'name': field,
'value': self[f'theme_{field}_dark']
}
for field in self.THEME_COLOR_FIELDS
]
return self.env['web_editor.assets'].replace_color_variables_values(
self.COLOR_ASSET_THEME_DARK_URL,
self.COLOR_BUNDLE_THEME_DARK_NAME,
variables
)
def _reset_light_theme_color_assets(self):
self.env['web_editor.assets'].reset_asset(
self.COLOR_ASSET_THEME_LIGHT_URL,
self.COLOR_BUNDLE_THEME_LIGHT_NAME,
)
def _reset_dark_theme_color_assets(self):
self.env['web_editor.assets'].reset_asset(
self.COLOR_ASSET_THEME_DARK_URL,
self.COLOR_BUNDLE_THEME_DARK_NAME,
)
#----------------------------------------------------------
# Action
#----------------------------------------------------------
def action_reset_light_color_assets(self):
self._reset_light_theme_color_assets()
return super().action_reset_light_color_assets()
def action_reset_dark_color_assets(self):
self._reset_dark_theme_color_assets()
return super().action_reset_dark_color_assets()
#----------------------------------------------------------
# Functions
#----------------------------------------------------------
def get_values(self):
res = super().get_values()
res = self._set_light_theme_color_values(res)
res = self._set_dark_theme_color_values(res)
return res
def set_values(self):
res = super().set_values()
if self._detect_light_theme_color_change():
self._replace_light_theme_color_values()
if self._detect_dark_theme_color_change():
self._replace_dark_theme_color_values()
return res