diff --git a/yuthon_hr_attendance/__manifest__.py b/yuthon_hr_attendance/__manifest__.py
index 4b5741e5d..bb3dbf098 100644
--- a/yuthon_hr_attendance/__manifest__.py
+++ b/yuthon_hr_attendance/__manifest__.py
@@ -21,6 +21,7 @@
'data/hr_attendance_time.xml',
'data/attendance_code_data.xml',
'data/attendance_time_data.xml',
+ 'data/attendance_month_date.xml',
'data/mail_template.xml',
'views/hr_attendance_views.xml',
'views/resource_calendar_leaves_views.xml',
diff --git a/yuthon_hr_attendance/data/attendance_month_date.xml b/yuthon_hr_attendance/data/attendance_month_date.xml
new file mode 100644
index 000000000..44701c2d4
--- /dev/null
+++ b/yuthon_hr_attendance/data/attendance_month_date.xml
@@ -0,0 +1,44 @@
+
+
+
+
+ 定时任务:考勤统计
+
+ code
+ model.button_attendance_month()
+
+
+ months
+ 1
+
+ -1
+
+
+
+ 定时任务:触发考勤统计然后发送
+
+ code
+ model.button_all_attendance_month()
+
+
+ months
+ 1
+
+ -1
+
+
+
+ 定时任务:确认字段
+
+ code
+ model.attendance_month_detail()
+
+
+ months
+ 1
+
+ -1
+
+
+
+
\ No newline at end of file
diff --git a/yuthon_hr_attendance/models/hr_attendance_month.py b/yuthon_hr_attendance/models/hr_attendance_month.py
index 6c308afaa..4770e28f2 100644
--- a/yuthon_hr_attendance/models/hr_attendance_month.py
+++ b/yuthon_hr_attendance/models/hr_attendance_month.py
@@ -41,7 +41,7 @@ class HrAttendanceMonth(models.Model):
is_statistics = fields.Boolean(string="是否已统计", store=True, default=False)
statistics_time = fields.Datetime(string="统计时间")
attendance_month_detail_ids = fields.One2many(string="出勤月度汇总明细", comodel_name='hr.attendance.month.detail', inverse_name='hr_attendance_month_id')
- company_id = fields.Many2one('res.company', string="公司名称", default=lambda self: self.env.company)
+ yuthon_company = fields.Selection([('thtz', '天河投资集团'), ('thwg', '天河物管'), ('thlc', '天河粮储')],string='公司')
def _compute_name(self):
for record in self:
@@ -128,7 +128,8 @@ class HrAttendanceMonthDetail(models.Model):
note = fields.Char(string='备注')
hr_attendance_month_id = fields.Many2one('hr.attendance.month', string="出勤月度汇总", ondelete="cascade", readonly=True)
- company_id = fields.Many2one(related="hr_attendance_month_id.company_id")
+ yuthon_company = fields.Selection([('thtz', '天河投资集团'), ('thwg', '天河物管'), ('thlc', '天河粮储')],
+ string='公司')
signature = fields.Image(string="签名", copy=False, attachment=True, max_width=1024, max_height=1024)
signed_by = fields.Char(string="签名者", copy=False)
signed_on = fields.Datetime(string="签名时间", copy=False)
@@ -373,11 +374,131 @@ class HrAttendanceMonthDetail(models.Model):
record.analysis_attendance_month_detail()
def button_put(self):
- pass
+ menu_id = self.env['ir.ui.menu'].search([('name', '=', '我的确认'), ('parent_id', '!=', False)])
+ str = 'https://oa.thtzjt.com/web#id={}&cids=1&menu_id={}&action={}&model=hr.attendance.month.detail&view_type=list'.format(
+ self.id, menu_id.id, menu_id.action.id)
+ we_id = self.env['hr.employee'].search([('id', '=', self.employee_id)]).wecom_userid
+ self.sudo().env["wecom.apps"].sync_send_message_textcard(category='attendance', user_id=we_id, title="考勤确认",
+ description=self.employee_id.name + '请确认你的考勤:',
+ url=str, btntxt="详细信息")
+ return {
+ 'type': 'ir.actions.client',
+ 'tag': 'display_notification',
+ 'params': {
+ 'type': 'success',
+ 'message': '确认通知已发送',
+ 'sticky': False,
+ }
+ }
def button_all_put(self):
- pass
+ detail_ids = self.env["hr.attendance.month.detail"].browse(self._context.get('active_ids', self._context.get('active_id')))
+ for detail in detail_ids:
+ menu_id = self.env['ir.ui.menu'].search([('name', '=', '我的确认'), ('parent_id', '!=', False)])
+ str = 'https://oa.thtzjt.com/web#id={}&cids=1&menu_id={}&action={}&model=hr.attendance.month.detail&view_type=list'.format(
+ self.id, menu_id.id, menu_id.action.id)
+ we_id = self.env['hr.employee'].search([('id', '=', detail.employee_id)]).wecom_userid
+ self.sudo().env["wecom.apps"].sync_send_message_textcard(category='attendance', user_id=we_id, title="考勤确认",
+ description=detail.employee_id.name + '请确认你的考勤:',
+ url=str, btntxt="详细信息")
+ return {
+ 'type': 'ir.actions.client',
+ 'tag': 'display_notification',
+ 'params': {
+ 'type': 'success',
+ 'message': '确认通知已发送',
+ 'sticky': False,
+ }
+ }
def button_confirm(self):
for record in self:
- record.state = 'confirmed'
\ No newline at end of file
+ record.state = 'confirmed'
+
+ def _get_attendance_month_obj(self):
+ """
+ 获取出勤月度汇总记录结果表
+ :return: obj
+ """
+ self.ensure_one()
+ yuthon_company = self.yuthon_company
+ attendance_month_obj = self.env["hr.attendance.month"].search([
+ ('current_year', '=', self.current_year),
+ ('current_month', '=', self.current_month),
+ ('yuthon_company', '=', yuthon_company),
+ ], limit=1)
+ if not attendance_month_obj:
+ attendance_month_obj = self.env["hr.attendance.month"].sudo().create({
+ "attendance_year_id": self.attendance_year_id.id,
+ "current_year": self.current_year,
+ "current_month": self.current_month,
+ "is_statistics": True,
+ "statistics_time": fields.Datetime.now(),
+ "yuthon_company": yuthon_company,
+ })
+ return attendance_month_obj
+
+ def _get_attendance_month_detail(self, employee):
+ """
+ 判断当前是否已经创建了考勤明细
+ :param employee: 员工
+ :return: 考情明细
+ """
+ self.ensure_one()
+ yuthon_company = self.yuthon_company
+ attendance_month_detail_obj = self.env["hr.attendance.month.detail"].search(
+ [('employee_id', '=', employee.id),
+ ('current_year', '=', self.current_year),
+ ('current_month', '=', self.current_month),
+ ('yuthon_company', '=', yuthon_company)
+ ], limit=1)
+ if not attendance_month_detail_obj:
+ attendance_month_detail_obj = self.env["hr.attendance.month.detail"].sudo().create({
+ "employee_id": employee.id,
+ "attendance_year_id": self.attendance_year_id.id,
+ "current_year": self.current_year,
+ "current_month": self.current_month,
+ "yuthon_company": yuthon_company
+ })
+ return attendance_month_detail_obj
+
+ def button_compute_all(self):
+ self.ensure_one()
+ attendance_month_obj = self._get_attendance_month_obj()
+ # 查询所有的当前员工? 是否需要判断当前员工是否关联企业微信??预留
+ calendars = self.env['resource.calendar'].search([])
+ all_employee_ids = set()
+ for calendar in calendars:
+ all_employee_ids.update(calendar.resource_user_ids.ids)
+ all_employee_ids = list(all_employee_ids)
+ detail_ids = self.env["hr.attendance.month.detail"].browse(self._context.get('active_ids', self._context.get('active_id')))
+ for detail_id in detail_ids:
+ if detail_id.employee_id not in all_employee_ids:
+ # 判断当前是否已经创建了考勤明细
+ attendance_month_detail_obj = self._get_attendance_month_detail(detail_id.employee_id)
+ attendance_month_detail_obj.hr_attendance_month_id = attendance_month_obj.id
+ # 判断当前用户是否已经确认签字,签字后不再更新
+ if attendance_month_detail_obj.state == 'confirmed' and attendance_month_detail_obj.signature:
+ continue
+ # 更新用户的考勤明细
+ attendance_month_detail_obj.analysis_attendance_month_detail()
+ # 返回action动作
+ action = self._hr_attendance_month_detail_action()
+ return action
+
+ def attendance_month_detail(self):
+ attendance_details = self.env['hr.attendance.month.detail'].search([])
+ for detail in attendance_details:
+ detail.write({'state': 'confirmed'})
+
+
+ def button_all_attendance_month(self):
+ attendance_details = self.env['hr.attendance.month.detail'].search([])
+ for detail in attendance_details:
+ menu_id = self.env['ir.ui.menu'].search([('name', '=', '我的确认'), ('parent_id', '!=', False)])
+ str = 'https://oa.thtzjt.com/web#id={}&cids=1&menu_id={}&action={}&model=hr.attendance.month.detail&view_type=list'.format(
+ self.id, menu_id.id, menu_id.action.id)
+ we_id = self.env['hr.employee'].search([('id', '=', detail.employee_id)]).wecom_userid
+ self.sudo().env["wecom.apps"].sync_send_message_textcard(category='attendance', user_id=we_id, title="考勤确认",
+ description=detail .employee_id.name + '请确认你的考勤:',
+ url=str, btntxt="详细信息")
diff --git a/yuthon_hr_attendance/views/all_attendance_menu.xml b/yuthon_hr_attendance/views/all_attendance_menu.xml
index 9bbf425a2..00d6cde54 100644
--- a/yuthon_hr_attendance/views/all_attendance_menu.xml
+++ b/yuthon_hr_attendance/views/all_attendance_menu.xml
@@ -11,8 +11,8 @@
parent="hr_attendance_root_board"
groups="group_he_attendance_manager"
sequence="4"/>
-
-
+
-
+
@@ -34,7 +34,7 @@
hr.attendance.month.form
hr.attendance.month
-