添加功能

This commit is contained in:
李鹏宇
2025-11-18 15:58:23 +08:00
parent 6e96a8fcae
commit d2248afcc8
+68 -42
View File
@@ -791,17 +791,21 @@ class HrAttendance(models.Model):
else:
record.week = False
def _common_card_remind(self, dept_name=None, planning_name=None, is_check_in=True):
"""
通用打卡提醒函数(全量使用start_datetime)
:param dept_name: 部门名称(如"保安部"),为空则不筛选部门
:param planning_name: 班次名称(如"早班")
:param is_check_in: 是否上班打卡(True=上班,False=下班)
"""
def _common_card_remind(self, dept_name=None, planning_name=None, is_check_in=True, method_name=None):
"""通用打卡提醒函数"""
if not method_name:
return
now = fields.Datetime.now() + timedelta(hours=8)
current_date = fields.Date.today() + timedelta(hours=8)
cron_code = f'{self._name}.{method_name}()'
cron = self.env['ir.cron'].search([('code', '=', cron_code)], limit=1)
next_call = cron.nextcall + timedelta(hours=8)
start_window = next_call - timedelta(minutes=5)
end_window = next_call + timedelta(minutes=5)
if not (start_window <= now <= end_window):
return
slot_start = datetime.combine(current_date, datetime.min.time())
slot_end = datetime.combine(current_date + timedelta(days=1), datetime.min.time())
# 构建查询条件
domain = [
('template_id.planning_name', '=', planning_name),
('start_datetime', '>=', slot_start),
@@ -811,108 +815,130 @@ class HrAttendance(models.Model):
planning_slots = self.env['planning.slot'].search(domain)
for slot in planning_slots:
if is_check_in:
is_card = self.env['hr.attendance'].search([('employee_id', '=', slot.employee_id.id), ('check_in', '!=', False),
('current_data', '=', current_date)
])
is_card = self.env['hr.attendance'].search([('employee_id', '=', slot.employee_id.id), ('check_in', '!=', False), ('current_data', '=', current_date.date())], limit=1)
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', '!=', False),
('current_data', '=', current_date)
])
is_card = self.env['hr.attendance'].search([('employee_id', '=', slot.employee_id.id), ('check_out', '!=', False), ('current_data', '=', current_date.date())], limit=1)
if not is_card:
self.card_out_comment(slot.employee_id, planning_name)
# 保安部 - 早班
def ba_card_white_up(self):
self._common_card_remind(dept_name='保安部', planning_name='早班', is_check_in=True)
self._common_card_remind(dept_name='保安部', planning_name='早班', is_check_in=True,
method_name='ba_card_white_up')
def ba_card_white_down(self):
self._common_card_remind(dept_name='保安部', planning_name='早班', is_check_in=False)
self._common_card_remind(dept_name='保安部', planning_name='早班', is_check_in=False,
method_name='ba_card_white_down')
# 保安部 - 中班
def ba_card_mid_up(self):
self._common_card_remind(dept_name='保安部', planning_name='中班', is_check_in=True)
self._common_card_remind(dept_name='保安部', planning_name='中班', is_check_in=True,
method_name='ba_card_mid_up')
def ba_card_mid_down(self):
self._common_card_remind(dept_name='保安部', planning_name='中班', is_check_in=False)
self._common_card_remind(dept_name='保安部', planning_name='中班', is_check_in=False,
method_name='ba_card_mid_down')
# 保安部 - 夜班
def ba_card_night_up(self):
self._common_card_remind(dept_name='保安部', planning_name='夜班', is_check_in=True)
self._common_card_remind(dept_name='保安部', planning_name='夜班', is_check_in=True,
method_name='ba_card_night_up')
def ba_card_night_down(self):
self._common_card_remind(dept_name='保安部', planning_name='夜班', is_check_in=False)
self._common_card_remind(dept_name='保安部', planning_name='夜班', is_check_in=False,
method_name='ba_card_night_down')
# 保安部 - 旧晚(旧区府晚班
# 保安部 - 旧晚(旧区府晚班)
def ba_card_old_night_up(self):
self._common_card_remind(dept_name='保安部', planning_name='旧晚(旧区府晚班)', is_check_in=True,)
self._common_card_remind(dept_name='保安部', planning_name='旧晚(旧区府晚班)', is_check_in=True,
method_name='ba_card_old_night_up')
def ba_card_old_night_down(self):
self._common_card_remind(dept_name='保安部', planning_name='旧晚(旧区府晚班)', is_check_in=False)
self._common_card_remind(dept_name='保安部', planning_name='旧晚(旧区府晚班)', is_check_in=False,
method_name='ba_card_old_night_down')
# 保安部 - 旧白(旧区府白班)
def ba_card_old_white_up(self):
self._common_card_remind(dept_name='保安部', planning_name='旧白(旧区府白班)', is_check_in=True)
self._common_card_remind(dept_name='保安部', planning_name='旧白(旧区府白班)', is_check_in=True,
method_name='ba_card_old_white_up')
def ba_card_old_white_down(self):
self._common_card_remind(dept_name='保安部', planning_name='旧白(旧区府白班)', is_check_in=False)
self._common_card_remind(dept_name='保安部', planning_name='旧白(旧区府白班)', is_check_in=False,
method_name='ba_card_old_white_down')
# 工程部 - 白班
def gc_white_in_remind(self):
self._common_card_remind(dept_name='工程部', planning_name='白班', is_check_in=True)
self._common_card_remind(dept_name='工程部', planning_name='白班', is_check_in=True,
method_name='gc_white_in_remind')
def gc_white_out_remind(self):
self._common_card_remind(dept_name='工程部', planning_name='白班', is_check_in=False)
self._common_card_remind(dept_name='工程部', planning_name='白班', is_check_in=False,
method_name='gc_white_out_remind')
# 工程部 - 白值
def gc_white_remind_in(self):
self._common_card_remind(dept_name='工程部', planning_name='白值', is_check_in=True)
self._common_card_remind(dept_name='工程部', planning_name='白值', is_check_in=True,
method_name='gc_white_remind_in')
def gc_white_remind_out(self):
self._common_card_remind(dept_name='工程部', planning_name='白值', is_check_in=False)
self._common_card_remind(dept_name='工程部', planning_name='白值', is_check_in=False,
method_name='gc_white_remind_out')
# 工程部 - 中夜
def gc_night_remind_in(self):
self._common_card_remind(dept_name='工程部', planning_name='中夜', is_check_in=True)
self._common_card_remind(dept_name='工程部', planning_name='中夜', is_check_in=True,
method_name='gc_night_remind_in')
def gc_night_remind_out(self):
self._common_card_remind(dept_name='工程部', planning_name='中夜', is_check_in=False)
self._common_card_remind(dept_name='工程部', planning_name='中夜', is_check_in=False,
method_name='gc_night_remind_out')
# 工程部 - 旧晚(旧区府晚班
# 工程部 - 旧晚(旧区府晚班)
def card_old_night_remind_in(self):
self._common_card_remind(dept_name='工程部', planning_name='旧晚(旧区府晚班)', is_check_in=True)
self._common_card_remind(dept_name='工程部', planning_name='旧晚(旧区府晚班)', is_check_in=True,
method_name='card_old_night_remind_in')
def card_old_night_remind_out(self):
self._common_card_remind(dept_name='工程部', planning_name='旧晚(旧区府晚班)', is_check_in=False)
self._common_card_remind(dept_name='工程部', planning_name='旧晚(旧区府晚班)', is_check_in=False,
method_name='card_old_night_remind_out')
# 工程部 - 旧白(旧区府白班)
def card_old_day_remind_in(self):
self._common_card_remind(dept_name='工程部', planning_name='旧白(旧区府白班)', is_check_in=True)
self._common_card_remind(dept_name='工程部', planning_name='旧白(旧区府白班)', is_check_in=True,
method_name='card_old_day_remind_in')
def card_old_day_remind_out(self):
self._common_card_remind(dept_name='工程部', planning_name='旧白(旧区府白班)', is_check_in=False)
self._common_card_remind(dept_name='工程部', planning_name='旧白(旧区府白班)', is_check_in=False,
method_name='card_old_day_remind_out')
# 粮储-白班
def card_lc_remind_in(self):
self._common_card_remind(dept_name='联安粮库', planning_name='白班', is_check_in=True)
self._common_card_remind(dept_name='联安粮库', planning_name='白班', is_check_in=True,
method_name='card_lc_remind_in')
def card_lc_remind_out(self):
self._common_card_remind(dept_name='联安粮库', planning_name='白班', is_check_in=False)
self._common_card_remind(dept_name='联安粮库', planning_name='白班', is_check_in=False,
method_name='card_lc_remind_out')
# 粮储-值班(白值)
def card_lc_shift_remind_in(self):
self._common_card_remind(dept_name='联安粮库', planning_name='白值', is_check_in=True)
self._common_card_remind(dept_name='联安粮库', planning_name='白值', is_check_in=True,
method_name='card_lc_shift_remind_in')
def card_lc_shift_remind_out(self):
self._common_card_remind(dept_name='联安粮库', planning_name='白值', is_check_in=False)
self._common_card_remind(dept_name='联安粮库', planning_name='白值', is_check_in=False,
method_name='card_lc_shift_remind_out')
# 保安计划行政
def card_lc_shift_remind_on_administrative(self):
self._common_card_remind(dept_name='保安部', planning_name='保安计划行政', is_check_in=True)
self._common_card_remind(dept_name='保安部', planning_name='保安计划行政', is_check_in=True,
method_name='card_lc_shift_remind_on_administrative')
def card_lc_shift_remind_out_administrative(self):
self._common_card_remind(dept_name='保安部', planning_name='保安计划行政', is_check_in=False)
self._common_card_remind(dept_name='保安部', planning_name='保安计划行政', is_check_in=False,
method_name='card_lc_shift_remind_out_administrative')
def card_in_comment(self, employee_id, planning_name):
data = f"您的班次是{planning_name},还有5分钟上班,记得打卡"