添加功能
This commit is contained in:
@@ -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分钟上班,记得打卡"
|
||||
|
||||
Reference in New Issue
Block a user