diff --git a/yuthon_hr_employee/models/yuthon_hr_task.py b/yuthon_hr_employee/models/yuthon_hr_task.py
new file mode 100644
index 000000000..225a9663d
--- /dev/null
+++ b/yuthon_hr_employee/models/yuthon_hr_task.py
@@ -0,0 +1,43 @@
+# -*- coding: utf-8 -*-
+from odoo import api, fields, models
+
+
+class YuthonHrTask(models.Model):
+ _name = 'yuthon.hr.task'
+ _description = '定时任务配置'
+
+ name = fields.Char(string='名称')
+ cron_id = fields.Many2one(comodel_name='ir.cron', string='任务')
+ users_role_id = fields.Many2one(comodel_name='soong.user.role', string='角色')
+ users_role_group_ids = fields.Many2many(comodel_name='soong.user.role.group', string='角色组')
+ user_ids = fields.Many2many(comodel_name='res.users', string='人员')
+
+ def action_view_task_confirm(self):
+ return {
+ 'type': 'ir.actions.act_window',
+ 'name': '任务确认记录',
+ 'res_model': 'yuthon.task.confirm',
+ 'view_mode': 'tree,form',
+ 'domain': [('task_id', '=', self.id)],
+ 'context': {'default_task_id': self.id},
+ 'target': 'current',
+ }
+
+
+class YuthonTaskConfirm(models.Model):
+ _name = 'yuthon.task.confirm'
+ _description = '任务确认记录'
+
+ task_id = fields.Many2one(comodel_name='yuthon.hr.task', string='任务', ondelete='cascade')
+ user_id = fields.Many2one(comodel_name='res.users', string='人员')
+ state = fields.Selection([('unread', '未阅'), ('read', '已阅')], string='状态', default='unread')
+ msg_id = fields.Char(string='消息ID')
+
+ def action_view_detail(self):
+ return {
+ 'type': 'ir.actions.act_window',
+ 'res_model': 'yuthon.task.confirm',
+ 'view_mode': 'form',
+ 'res_id': self.id,
+ 'target': 'current',
+ }
diff --git a/yuthon_hr_employee/views/yuthon_hr_task_views.xml b/yuthon_hr_employee/views/yuthon_hr_task_views.xml
new file mode 100644
index 000000000..c0f79d98e
--- /dev/null
+++ b/yuthon_hr_employee/views/yuthon_hr_task_views.xml
@@ -0,0 +1,63 @@
+
+
+
+ yuthon.hr.task.tree
+ yuthon.hr.task
+
+
+
+
+
+
+
+
+
+
+
+
+ 定时任务配置
+ yuthon.hr.task
+ tree
+
+
+
+ yuthon.task.confirm.tree
+ yuthon.task.confirm
+
+
+
+
+
+
+
+
+
+
+ yuthon.task.confirm.form
+ yuthon.task.confirm
+
+
+
+
+
+
+ 任务确认记录
+ yuthon.task.confirm
+ tree,form
+
+
+
+
diff --git a/yuthon_property_approval/models/yuthon_property_task.py b/yuthon_property_approval/models/yuthon_property_task.py
new file mode 100644
index 000000000..8b6f10d31
--- /dev/null
+++ b/yuthon_property_approval/models/yuthon_property_task.py
@@ -0,0 +1,43 @@
+# -*- coding: utf-8 -*-
+from odoo import api, fields, models
+
+
+class YuthonPropertyTask(models.Model):
+ _name = 'yuthon.property.task'
+ _description = '物业定时任务配置'
+
+ name = fields.Char(string='名称')
+ cron_id = fields.Many2one(comodel_name='ir.cron', string='任务')
+ users_role_id = fields.Many2one(comodel_name='soong.user.role', string='角色')
+ users_role_group_ids = fields.Many2many(comodel_name='soong.user.role.group', string='角色组')
+ user_ids = fields.Many2many(comodel_name='res.users', string='人员')
+
+ def action_view_task_confirm(self):
+ return {
+ 'type': 'ir.actions.act_window',
+ 'name': '任务确认记录',
+ 'res_model': 'yuthon.property.task.confirm',
+ 'view_mode': 'tree,form',
+ 'domain': [('task_id', '=', self.id)],
+ 'context': {'default_task_id': self.id},
+ 'target': 'current',
+ }
+
+
+class YuthonPropertyTaskConfirm(models.Model):
+ _name = 'yuthon.property.task.confirm'
+ _description = '物业任务确认记录'
+
+ task_id = fields.Many2one(comodel_name='yuthon.property.task', string='任务', ondelete='cascade')
+ user_id = fields.Many2one(comodel_name='res.users', string='人员')
+ state = fields.Selection([('unread', '未阅'), ('read', '已阅')], string='状态', default='unread')
+ msg_id = fields.Char(string='消息ID')
+
+ def action_view_detail(self):
+ return {
+ 'type': 'ir.actions.act_window',
+ 'res_model': 'yuthon.property.task.confirm',
+ 'view_mode': 'form',
+ 'res_id': self.id,
+ 'target': 'current',
+ }
diff --git a/yuthon_property_approval/views/yuthon_property_task_views.xml b/yuthon_property_approval/views/yuthon_property_task_views.xml
new file mode 100644
index 000000000..d983d41b3
--- /dev/null
+++ b/yuthon_property_approval/views/yuthon_property_task_views.xml
@@ -0,0 +1,67 @@
+
+
+
+
+ yuthon.property.task.tree
+ yuthon.property.task
+
+
+
+
+
+
+
+
+
+
+
+
+ 物业定时任务配置
+ yuthon.property.task
+ tree
+
+
+
+
+ yuthon.property.task.confirm.tree
+ yuthon.property.task.confirm
+
+
+
+
+
+
+
+
+
+
+
+ yuthon.property.task.confirm.form
+ yuthon.property.task.confirm
+
+
+
+
+
+
+ 物业任务确认记录
+ yuthon.property.task.confirm
+ tree,form
+
+
+
+