Files
gzth/search_panel_extension/models/models.py
T
2025-02-24 17:24:14 +08:00

64 lines
2.5 KiB
Python

from odoo import models, _, api
class Base(models.AbstractModel):
_inherit = 'base'
@api.model
def search_panel_select_all_multi_range(self, field_name, **kwargs):
res = self.search_panel_select_multi_range(field_name, **kwargs)
field_range = res['values']
field = self._fields[field_name]
if field.type == 'selection':
return { 'values': field_range, }
Comodel = self.env.get(field.comodel_name).with_context(hierarchical_naming=False)
limit = kwargs.get('limit')
enable_counters = kwargs.get('enable_counters')
group_by = kwargs.get('group_by')
field_names = ['display_name']
if group_by:
id_list = [record['id'] for record in field_range]
id_set = set(id_list)
group_set = set([record['group_id'] for record in field_range])
need_add_group_set = group_set - id_set
group_by_field = Comodel._fields[group_by]
field_names.append(group_by)
if group_by_field.type == 'many2one':
def group_id_name(value):
return value or (False, _("Not Set"))
elif group_by_field.type == 'selection':
desc = Comodel.fields_get([group_by])[group_by]
group_by_selection = dict(desc['selection'])
group_by_selection[False] = _("Not Set")
def group_id_name(value):
return value, group_by_selection[value]
else:
def group_id_name(value):
return (value, value) if value else (False, _("Not Set"))
while True:
if need_add_group_set.__len__() == 0:
break
group_ids = list(need_add_group_set)
need_add_group_set.clear()
comodel_records = Comodel.search_read([('id', 'in', group_ids)], field_names, limit=limit)
for record in comodel_records:
group_id, group_name = group_id_name(record[group_by])
values = {
'id': record['id'],
'display_name': record['display_name'],
'group_id': group_id,
'group_name': group_name, }
if enable_counters:
values['__count'] = 0
field_range.append(values)
if group_id and group_id not in id_list:
need_add_group_set.add(group_id)
return { 'values': field_range, }