@@ -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})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user