diff --git a/yuthon_hr_attendance/models/yuthon_overtime_line.py b/yuthon_hr_attendance/models/yuthon_overtime_line.py index 76578f8ae..2bf0485c2 100644 --- a/yuthon_hr_attendance/models/yuthon_overtime_line.py +++ b/yuthon_hr_attendance/models/yuthon_overtime_line.py @@ -22,16 +22,17 @@ class YuthonOvertimeLine(models.Model): valid_date = fields.Date(string="有效至") workday = fields.Float(string='工作日') public_holidays = fields.Float(string='公休日') + remainder_year = fields.Float(string='本年剩余') vacation_sum = fields.Float(string='合计数', compute='_compute_vacation_sum', store=True) - carry_forward_quantity = fields.Float(string="结转时长") + carry_forward_quantity = fields.Float(string="已结转") carry_forward_date = fields.Date(string="结转日期") archive_state = fields.Selection([('to_do', '待归档'), ('done', '已归档')], default='to_do', string='状态') remaining_quantity = fields.Float(string="剩余数") - @api.depends('workday', 'public_holidays', 'carry_forward_quantity') + @api.depends('last_balance', 'remainder_year') def _compute_vacation_sum(self): for rec in self: - rec.vacation_sum = rec.public_holidays + rec.workday + rec.last_balance + rec.vacation_sum = rec.last_balance + rec.remainder_year def open_record(self): self.ensure_one() diff --git a/yuthon_hr_attendance/models/yuthon_vacation_reports.py b/yuthon_hr_attendance/models/yuthon_vacation_reports.py index 21b9ec11b..878dafffe 100644 --- a/yuthon_hr_attendance/models/yuthon_vacation_reports.py +++ b/yuthon_hr_attendance/models/yuthon_vacation_reports.py @@ -1939,14 +1939,21 @@ class YuthonVacationReports(models.Model): @api.model def overtime_line(self): + # 1. 清空历史数据(先删除所有旧记录) self.env['yuthon.overtime.line'].search([]).unlink() + + # 2. 定义时间范围 today = date.today() - last_month_first = (today - relativedelta(months=1)).replace(day=1) - current_month_first = today.replace(day=1) + last_month_first = (today - relativedelta(months=1)).replace(day=1) # 上月1号 + current_month_first = today.replace(day=1) # 本月1号 current_month_first_dt = datetime.combine(current_month_first, datetime.min.time()) dec_2025_end = datetime(2025, 12, 31, 23, 59, 59) + + # 3. 仅处理集团本部的数据 if self.env.user.company_id.name == '集团本部': + # 数据筛选条件 domain = [ + ('employee_id.name', '=', '叶华锋'), '|', ('is_initial_number', '=', True), '&', ('is_initial_number', '=', False), @@ -1955,48 +1962,42 @@ class YuthonVacationReports(models.Model): '&', ('start_time', '>=', dec_2025_end), '&', ('vacation_id', '!=', False), ('start_time', '<', current_month_first_dt), + ('carry_forward_state', '!=', 'completed'), ('employee_id.is_annual_salary', '!=', True) ] all_records = self.env['vacation.over.line'].search(domain) - over_lines = all_records.filtered(lambda r: abs(r.remaining_quantity) > 1e-6) employee_summary = {} - for line in over_lines: + + for line in all_records: emp_id = line.employee_id.id if not emp_id: continue if emp_id not in employee_summary: + report_id = self.env['yuthon.vacation.reports'].search( + [ + ('vacation_date', '=', last_month_first), + ('employee_id', '=', emp_id), + ], + limit=1 # 避免多条记录,只取第一条 + ) employee_summary[emp_id] = { 'employee_id': emp_id, 'valid_date': line.valid_date, - 'workday': 0.0, - 'public_holidays': 0.0, - 'vacation_sum': 0.0, + 'last_balance': report_id.dynamic_previous_year1 * 8 if report_id else 0.0, + 'remainder_year': 0.0, 'carry_forward_quantity': 0.0, 'carry_forward_date': line.carry_forward_date, - 'archive_state': 'done' if line.carry_forward_date else 'to_do', 'select_month': str(last_month_first.month), - 'select_year': str(last_month_first.year) + 'select_year': str(last_month_first.year), } summary = employee_summary[emp_id] - if line.workday: - if line.is_initial_number: - summary['last_balance'] = (line.remaining_quantity or 0.0) - else: - summary['workday'] += line.remaining_quantity or 0.0 - if line.public_holidays: - summary['public_holidays'] += line.remaining_quantity or 0.0 summary['carry_forward_quantity'] += line.carry_forward_quantity or 0.0 - summary['remaining_quantity'] = ( - summary.get('workday', 0.0) + - summary.get('public_holidays', 0.0) + - summary.get('last_balance', 0.0) - ) + summary['remainder_year'] += line.duration or 0.0 create_vals = [] for emp_id, vals in employee_summary.items(): create_vals.append(vals) - if create_vals: self.env['yuthon.overtime.line'].create(create_vals) diff --git a/yuthon_hr_attendance/views/yuthon_overtime_line_views.xml b/yuthon_hr_attendance/views/yuthon_overtime_line_views.xml index a2831682b..d722721e3 100644 --- a/yuthon_hr_attendance/views/yuthon_overtime_line_views.xml +++ b/yuthon_hr_attendance/views/yuthon_overtime_line_views.xml @@ -13,13 +13,12 @@ - - + - - - - + + + +