diff --git a/yuthon_hr_attendance/models/yuthon_vacation_reports.py b/yuthon_hr_attendance/models/yuthon_vacation_reports.py index 34ca1af86..8e2657b43 100644 --- a/yuthon_hr_attendance/models/yuthon_vacation_reports.py +++ b/yuthon_hr_attendance/models/yuthon_vacation_reports.py @@ -26,8 +26,8 @@ class YuthonVacationReports(models.Model): year_distribution = fields.Float(string="本年发放", digits=(16, 3)) used_this_year = fields.Float(string="本年已用", digits=(16, 3)) remainder_year = fields.Float(string="剩余(年假)", digits=(16, 3), compute="_compute_remainder_year") - last_holiday = fields.Float(string="上年公休日", digits=(16, 3)) - last_workday = fields.Float(string="上年工作日", digits=(16, 3)) + last_holiday = fields.Float(string="上年公休日", digits=(16, 3)) # 固定值 + last_workday = fields.Float(string="上年工作日", digits=(16, 3)) # 固定值 valid_date1 = fields.Date(string="有效期至") year_holiday = fields.Float(string="本年公休日", digits=(16, 3)) year_workday = fields.Float(string="本年工作日", digits=(16, 3)) @@ -1547,40 +1547,6 @@ class VacationOverline(models.Model): next_month_first_day = current_vacation_date + relativedelta(months=+1, day=1) if not vacation_main or deduct_amount <= 0: return - - # ========== 核心新增逻辑:优先级扣减规则 ========== - # 1. 先判断上年数据是否有效(valid_date1 有效期内,无则视为无限期) - is_last_valid = True - if vacation_main.valid_date1: - is_last_valid = date.today() <= vacation_main.valid_date1 # 仅有效期内的上年数据可扣减 - - # 2. 初始化待扣减剩余量 - remain_deduct = deduct_amount - - # 3. 优先扣减上年工作日(last_holiday) - if is_last_valid and vacation_main.last_workday > 0: - deduct_workday = min(remain_deduct, vacation_main.last_workday) - vacation_main.write({'last_workday': vacation_main.last_workday - deduct_workday}) - remain_deduct -= deduct_workday - - # 4. 剩余扣减金额扣减公休日(last_holiday) - if remain_deduct > 0 and is_last_valid and vacation_main.last_holiday > 0: - deduct_holiday = min(remain_deduct, vacation_main.last_holiday) - vacation_main.write({'last_holiday': vacation_main.last_holiday - deduct_holiday}) - remain_deduct -= deduct_holiday - - # 5. 上年数据扣减完仍有剩余 → 扣减本年工作日(year_workday) - if remain_deduct > 0 and vacation_main.year_workday > 0: - deduct_year_workday = min(remain_deduct, vacation_main.year_workday) - vacation_main.write({'year_workday': vacation_main.year_workday - deduct_year_workday}) - remain_deduct -= deduct_year_workday - - # 6. 最后扣减本年公休日(year_holiday) - if remain_deduct > 0 and vacation_main.year_holiday > 0: - deduct_year_holiday = min(remain_deduct, vacation_main.year_holiday) - vacation_main.write({'year_holiday': vacation_main.year_holiday - deduct_year_holiday}) - remain_deduct -= deduct_year_holiday - used_this_year_new = vacation_main.used_this_year1 + deduct_amount vacation_main.write({'used_this_year1': used_this_year_new})