131 lines
3.9 KiB
Python
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)
|