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

125 lines
3.8 KiB
Python

# -*- coding: utf-8 -*-
from odoo import models, fields, api, exceptions
import datetime
from datetime import date, datetime
class AnitaThemeUsers(models.Model):
'''
user theme style setting
'''
_inherit = "res.users"
_description = 'user setting'
setting_id = fields.Many2one(
comodel_name="anita_theme_setting.setting_base",
ondelete="cascade",
string="settings")
@api.model
def save_theme_setting(self, settings):
'''
save settings, create if there is no user info
just use full when the mode is user wide mode
:param settings:
:return:
'''
self.ensure_setting_id()
self.setting_id.write(settings)
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_values()
# 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
def get_theme_setting(self):
'''
get settings
:return:
'''
record = self.env.user
record.ensure_setting_id()
field_names = [name for name, field in record.setting_id._fields.items() if name not in [
"icon128x128", "icon144x144", "icon152x152", "icon192x192", "icon256x256", "icon512x512"]]
result = record.setting_id.read(fields=field_names)[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.users, {user_id}'.format(user_id=self.id)
self.env["anita_theme_setting.theme_mode"].check_default_mode_data(owner)
@api.model
def get_user_xml_groups(self):
'''
:return:
'''
group_ids = self.env.user.groups_id.ids
records = self.env['ir.model.data']\
.sudo() \
.search_read([('model', '=', 'res.groups'),
('res_id', 'in', group_ids)], fields=["complete_name"])
return {record["complete_name"]: True for record in records}
def get_mode_domain(self):
"""
get mode domain dynamic
:return:
"""
owner = 'res.users, {user_id}'.format(user_id=self.id)
return [('owner', '=', owner)]
@api.model
def get_group_infos(self):
'''
:return:
'''
group_ids = self.env.user.groups_id.ids
records = self.env['ir.model.data']\
.sudo() \
.search_read(
[('model', '=', 'res.groups'),
('res_id', 'in', group_ids)],
fields=["complete_name"])
groups = {record["complete_name"]: True for record in records}
return {
"groups": groups,
"group_ids": group_ids,
"user_id": self.env.user.id
}