diff --git a/yuthon_holiday/models/inherit_hr_leave.py b/yuthon_holiday/models/inherit_hr_leave.py index 260f8e426..d6fda29e5 100644 --- a/yuthon_holiday/models/inherit_hr_leave.py +++ b/yuthon_holiday/models/inherit_hr_leave.py @@ -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')