添加功能
This commit is contained in:
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user