Merge pull request !8424 from 李鹏宇/dev
This commit is contained in:
李鹏宇
2026-01-28 08:51:39 +00:00
committed by Gitee
@@ -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})