Files
gzth/yuthon_base/models/ir_model.py
T
2026-02-22 10:18:52 +08:00

84 lines
2.8 KiB
Python

import logging
from odoo import api, fields, models
from odoo.addons.web.models.models import Base
from odoo.osv.expression import AND
_logger = logging.getLogger(__name__)
class IrModelFields(models.Model):
_inherit = 'ir.model.fields'
@api.model
def _is_manual_name(self, name):
return name.startswith('x_') or name.endswith('_pinyin')
class UsersHomeBatchWizard(models.TransientModel):
_name = "users.home.batch.wizard"
_description = "Batch Update User Home"
user_ids = fields.Many2many("res.users", string="选中员工", default=lambda self: self.env.context.get("active_ids", []))
action_id = fields.Many2one('ir.actions.actions', string="动作")
def confirm(self):
for user in self.user_ids:
user.write({'action_id': self.action_id.id})
class InheritBase(models.AbstractModel):
_inherit = 'base'
@api.model
def web_search_read(self, domain, specification, offset=0, limit=None, order=None, count_limit=None):
if default_order := self._context.get('default_order'):
new_order = default_order
try:
res = super().web_search_read(domain, specification, offset, limit, new_order, count_limit)
return res
except Exception as e:
_logger.warning(e)
return super().web_search_read(domain, specification, offset, limit, order, count_limit)
return super().web_search_read(domain, specification, offset, limit, order, count_limit)
@api.model
def _new_search_panel_domain_image(self, field_name, domain, set_count=False, limit=False):
""" 重写增加根据selection的定义顺序返回search_panel筛选结果
"""
field = self._fields[field_name]
if field.type == 'many2one':
def group_id_name(value):
return value
else:
# field type is selection: see doc above
desc = self.fields_get([field_name])[field_name]
field_name_selection = dict(desc['selection'])
def group_id_name(value):
return value, field_name_selection[value]
domain = AND([
domain,
[(field_name, '!=', False)],
])
groups = self.read_group(domain, [field_name], [field_name], limit=limit)
domain_image = {}
for group in groups:
id, display_name = group_id_name(group[field_name])
values = {
'id': id,
'display_name': display_name,
}
if set_count:
values['__count'] = group[field_name + '_count']
domain_image[id] = values
if field.type == 'selection':
sorted_domain_image = dict(sorted(domain_image.items(), key=lambda x: list(field_name_selection.keys()).index(x[0])))
return sorted_domain_image
return domain_image
Base._search_panel_domain_image = _new_search_panel_domain_image