议题和流程
This commit is contained in:
@@ -159,7 +159,7 @@ class YuthonMealExpenses(models.Model):
|
||||
return True
|
||||
|
||||
def cron_send_meal_reminder(self):
|
||||
"""定时任务:给状态为已发送且缴费状态为待缴的记录发送缴费提醒"""
|
||||
"""定时任务:给状态为已发送且缴费状态为待缴的记录发送缴费提醒,每人每天只发一次"""
|
||||
# 节假日不发送
|
||||
if not self._is_chinese_workday():
|
||||
self.env['ir.logging'].sudo().create({
|
||||
@@ -172,11 +172,18 @@ class YuthonMealExpenses(models.Model):
|
||||
})
|
||||
return True
|
||||
|
||||
# 每月1号跳过:交给 cron_send_monthly_meal_reminder 处理,避免重复发送
|
||||
if datetime.now().day == 1:
|
||||
return True
|
||||
|
||||
# 找出所有 已发送 且 仍然 待缴 的餐费记录
|
||||
meals = self.sudo().search([
|
||||
('meal_state', '=', 'done'),
|
||||
('toll_state', '=', 'to_do'),
|
||||
])
|
||||
# 按员工去重,每人只发一条
|
||||
sent_employees = set()
|
||||
sent_count = 0
|
||||
for meal in meals:
|
||||
# 如果早餐次数和午餐次数都为0,则不发送提醒
|
||||
if meal.number_breakfasts == 0 and meal.number_lunches == 0:
|
||||
@@ -184,6 +191,9 @@ class YuthonMealExpenses(models.Model):
|
||||
employee = meal.employee_id
|
||||
if not employee or not employee.user_id or not employee.wecom_userid:
|
||||
continue
|
||||
if employee.id in sent_employees:
|
||||
continue
|
||||
sent_employees.add(employee.id)
|
||||
# 和现有手机端餐费链接保持一致
|
||||
url = f'https://phone.thtzjt.com/phone/Meal/{employee.user_id.id}'
|
||||
# 提示文案,按照要求修改
|
||||
@@ -199,6 +209,17 @@ class YuthonMealExpenses(models.Model):
|
||||
url=url,
|
||||
btntxt="详细信息",
|
||||
)
|
||||
sent_count += 1
|
||||
|
||||
# 记录发送日志
|
||||
self.env['ir.logging'].sudo().create({
|
||||
'name': '餐费缴费提醒',
|
||||
'type': 'server',
|
||||
'message': f'成功发送{sent_count}条餐费缴费提醒({len(meals)}条待缴记录,去重后发送{sent_count}人)',
|
||||
'path': __name__,
|
||||
'func': 'cron_send_meal_reminder',
|
||||
'line': 0,
|
||||
})
|
||||
|
||||
def action_generate_missing_feb(self):
|
||||
target_year = '2026'
|
||||
|
||||
Reference in New Issue
Block a user