Files
gzth/anita_theme_setting/models/anita_company.py
T
2024-06-20 13:39:24 +08:00

131 lines
3.9 KiB
Python

# -*- coding: utf-8 -*-
from odoo import fields, models, exceptions
import base64
from datetime import date, datetime
from odoo.tools.misc import file_path
class AnitaCompany(models.Model):
'''
extend to support current mode and current style
'''
_inherit = "res.company"
_name = 'res.company'
setting_id = fields.Many2one(
comodel_name="anita_theme_setting.setting_base",
ondelete="cascade",
string="setting id")
def _get_default_favicon_icon(self):
"""
get default favicon icon form static path
"""
tmp_path = file_path('anita_theme_setting/static/src/img/favicon.png')
return base64.b64encode(open(tmp_path, 'rb').read())
favicon_icon = fields.Binary(
string='Web Favicon Icon', default='_get_default_favicon_icon')
def _get_default_small_logo(self):
'''
get the default small logo
:return:
'''
tmp_path = file_path('anita_theme_setting/static/src/img/res_small_logo.png')
return base64.b64encode(open(tmp_path, 'rb').read())
logo_small = fields.Binary(
default=_get_default_small_logo, string="Company Small Logo")
def get_mode_data(self):
'''
get mode data
:return:
'''
owner = 'res.company, {company_id}'.format(
company_id=self.env.user.company_id)
self.env["anita_theme_setting.theme_mode"].check_default_mode_data(owner)
return self.env["anita_theme_setting.theme_mode"].get_mode_data()
def get_mode_domain(self):
"""
get mode domain dynamic
:return:
"""
owner = 'res.company, {company_id}'.format(
company_id=self.env.user.company_id.id)
return [('owner', '=', owner)]
def get_company_mode_data(self):
'''
get company mode data
:return:
'''
return self.get_mode_data()
def ensure_setting_id(self):
'''
check setting id
:return:
'''
self.ensure_one()
if self.setting_id:
return
# copy use the global default data
values = self.env['res.config.settings'].get_theme_settings()
# get fields of anita_theme_setting.setting_base
field_names = [name for name, field in self.setting_id._fields.items() if name not in [
'id', 'create_uid', 'create_date', 'write_uid', 'write_date']]
# remove name not in fields
values = {k: v for k, v in values.items() if k in field_names}
del values["current_theme_mode"]
del values["current_theme_style"]
if not self.setting_id:
tmp_record = self.env["anita_theme_setting.setting_base"].create(values)
self.setting_id = tmp_record.id
return self.setting_id
def get_theme_setting(self):
'''
get company setting
:return:
'''
record = self.env.user.company_id
record.ensure_setting_id()
result = record.setting_id.read()[0]
result["current_theme_mode"] = record.setting_id.current_theme_mode.id
result["current_theme_style"] = record.setting_id.current_theme_style.id
for key, item in result.items():
if isinstance(item, datetime):
result[key] = fields.Datetime.to_string(item)
if isinstance(item, date):
result[key] = fields.Date.to_string(item)
return result
def check_default_data(self):
"""
check default data
:return:
"""
# check mode data
owner = 'res.company, {company_id}'.format(company_id=self.id)
self.env["anita_theme_setting.theme_mode"].check_default_mode_data(owner)
def save_theme_setting(self, settings):
'''
save theme setting
:param settings:
:return:
'''
self.ensure_setting_id()
self.setting_id.write(settings)