diff --git a/yuthon_hr_employee/models/yuthon_job_lv.py b/yuthon_hr_employee/models/yuthon_job_lv.py index cc95b38ae..9cb68f7eb 100644 --- a/yuthon_hr_employee/models/yuthon_job_lv.py +++ b/yuthon_hr_employee/models/yuthon_job_lv.py @@ -2,6 +2,7 @@ from odoo import api, fields, models, _ from odoo.exceptions import UserError, ValidationError from datetime import datetime +import re class YuthonJobLv(models.Model): @@ -32,16 +33,27 @@ class YuthonJobLv(models.Model): assignment_subsidy = fields.Float(string="作业环境补贴", group_operator=None) temporary_performance = fields.Float(string="临时绩效补贴", group_operator=None) - @api.model def read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True): res = super(YuthonJobLv, self).read_group(domain, fields, groupby, offset=offset, limit=limit, orderby=orderby, lazy=lazy) if 'lv' in groupby: - try: - res.sort( - key=lambda x: int(self.search([('lv', '=', x['lv'])], limit=1).sequence or 0) if x.get('lv') else 0) - except (ValueError, AttributeError): - # 处理 sequence 字段不是数字或不存在的情况 - res.sort(key=lambda x: x.get('lv') or '') # 按 lv 值排序,如果 lv 不存在则使用空字符串 + def sort_by_sequence_number(item): + lv = item.get('lv') + if lv: + rec = self.search([('lv', '=', lv)], limit=1) + if rec and rec.sequence: + match = re.findall(r'\d+', rec.sequence) + if match: + number_str = "".join(match) + try: + number = int(number_str) + return (not number_str.startswith('0'), number) + except ValueError: + return (False, 0) + return (False, 0) # 首位非0的放前面 + + res.sort(key=sort_by_sequence_number) return res + +