diff --git a/yuthon_hr_attendance/models/yuthon_overtime_line.py b/yuthon_hr_attendance/models/yuthon_overtime_line.py index 0d3e0cae1..3a21a184c 100644 --- a/yuthon_hr_attendance/models/yuthon_overtime_line.py +++ b/yuthon_hr_attendance/models/yuthon_overtime_line.py @@ -32,7 +32,29 @@ class YuthonOvertimeLine(models.Model): @api.depends('last_balance', 'remainder_year') def _compute_vacation_sum(self): for rec in self: - rec.vacation_sum = rec.last_balance + rec.remainder_year + current_year = int(self.select_year) + current_month = int(self.select_month) + next_month = current_month + 1 if current_month < 12 else 1 + next_year = current_year if current_month < 12 else current_year + 1 + cutoff_date_last = date(next_year, next_month, 1) - timedelta(days=1) + cutoff_dt = datetime.combine(cutoff_date_last, datetime.max.time()) + dec_2025_end = datetime(2025, 12, 31, 23, 59, 59) + if self.employee_id.company_id.name == '集团本部': + domain = [ + ('employee_id', '=', self.employee_id.id), + ('carry_forward_state', '!=', 'completed'), + '|', + ('is_initial_number', '=', True), + '&', ('is_initial_number', '=', False), + '&', ('update_type', '=', 'add'), + '&', ('workflow_record_id', '!=', False), + '&', ('start_time', '>=', dec_2025_end), + '&', ('vacation_id', '!=', False), + ('start_time', '<', cutoff_dt) + ] + over_ids = self.env['vacation.over.line'].search(domain) + for over_id in over_ids: + self.vacation_sum += over_id.remaining_quantity def open_record(self): self.ensure_one() @@ -43,11 +65,6 @@ class YuthonOvertimeLine(models.Model): cutoff_date_last = date(next_year, next_month, 1) - timedelta(days=1) cutoff_dt = datetime.combine(cutoff_date_last, datetime.max.time()) dec_2025_end = datetime(2025, 12, 31, 23, 59, 59) - domain = [ - ('start_time', '<', cutoff_dt), - ('remaining_quantity', '!=', 0.0), - ('employee_id', '=', self.employee_id.id) - ] if self.employee_id.company_id.name == '集团本部': domain = [ ('employee_id', '=', self.employee_id.id), @@ -62,16 +79,16 @@ class YuthonOvertimeLine(models.Model): ('start_time', '<', cutoff_dt) ] - tree_id = self.env.ref("yuthon_hr_attendance.view_yuthon_vacation_overtime_tree").id - return { - 'views': [[tree_id, 'tree']], - 'name': f'加班明细', - 'type': 'ir.actions.act_window', - 'res_model': 'vacation.over.line', - 'view_mode': 'tree,form', - 'domain': domain, - 'target': 'current' - } + tree_id = self.env.ref("yuthon_hr_attendance.view_yuthon_vacation_overtime_tree").id + return { + 'views': [[tree_id, 'tree']], + 'name': f'加班明细', + 'type': 'ir.actions.act_window', + 'res_model': 'vacation.over.line', + 'view_mode': 'tree,form', + 'domain': domain, + 'target': 'current' + } def overtime_wizard(self): overtime_ids = self.env["yuthon.overtime.line"].browse(