添加功能
This commit is contained in:
@@ -15,7 +15,7 @@
|
||||
action="base.ir_cron_act"
|
||||
sequence="5"/>
|
||||
<menuitem id="cron_type_menu_root"
|
||||
name="配置菜单"
|
||||
name="配置"
|
||||
parent="system_version_menu_root_board"
|
||||
sequence="10"/>
|
||||
<menuitem id="ir_cron_type_menu_root"
|
||||
|
||||
@@ -230,74 +230,20 @@ class HrLeave(models.Model):
|
||||
holiday.number_of_hours = hours
|
||||
holiday.number_of_days = days
|
||||
if holiday.holiday_status_id.type_of_work == "0":
|
||||
calendar_leaves = self.env['resource.calendar.leaves'].search([("calendar_id", "=", "行政考勤工作日")])
|
||||
holidays_list = [] # 假期
|
||||
shift_days_list = [] #调休
|
||||
for leaves in calendar_leaves:
|
||||
if leaves.holidays:
|
||||
holidays_list.extend(leaves.holidays.split(',')) # 法定节假日
|
||||
if leaves.shift_replacement_day:
|
||||
shift_days_list.extend(leaves.shift_replacement_day.split(',')) #调班补班
|
||||
if leaves.alternate_rest_day:
|
||||
holidays_list.extend(leaves.alternate_rest_day.split(',')) #调休日
|
||||
target_day = holiday.request_date_from
|
||||
target_day_str = f"{target_day.month}月{target_day.day}日"
|
||||
is_weekend = holiday.request_date_from.weekday() in [5, 6]
|
||||
# 判断是否为假期
|
||||
if target_day_str in holidays_list:
|
||||
holiday.number_of_hours = 0
|
||||
# 判断是否为调休日
|
||||
elif target_day_str in shift_days_list:
|
||||
if holiday.request_hour_from and holiday.request_hour_to:
|
||||
# 调休日无论是否在周末都按正常逻辑计算
|
||||
start_hour = float(holiday.request_hour_from)
|
||||
end_hour = float(holiday.request_hour_to)
|
||||
|
||||
# 跨中午12点的情况
|
||||
if start_hour < 12 and end_hour > 12:
|
||||
hour = float(end_hour) - float(start_hour) - 1
|
||||
holiday.number_of_hours = hour
|
||||
# 9点到12点的情况
|
||||
elif start_hour == 9 and end_hour == 12:
|
||||
holiday.number_of_hours = 4
|
||||
# 其他情况按正常计算
|
||||
else:
|
||||
hour = float(end_hour) - float(start_hour)
|
||||
holiday.number_of_hours = hour
|
||||
# 非假期且非调休日的情况
|
||||
else:
|
||||
# 如果是周末且不在调休列表中,小时数为0
|
||||
if is_weekend:
|
||||
holiday.number_of_hours = 0
|
||||
# 普通工作日按正常逻辑计算
|
||||
if holiday.request_hour_from and holiday.request_hour_to:
|
||||
start_hour = float(holiday.request_hour_from)
|
||||
end_hour = float(holiday.request_hour_to)
|
||||
if start_hour < 12 and end_hour > 12:
|
||||
hour = end_hour - start_hour - 1
|
||||
holiday.number_of_hours = hour
|
||||
elif start_hour == 9 and end_hour == 12:
|
||||
holiday.number_of_hours = 4
|
||||
else:
|
||||
if holiday.request_hour_from and holiday.request_hour_to:
|
||||
start_hour = float(holiday.request_hour_from)
|
||||
end_hour = float (holiday.request_hour_to)
|
||||
if start_hour < 12 and end_hour > 12:
|
||||
hour = float(end_hour) - float(start_hour) - 1
|
||||
holiday.number_of_hours = hour
|
||||
elif start_hour == 9 and end_hour == 12:
|
||||
holiday.number_of_hours = 4
|
||||
else:
|
||||
hour = float(end_hour) - float(start_hour)
|
||||
holiday.number_of_hours = hour
|
||||
|
||||
hour = end_hour - start_hour
|
||||
holiday.number_of_hours = hour
|
||||
else:
|
||||
holiday.number_of_hours = 0
|
||||
days = (holiday.request_date_to - holiday.request_date_from).days + 1
|
||||
current_date = holiday.request_date_from
|
||||
while current_date <= holiday.request_date_to:
|
||||
current_date_str = current_date.strftime('%m月%d日')
|
||||
current_date_str = holiday.remove_leading_zero(current_date_str)
|
||||
is_weekend = current_date.weekday() in [5, 6]
|
||||
if current_date_str in holidays_list:
|
||||
days -= 1
|
||||
elif current_date_str in shift_days_list:
|
||||
if not is_weekend:
|
||||
days += 1
|
||||
else :
|
||||
if is_weekend:
|
||||
days -= 1
|
||||
current_date += timedelta(days=1)
|
||||
holiday.number_of_days = days
|
||||
|
||||
def _compute_request_unit_hours(self):
|
||||
|
||||
@@ -120,19 +120,6 @@
|
||||
<field name="numbercall">-1</field>
|
||||
<field eval="False" name="doall"/>
|
||||
</record>
|
||||
<record forcecreate="True" id="card_gc_night_remind_time_shift" model="ir.cron">
|
||||
<field name="name">定时任务:工程部中值夜班值班打卡提醒</field>
|
||||
<field name="model_id" ref="model_hr_attendance"/>
|
||||
<field name="state">code</field>
|
||||
<field name="code">model.gc_night_remind_shift()</field>
|
||||
<field eval="True" name="active"/>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
<field name="interval_number">1</field>
|
||||
<field name="interval_type">days</field>
|
||||
<field name="nextcall" eval="(DateTime.now()).strftime('%Y-%m-%d 22:00:00')"/>
|
||||
<field name="numbercall">-1</field>
|
||||
<field eval="False" name="doall"/>
|
||||
</record>
|
||||
|
||||
<!-- 保安部打卡提醒 -->
|
||||
<record forcecreate="True" id="card_ba_white_remind_time_out" model="ir.cron">
|
||||
@@ -200,45 +187,111 @@
|
||||
<field name="numbercall">-1</field>
|
||||
<field eval="False" name="doall"/>
|
||||
</record>
|
||||
<record forcecreate="True" id="card_card_customer_shift_remind_time_on" model="ir.cron">
|
||||
<field name="name">定时任务:客服上班提醒</field>
|
||||
<record forcecreate="True" id="card_ba_card_old_night_up" model="ir.cron">
|
||||
<field name="name">定时任务: 保安部旧晚(旧区府晚班)上班提醒</field>
|
||||
<field name="model_id" ref="model_hr_attendance"/>
|
||||
<field name="state">code</field>
|
||||
<field name="code">model.card_customer_service_shift_remind_on()</field>
|
||||
<field name="code">model.ba_card_old_night_up()</field>
|
||||
<field eval="True" name="active"/>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
<field name="interval_number">1</field>
|
||||
<field name="interval_type">days</field>
|
||||
<field name="nextcall" eval="(DateTime.now() + timedelta(days=1)).strftime('%Y-%m-%d 08:50:00')"/>
|
||||
<field name="nextcall" eval="(DateTime.now() + timedelta(days=1)).strftime('%Y-%m-%d 08:00:00')"/>
|
||||
<field name="numbercall">-1</field>
|
||||
<field eval="False" name="doall"/>
|
||||
</record>
|
||||
<record forcecreate="True" id="card_customer_service_shift_remind_time_out" model="ir.cron">
|
||||
<field name="name">定时任务:客服下班提醒</field>
|
||||
<record forcecreate="True" id="card_ba_card_old_night_down" model="ir.cron">
|
||||
<field name="name">定时任务: 保安部旧晚(旧区府晚班)下班提醒</field>
|
||||
<field name="model_id" ref="model_hr_attendance"/>
|
||||
<field name="state">code</field>
|
||||
<field name="code">model.card_customer_service_shift_remind_out()</field>
|
||||
<field name="code">model.ba_card_old_night_down()</field>
|
||||
<field eval="True" name="active"/>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
<field name="interval_number">1</field>
|
||||
<field name="interval_type">days</field>
|
||||
<field name="nextcall" eval="(DateTime.now() + timedelta(days=1)).strftime('%Y-%m-%d 18:00:00')"/>
|
||||
<field name="nextcall" eval="(DateTime.now() + timedelta(days=1)).strftime('%Y-%m-%d 00:00:00')"/>
|
||||
<field name="numbercall">-1</field>
|
||||
<field eval="False" name="doall"/>
|
||||
|
||||
<record forcecreate="True" id="card_ba_card_old_white_up" model="ir.cron">
|
||||
<field name="name">定时任务:保安部旧白(旧区府白班)上班提醒</field>
|
||||
<field name="model_id" ref="model_hr_attendance"/>
|
||||
<field name="state">code</field>
|
||||
<field name="code">model.ba_card_old_white_up()</field>
|
||||
<field eval="True" name="active"/>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
<field name="interval_number">1</field>
|
||||
<field name="interval_type">days</field>
|
||||
<field name="nextcall" eval="(DateTime.now() + timedelta(days=1)).strftime('%Y-%m-%d 00:00:00')"/>
|
||||
<field name="numbercall">-1</field>
|
||||
<field eval="False" name="doall"/>
|
||||
</record>
|
||||
<record forcecreate="True" id="card_customer_service_stand_remind_time" model="ir.cron">
|
||||
<field name="name">定时任务:客服值班提醒</field>
|
||||
<record forcecreate="True" id="card_ba_card_old_white_down" model="ir.cron">
|
||||
<field name="name">定时任务:保安部旧白(旧区府白班)下班提醒</field>
|
||||
<field name="model_id" ref="model_hr_attendance"/>
|
||||
<field name="state">code</field>
|
||||
<field name="code">model.card_customer_service_stand_remind()</field>
|
||||
<field name="code">model.ba_card_old_white_down()</field>
|
||||
<field eval="True" name="active"/>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
<field name="interval_number">1</field>
|
||||
<field name="interval_type">days</field>
|
||||
<field name="nextcall" eval="(DateTime.now() + timedelta(days=1)).strftime('%Y-%m-%d 12:00:00')"/>
|
||||
<field name="nextcall" eval="(DateTime.now() + timedelta(days=1)).strftime('%Y-%m-%d 00:00:00')"/>
|
||||
<field name="numbercall">-1</field>
|
||||
<field eval="False" name="doall"/>
|
||||
</record>
|
||||
<record forcecreate="True" id="card_old_night_remind_in" model="ir.cron">
|
||||
<field name="name">定时任务:工程部旧晚(旧区府晚班)上班打卡提醒</field>
|
||||
<field name="model_id" ref="model_hr_attendance"/>
|
||||
<field name="state">code</field>
|
||||
<field name="code">model.card_old_night_remind_in()</field>
|
||||
<field eval="True" name="active"/>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
<field name="interval_number">1</field>
|
||||
<field name="interval_type">days</field>
|
||||
<field name="nextcall" eval="(DateTime.now() + timedelta(days=1)).strftime('%Y-%m-%d 00:00:00')"/>
|
||||
<field name="numbercall">-1</field>
|
||||
<field eval="False" name="doall"/>
|
||||
</record>
|
||||
<record forcecreate="True" id="card_old_night_remind_out" model="ir.cron">
|
||||
<field name="name">定时任务:工程部旧晚(旧区府晚班)下班打卡提醒</field>
|
||||
<field name="model_id" ref="model_hr_attendance"/>
|
||||
<field name="state">code</field>
|
||||
<field name="code">model.card_old_night_remind_out()</field>
|
||||
<field eval="True" name="active"/>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
<field name="interval_number">1</field>
|
||||
<field name="interval_type">days</field>
|
||||
<field name="nextcall" eval="(DateTime.now() + timedelta(days=1)).strftime('%Y-%m-%d 00:00:00')"/>
|
||||
<field name="numbercall">-1</field>
|
||||
<field eval="False" name="doall"/>
|
||||
</record>
|
||||
<record forcecreate="True" id="card_old_day_remind_in" model="ir.cron">
|
||||
<field name="name">定时任务:工程部旧白(旧区府白班)上班打卡提醒</field>
|
||||
<field name="model_id" ref="model_hr_attendance"/>
|
||||
<field name="state">code</field>
|
||||
<field name="code">model.card_old_day_remind_in()</field>
|
||||
<field eval="True" name="active"/>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
<field name="interval_number">1</field>
|
||||
<field name="interval_type">days</field>
|
||||
<field name="nextcall" eval="(DateTime.now() + timedelta(days=1)).strftime('%Y-%m-%d 08:00:00')"/>
|
||||
<field name="numbercall">-1</field>
|
||||
<field eval="False" name="doall"/>
|
||||
</record>
|
||||
<record forcecreate="True" id="card_old_day_remind_out" model="ir.cron">
|
||||
<field name="name">定时任务:工程部旧白(旧区府白班)下班打卡提醒</field>
|
||||
<field name="model_id" ref="model_hr_attendance"/>
|
||||
<field name="state">code</field>
|
||||
<field name="code">model.card_old_day_remind_out()</field>
|
||||
<field eval="True" name="active"/>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
<field name="interval_number">1</field>
|
||||
<field name="interval_type">days</field>
|
||||
<field name="nextcall" eval="(DateTime.now() + timedelta(days=1)).strftime('%Y-%m-%d 8:00:00')"/>
|
||||
<field name="numbercall">-1</field>
|
||||
<field eval="False" name="doall"/>
|
||||
</record>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
|
||||
|
||||
@@ -160,16 +160,6 @@ class HrAttendance(models.Model):
|
||||
)
|
||||
current_date += timedelta(days=1)
|
||||
|
||||
# @api.model
|
||||
# def web_read_group(self, domain, fields, groupby, limit=None, offset=0, orderby=False, lazy=True):
|
||||
# result = super().web_read_group(domain, fields, groupby, limit, offset, orderby, lazy)
|
||||
# fields_dict = self.fields_get(fields)
|
||||
# for group in result.get('groups'):
|
||||
# for field in fields:
|
||||
# if fields_dict[field].get('type') == 'boolean':
|
||||
# group[field] = len([r for r in self.search_read(group['__domain'], fields=[field]) if r.get(field)])
|
||||
# return result
|
||||
|
||||
@api.constrains('check_in', 'check_out')
|
||||
def _check_validity_check_in_check_out(self):
|
||||
""" verifies if check_in is earlier than check_out. """
|
||||
@@ -212,9 +202,15 @@ class HrAttendance(models.Model):
|
||||
def attendance_abnormal_remind(self):
|
||||
all_employees = self.env['hr.employee'].search([])
|
||||
current_date = fields.Date.today()
|
||||
current_dt = fields.Datetime.now()
|
||||
month_start = current_date.replace(day=1)
|
||||
month_end = (month_start + relativedelta(months=1) - relativedelta(days=1))
|
||||
current_time = fields.Datetime.now()
|
||||
start_time = datetime.combine(current_date, datetime.min.time().replace(hour=8, minute=50))
|
||||
end_time = datetime.combine(current_date, datetime.min.time().replace(hour=9, minute=10))
|
||||
if not (start_time <= current_dt <= end_time):
|
||||
return
|
||||
if not self._process_shift_days(current_date):
|
||||
return
|
||||
for employee in all_employees:
|
||||
domain = [
|
||||
('shift_name', '=', '行政班次'),
|
||||
@@ -795,99 +791,121 @@ class HrAttendance(models.Model):
|
||||
else:
|
||||
record.week = False
|
||||
|
||||
# 行政异常提醒
|
||||
def admin_comment_abnormal(self):
|
||||
week = (fields.date.today() + timedelta(hours=8)).weekday()
|
||||
if week < 5:
|
||||
employee_ids = self.env['hr.employee'].search([('department_id.name', '=', '办公室')])
|
||||
menu_id = self.env['ir.ui.menu'].search([('name', '=', '我的异常')])
|
||||
for employee_id in employee_ids:
|
||||
url = f'https://oa.thtzjt.com/web#id={self.id}&cids=2&action={menu_id.action.id}&model=hr.attendance&view_type=from&menu_id={menu_id.id}'
|
||||
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='att',
|
||||
user_id=employee_id.wecom_userid,
|
||||
title="打卡异常提醒", description="异常提醒",
|
||||
url=url, btntxt="详细信息")
|
||||
def _is_within_10min_by_float(self, base_float):
|
||||
base_hour = int(base_float)
|
||||
base_minute = int((base_float - base_hour) * 60)
|
||||
today = fields.date.today()
|
||||
base_datetime = datetime.combine(today, datetime.min.time().replace(hour=base_hour, minute=base_minute))
|
||||
|
||||
# 保安部 - 白班
|
||||
# 计算前后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 ba_card_white_up(self):
|
||||
ba_up_users = self.env['planning.slot'].search(
|
||||
[('role_id.name', '=', '保安部'), ('template_id.planning_name', '=', '早班')])
|
||||
for user in ba_up_users:
|
||||
if user.start_datetime.date() == fields.date.today():
|
||||
self.card_in_comment(user.resource_id.employee_id,user.template_id.planning_name)
|
||||
if user.template_id.check_in_start and self._is_within_10min_by_float(user.template_id.check_in_start):
|
||||
self.card_in_comment(user.resource_id.employee_id, user.template_id.planning_name)
|
||||
|
||||
def ba_card_white_down(self):
|
||||
ba_up_users = self.env['planning.slot'].search(
|
||||
[('role_id.name', '=', '保安部'), ('template_id.planning_name', '=', '早班')])
|
||||
for user in ba_up_users:
|
||||
if user.start_datetime.date() == fields.date.today():
|
||||
self.card_out_comment(user.resource_id.employee_id,user.template_id.planning_name)
|
||||
if user.template_id.check_out_start and self._is_within_10min_by_float(user.template_id.check_out_start):
|
||||
self.card_out_comment(user.resource_id.employee_id, user.template_id.planning_name)
|
||||
|
||||
# 保安部 - 中班
|
||||
def ba_card_mid_up(self):
|
||||
ba_up_users = self.env['planning.slot'].search(
|
||||
[('role_id.name', '=', '保安部'), ('template_id.planning_name', '=', '中班')])
|
||||
for user in ba_up_users:
|
||||
if user.start_datetime.date() == fields.date.today():
|
||||
self.card_in_comment(user.resource_id.employee_id,user.template_id.planning_name)
|
||||
if user.template_id.check_in_start and self._is_within_10min_by_float(user.template_id.check_in_start):
|
||||
self.card_in_comment(user.resource_id.employee_id, user.template_id.planning_name)
|
||||
|
||||
def ba_card_mid_down(self):
|
||||
ba_up_users = self.env['planning.slot'].search(
|
||||
[('role_id.name', '=', '保安部'), ('template_id.planning_name', '=', '中班')])
|
||||
for user in ba_up_users:
|
||||
if user.start_datetime.date() == fields.date.today():
|
||||
self.card_out_comment(user.resource_id.employee_id,user.template_id.planning_name)
|
||||
if user.template_id.check_out_start and self._is_within_10min_by_float(user.template_id.check_out_start):
|
||||
self.card_out_comment(user.resource_id.employee_id, user.template_id.planning_name)
|
||||
|
||||
# 保安部 - 夜班
|
||||
def ba_card_night_up(self):
|
||||
ba_up_users = self.env['planning.slot'].search(
|
||||
[('role_id.name', '=', '保安部'), ('template_id.planning_name', '=', '夜班')])
|
||||
for user in ba_up_users:
|
||||
if user.start_datetime.date() == fields.date.today():
|
||||
self.card_in_comment(user.resource_id.employee_id,user.template_id.planning_name)
|
||||
if user.template_id.check_in_start and self._is_within_10min_by_float(user.template_id.check_in_start):
|
||||
self.card_in_comment(user.resource_id.employee_id, user.template_id.planning_name)
|
||||
|
||||
def ba_card_night_down(self):
|
||||
ba_up_users = self.env['planning.slot'].search(
|
||||
[('role_id.name', '=', '保安部'), ('template_id.planning_name', '=', '夜班')])
|
||||
for user in ba_up_users:
|
||||
if user.end_datetime.date() == fields.date.today():
|
||||
self.card_out_comment(user.resource_id.employee_id,user.template_id.planning_name)
|
||||
if user.template_id.check_out_start and self._is_within_10min_by_float(user.template_id.check_out_start):
|
||||
self.card_out_comment(user.resource_id.employee_id, user.template_id.planning_name)
|
||||
|
||||
# 保安部 - 旧晚(旧区府晚班)
|
||||
def ba_card_old_night_up(self):
|
||||
ba_up_users = self.env['planning.slot'].search(
|
||||
[('role_id.name', '=', '保安部'), ('template_id.planning_name', '=', '旧晚(旧区府晚班)')])
|
||||
for user in ba_up_users:
|
||||
if user.template_id.check_in_start and self._is_within_10min_by_float(user.template_id.check_in_start):
|
||||
self.card_in_comment(user.resource_id.employee_id, user.template_id.planning_name)
|
||||
|
||||
def ba_card_old_night_down(self):
|
||||
ba_up_users = self.env['planning.slot'].search(
|
||||
[('role_id.name', '=', '保安部'), ('template_id.planning_name', '=', '旧晚(旧区府晚班)')])
|
||||
for user in ba_up_users:
|
||||
if user.template_id.check_out_start and self._is_within_10min_by_float(user.template_id.check_out_start):
|
||||
self.card_out_comment(user.resource_id.employee_id, user.template_id.planning_name)
|
||||
|
||||
# 保安部 - 旧白(旧区府白班)
|
||||
def ba_card_old_white_up(self):
|
||||
ba_up_users = self.env['planning.slot'].search(
|
||||
[('role_id.name', '=', '保安部'), ('template_id.planning_name', '=', '旧白(旧区府白班)')])
|
||||
for user in ba_up_users:
|
||||
if user.template_id.check_in_start and self._is_within_10min_by_float(user.template_id.check_in_start):
|
||||
self.card_in_comment(user.resource_id.employee_id, user.template_id.planning_name)
|
||||
|
||||
def ba_card_old_white_down(self):
|
||||
ba_up_users = self.env['planning.slot'].search(
|
||||
[('role_id.name', '=', '保安部'), ('template_id.planning_name', '=', '旧白(旧区府白班)')])
|
||||
for user in ba_up_users:
|
||||
if user.template_id.check_out_start and self._is_within_10min_by_float(user.template_id.check_out_start):
|
||||
self.card_out_comment(user.resource_id.employee_id, user.template_id.planning_name)
|
||||
|
||||
# 工程部 - 白班
|
||||
def gc_white_in_remind(self):
|
||||
ba_up_users = self.env['planning.slot'].search(
|
||||
[('role_id.name', '=', '工程部'), ('template_id.planning_name', '=', '白班')])
|
||||
for user in ba_up_users:
|
||||
if user.start_datetime.date() == fields.date.today():
|
||||
self.card_in_comment(user.resource_id.employee_id,user.template_id.planning_name)
|
||||
|
||||
def gc_white_shift_remind(self):
|
||||
ba_up_users = self.env['planning.slot'].search(
|
||||
[('role_id.name', '=', '工程部'), ('template_id.planning_name', '=', '白值')])
|
||||
for user in ba_up_users:
|
||||
if user.start_datetime.date() == fields.date.today():
|
||||
self.card_duty_remind(user.resource_id.employee_id)
|
||||
if user.template_id.check_in_start and self._is_within_10min_by_float(user.template_id.check_in_start):
|
||||
self.card_in_comment(user.resource_id.employee_id, user.template_id.planning_name)
|
||||
|
||||
def gc_white_out_remind(self):
|
||||
ba_up_users = self.env['planning.slot'].search(
|
||||
[('role_id.name', '=', '工程部'), ('template_id.planning_name', '=', '白班')])
|
||||
for user in ba_up_users:
|
||||
if user.start_datetime.date() == fields.date.today():
|
||||
self.card_out_comment(user.resource_id.employee_id,user.template_id.planning_name)
|
||||
if user.template_id.check_out_start and self._is_within_10min_by_float(user.template_id.check_out_start):
|
||||
self.card_out_comment(user.resource_id.employee_id, user.template_id.planning_name)
|
||||
|
||||
# 工程部 - 白值
|
||||
def gc_white_remind_in(self):
|
||||
ba_up_users = self.env['planning.slot'].search(
|
||||
[('role_id.name', '=', '工程部'), ('template_id.planning_name', '=', '白值')])
|
||||
for user in ba_up_users:
|
||||
if user.start_datetime.date() == fields.date.today():
|
||||
if user.template_id.check_in_start and self._is_within_10min_by_float(user.template_id.check_in_start):
|
||||
self.card_in_comment(user.resource_id.employee_id, user.template_id.planning_name)
|
||||
|
||||
def gc_white_remind_out(self):
|
||||
ba_up_users = self.env['planning.slot'].search(
|
||||
[('role_id.name', '=', '工程部'), ('template_id.planning_name', '=', '白值')])
|
||||
for user in ba_up_users:
|
||||
if user.start_datetime.date() == fields.date.today():
|
||||
if user.template_id.check_out_start and self._is_within_10min_by_float(user.template_id.check_out_start):
|
||||
self.card_out_comment(user.resource_id.employee_id, user.template_id.planning_name)
|
||||
|
||||
# 工程部-中值夜
|
||||
@@ -895,91 +913,97 @@ class HrAttendance(models.Model):
|
||||
ba_up_users = self.env['planning.slot'].search(
|
||||
[('role_id.name', '=', '工程部'), ('template_id.planning_name', '=', '中夜')])
|
||||
for user in ba_up_users:
|
||||
if user.start_datetime.date() == fields.date.today():
|
||||
self.card_in_comment(user.resource_id.employee_id,user.template_id.planning_name)
|
||||
|
||||
def gc_night_remind_shift(self):
|
||||
ba_up_users = self.env['planning.slot'].search(
|
||||
[('role_id.name', '=', '工程部'), ('template_id.planning_name', '=', '中夜')])
|
||||
for user in ba_up_users:
|
||||
if user.end_datetime.date() == fields.date.today():
|
||||
self.card_duty_remind(user.resource_id.employee_id)
|
||||
if user.template_id.check_in_start and self._is_within_10min_by_float(user.template_id.check_in_start):
|
||||
self.card_in_comment(user.resource_id.employee_id, user.template_id.planning_name)
|
||||
|
||||
def gc_night_remind_out(self):
|
||||
ba_up_users = self.env['planning.slot'].search(
|
||||
[('role_id.name', '=', '工程部'), ('template_id.planning_name', '=', '中夜')])
|
||||
for user in ba_up_users:
|
||||
if user.end_datetime.date() == fields.date.today():
|
||||
self.card_out_comment(user.resource_id.employee_id,user.template_id.planning_name)
|
||||
if user.template_id.check_out_start and self._is_within_10min_by_float(user.template_id.check_out_start):
|
||||
self.card_out_comment(user.resource_id.employee_id, user.template_id.planning_name)
|
||||
|
||||
# 工程部 - 旧晚(旧区府晚班)
|
||||
def card_old_night_remind_in(self):
|
||||
ba_up_users = self.env['planning.slot'].search(
|
||||
[('role_id.name', '=', '工程部'), ('template_id.planning_name', '=', '旧晚(旧区府晚班)')])
|
||||
for user in ba_up_users:
|
||||
if user.template_id.check_in_start and self._is_within_10min_by_float(user.template_id.check_in_start):
|
||||
self.card_in_comment(user.resource_id.employee_id, user.template_id.planning_name)
|
||||
|
||||
def card_old_night_remind_out(self):
|
||||
ba_up_users = self.env['planning.slot'].search(
|
||||
[('role_id.name', '=', '工程部'), ('template_id.planning_name', '=', '旧晚(旧区府晚班)')])
|
||||
for user in ba_up_users:
|
||||
if user.template_id.check_out_start and self._is_within_10min_by_float(user.template_id.check_out_start):
|
||||
self.card_out_comment(user.resource_id.employee_id, user.template_id.planning_name)
|
||||
|
||||
# 工程部 - 旧白(旧区府白班)
|
||||
def card_old_day_remind_in(self):
|
||||
ba_up_users = self.env['planning.slot'].search(
|
||||
[('role_id.name', '=', '工程部'), ('template_id.planning_name', '=', '旧白(旧区府白班)')])
|
||||
for user in ba_up_users:
|
||||
if user.template_id.check_in_start and self._is_within_10min_by_float(user.template_id.check_in_start):
|
||||
self.card_in_comment(user.resource_id.employee_id, user.template_id.planning_name)
|
||||
|
||||
def card_old_day_remind_out(self):
|
||||
ba_up_users = self.env['planning.slot'].search(
|
||||
[('role_id.name', '=', '工程部'), ('template_id.planning_name', '=', '旧白(旧区府白班)')])
|
||||
for user in ba_up_users:
|
||||
if user.template_id.check_out_start and self._is_within_10min_by_float(user.template_id.check_out_start):
|
||||
self.card_out_comment(user.resource_id.employee_id, user.template_id.planning_name)
|
||||
|
||||
# 粮储-白班
|
||||
def card_lc_remind_in(self):
|
||||
ba_up_users = self.env['planning.slot'].search(
|
||||
[('role_id.name', '=', '联安粮库'), ('template_id.planning_name', '=', '白班')])
|
||||
for user in ba_up_users:
|
||||
if user.start_datetime.date() == fields.date.today():
|
||||
self.card_in_comment(user.resource_id.employee_id,user.template_id.planning_name)
|
||||
if user.template_id.check_in_start and self._is_within_10min_by_float(user.template_id.check_in_start):
|
||||
self.card_in_comment(user.resource_id.employee_id, user.template_id.planning_name)
|
||||
|
||||
def card_lc_remind_out(self):
|
||||
ba_up_users = self.env['planning.slot'].search(
|
||||
[('role_id.name', '=', '联安粮库'), ('template_id.planning_name', '=', '白班')])
|
||||
for user in ba_up_users:
|
||||
if user.start_datetime.date() == fields.date.today():
|
||||
self.card_out_comment(user.resource_id.employee_id,user.template_id.planning_name)
|
||||
if user.template_id.check_out_start and self._is_within_10min_by_float(user.template_id.check_out_start):
|
||||
self.card_out_comment(user.resource_id.employee_id, user.template_id.planning_name)
|
||||
|
||||
# 粮储-值班
|
||||
# 粮储-值班(白值)
|
||||
def card_lc_shift_remind_in(self):
|
||||
ba_up_users = self.env['planning.slot'].search(
|
||||
[('role_id.name', '=', '联安粮库'), ('template_id.planning_name', '=', '白值')])
|
||||
for user in ba_up_users:
|
||||
if user.start_datetime.date() == fields.date.today():
|
||||
if user.template_id.check_in_start and self._is_within_10min_by_float(user.template_id.check_in_start):
|
||||
self.card_in_comment(user.resource_id.employee_id, user.template_id.planning_name)
|
||||
|
||||
def card_lc_shift_remind(self):
|
||||
ba_up_users = self.env['planning.slot'].search(
|
||||
[('role_id.name', '=', '联安粮库'), ('template_id.planning_name', '=', '白值')])
|
||||
for user in ba_up_users:
|
||||
if user.start_datetime.date() == fields.date.today():
|
||||
# 值班提醒:基于 template_id.check_in_start(同上班基准)
|
||||
if user.template_id.check_in_start and self._is_within_10min_by_float(user.template_id.check_in_start):
|
||||
self.card_duty_remind(user.resource_id.employee_id)
|
||||
|
||||
def card_lc_shift_remind_out(self):
|
||||
ba_up_users = self.env['planning.slot'].search([('role_id.name', '=', '联安粮库'), ('template_id.planning_name', '=', '白值')])
|
||||
ba_up_users = self.env['planning.slot'].search(
|
||||
[('role_id.name', '=', '联安粮库'), ('template_id.planning_name', '=', '白值')])
|
||||
for user in ba_up_users:
|
||||
if user.start_datetime.date() == fields.date.today():
|
||||
self.card_out_comment(user.resource_id.employee_id,user.template_id.planning_name)
|
||||
if user.template_id.check_out_start and self._is_within_10min_by_float(user.template_id.check_out_start):
|
||||
self.card_out_comment(user.resource_id.employee_id, user.template_id.planning_name)
|
||||
|
||||
# 保安计划行政
|
||||
def card_lc_shift_remind_on_administrative(self):
|
||||
ba_up_users = self.env['planning.slot'].search([('template_id.planning_name', '=', '保安计划行政')])
|
||||
for user in ba_up_users:
|
||||
if user.start_datetime.date() == fields.date.today():
|
||||
if user.template_id.check_in_start and self._is_within_10min_by_float(user.template_id.check_in_start):
|
||||
self.card_in_comment(user.resource_id.employee_id, user.template_id.planning_name)
|
||||
|
||||
def card_lc_shift_remind_out_administrative(self):
|
||||
ba_up_users = self.env['planning.slot'].search([('template_id.planning_name', '=', '保安计划行政')])
|
||||
for user in ba_up_users:
|
||||
if user.start_datetime.date() == fields.date.today():
|
||||
if user.template_id.check_out_start and self._is_within_10min_by_float(user.template_id.check_out_start):
|
||||
self.card_out_comment(user.resource_id.employee_id, user.template_id.planning_name)
|
||||
|
||||
# 客服上班消息提醒
|
||||
def card_customer_service_shift_remind_on(self):
|
||||
ba_up_users = self.env['planning.slot'].search([('role_id.name', '=', '客服中心'), ('template_id.planning_name', '=', '白班')])
|
||||
for user in ba_up_users:
|
||||
if user.start_datetime.date() == fields.date.today():
|
||||
self.card_in_comment(user.resource_id.employee_id, user.template_id.planning_name)
|
||||
|
||||
# 客服下班消息提醒
|
||||
def card_customer_service_shift_remind_out(self):
|
||||
ba_up_users = self.env['planning.slot'].search([('role_id.name', '=', '客服中心'), ('template_id.planning_name', '=', '白班')])
|
||||
for user in ba_up_users:
|
||||
if user.start_datetime.date() == fields.date.today():
|
||||
self.card_out_comment(user.resource_id.employee_id, user.template_id.planning_name)
|
||||
|
||||
# 客服值班消息提醒
|
||||
def card_customer_service_stand_remind(self):
|
||||
ba_up_users = self.env['planning.slot'].search([('role_id.name', '=', '客服中心'), ('template_id.planning_name', '=', '值班')])
|
||||
for user in ba_up_users:
|
||||
if user.start_datetime.date() == fields.date.today():
|
||||
self.card_duty_remind(user.resource_id.employee_id)
|
||||
|
||||
def card_in_comment(self, employee_id, planning_name):
|
||||
data = f"您的班次是{planning_name},还有10分钟上班,记得打卡"
|
||||
|
||||
@@ -160,14 +160,15 @@ class WeComApps(models.Model):
|
||||
},
|
||||
}
|
||||
result_data = self.sync_function_api("message_send", "MESSAGE_SEND", data, category)
|
||||
employee_id = self.env["res.users"].search([("id", "=", user_id)], limit=1).employee_ids
|
||||
self.env["attendance.message.log"].create({
|
||||
"employee_id": employee_id.id,
|
||||
"content": description,
|
||||
"notice_type": 'attendance',
|
||||
'update_date': fields.Datetime.now() - timedelta(hours=8),
|
||||
"message_url": url,
|
||||
})
|
||||
if category == 'att':
|
||||
employee_id = self.env["res.users"].search([("id", "=", user_id)], limit=1).employee_ids
|
||||
self.env["attendance.message.log"].create({
|
||||
"employee_id": employee_id.id,
|
||||
"content": description,
|
||||
"notice_type": 'attendance',
|
||||
'update_date': fields.Datetime.now() - timedelta(hours=8),
|
||||
"message_url": url,
|
||||
})
|
||||
if result_data.get("errcode", None) == 0:
|
||||
return True, result_data
|
||||
return False, result_data
|
||||
|
||||
Reference in New Issue
Block a user