Merge pull request !3498 from 李鹏宇/dev
This commit is contained in:
李鹏宇
2025-06-24 01:57:13 +00:00
committed by Gitee
+31 -39
View File
@@ -437,60 +437,52 @@ class HolidaysRequestBatch(models.Model):
@api.onchange('leave_ids', 'hour_leave_ids', 'employee_id')
def _onchange_leave_dates(self):
# 初始化变量
all_dates = []
total_days = 0
first_hour_leave = self.hour_leave_ids[0] if self.hour_leave_ids else None
# 收集所有日期并计算总天数
for leave in self.leave_ids:
if leave.request_date_from:
all_dates.append(leave.request_date_from)
if leave.request_date_to:
all_dates.append(leave.request_date_to)
total_days += leave.number_of_days_display if hasattr(leave, 'number_of_days_display') else 0
for line in self.hour_leave_ids:
if line.request_date_from:
all_dates.append(line.request_date_from)
if all_dates:
self.start_date = min(all_dates)
self.end_date = max(all_dates)
else:
self.start_date = False
self.end_date = False
# 设置开始和结束日期
self.start_date = min(all_dates) if all_dates else False
self.end_date = max(all_dates) if all_dates else False
if self.employee_id:
if self.hour_leave_ids and not self.leave_ids:
# 只按小时请假的情况
first_hour_leave = self.hour_leave_ids[0]
date_str = first_hour_leave.request_date_from.strftime('%Y-%m-%d')
hours = first_hour_leave.number_of_hours_text if first_hour_leave.number_of_hours_text else 0
title = f"{self.employee_id.name}的休假 {date_str}"
if hours:
title += f"共计{hours}"
self.name = title
elif self.leave_ids and not self.hour_leave_ids:
# 只按天请假的情况
start_date_str = self.start_date.strftime('%Y-%m-%d')
end_date_str = self.end_date.strftime('%Y-%m-%d')
self.name = f"{self.employee_id.name}的请假 {start_date_str}~{end_date_str}共计{int(total_days)}天"
elif self.leave_ids and self.hour_leave_ids:
# 混合请假的情况
start_date_str = self.start_date.strftime('%Y-%m-%d')
end_date_str = self.end_date.strftime('%Y-%m-%d')
first_hour_leave = self.hour_leave_ids[0]
hours = first_hour_leave.number_of_hours_text if first_hour_leave.number_of_hours_text else 0
title = f"{self.employee_id.name}的请假 {start_date_str}~{end_date_str}共计{int(total_days)}天"
if hours:
title += f"{hours}"
self.name = title
else:
self.name = f"{self.employee_id.name}"
else:
self.name = ""
self.days = 0
# 计算小时请假的天数
hours_days = 0
for line in self.hour_leave_ids:
match = re.search(r'(\d+(?:\.\d+)?)', line.number_of_hours_text or '')
self.days += float(match.group(1)) / 8 if match else 0
for leave in self.leave_ids:
self.days += leave.number_of_days
hours_days += float(match.group(1)) / 8 if match else 0
self.days = total_days + hours_days
# 生成名称
if self.employee_id:
name_parts = [f"{self.employee_id.name}的"]
if self.start_date and self.end_date:
date_part = f"{self.start_date.strftime('%Y-%m-%d')}~{self.end_date.strftime('%Y-%m-%d')}"
name_parts.append(date_part)
if self.leave_ids:
name_parts.append(f"共计{int(total_days)}天")
if first_hour_leave and first_hour_leave.number_of_hours_text:
name_parts.append(first_hour_leave.number_of_hours_text)
self.name = " ".join(name_parts)
else:
self.name = ""
@api.depends('users_id')