添加功能

This commit is contained in:
李鹏宇
2025-11-17 19:51:42 +08:00
parent 63bf641b8f
commit bd05a0a3c3
+2 -45
View File
@@ -791,13 +791,6 @@ class HrAttendance(models.Model):
else:
record.week = False
def _is_within_10min_by_float(self, base_datetime):
# 计算前后10分钟区间
start_interval = base_datetime - timedelta(minutes=10)
end_interval = base_datetime + timedelta(minutes=10)
current_datetime = datetime.now()
return start_interval <= current_datetime <= end_interval
def _common_card_remind(self, dept_name=None, planning_name=None, is_check_in=True):
"""
通用打卡提醒函数(全量使用start_datetime)
@@ -817,14 +810,13 @@ class HrAttendance(models.Model):
]
planning_slots = self.env['planning.slot'].search(domain)
for slot in planning_slots:
start_datetime, end_datetime = self.normal_clock_in_time(slot.template_id, current_date)
if is_check_in:
is_card = self.env['hr.attendance'].search([('employee_id', '=', slot.employee_id.id), ('check_in', '=', True)])
if self._is_within_10min_by_float(start_datetime) and not is_card:
if not is_card:
self.card_in_comment(slot.employee_id, planning_name)
else:
is_card = self.env['hr.attendance'].search([('employee_id', '=', slot.employee_id.id), ('check_out', '=', True)])
if self._is_within_10min_by_float(end_datetime) and not is_card:
if not is_card:
self.card_out_comment(slot.employee_id, planning_name)
# 保安部 - 早班
@@ -949,41 +941,6 @@ class HrAttendance(models.Model):
except Exception as e:
_logger.error(f"下班打卡提醒发送失败:员工={employee_id.name}, 错误={e}")
def normal_clock_in_time(self, template, current_data):
"""
:param template: 班次模板
:param current_data: 打卡日期
:return: 正常开始上班时间和下班时间
"""
check_in_start = template.start_time
if template.day2 == '次日':
check_out_end = template.end_time2
else:
check_out_end = template.end_time
date = current_data
start_hour = int(check_in_start)
start_minute = int((check_in_start - start_hour) * 60)
end_hour = int(check_out_end)
end_minute = int((check_out_end - end_hour) * 60)
start_datetime = datetime.combine(date, datetime.min.time()).replace(
hour=start_hour, minute=start_minute, second=0, microsecond=0
)
if template.day2 == '次日':
end_datetime = datetime.combine(date, datetime.min.time()).replace(
hour=end_hour, minute=end_minute, second=0, microsecond=0
) + timedelta(days=1)
else:
end_datetime = datetime.combine(date, datetime.min.time()).replace(
hour=end_hour, minute=end_minute, second=0, microsecond=0
)
if template.planning_name == '中夜':
end_datetime = datetime.combine(date, datetime.min.time()).replace(
hour=22, minute=0, second=0, microsecond=0
)
return start_datetime, end_datetime
def update_abnormal(self):
attendance_ids = self.env["hr.attendance"].browse(