84 lines
2.8 KiB
Python
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
|