diff --git a/soong_workflow/data/notice_template_data.xml b/soong_workflow/data/notice_template_data.xml index 9d3da9201..787aaa779 100644 --- a/soong_workflow/data/notice_template_data.xml +++ b/soong_workflow/data/notice_template_data.xml @@ -28,7 +28,7 @@

- 查看 diff --git a/soong_workflow/models/soong_workflow_mixin.py b/soong_workflow/models/soong_workflow_mixin.py index e1db1c84c..2470589e6 100644 --- a/soong_workflow/models/soong_workflow_mixin.py +++ b/soong_workflow/models/soong_workflow_mixin.py @@ -68,7 +68,8 @@ class SoongWorkflowMixin(models.AbstractModel): string="审批明细") approval_sign_ids = fields.Many2many('res.users', string="加签人员") - workflow_approver_ids = fields.One2many('soong.workflow.log', 'w_res_id', string="审批记录", compute='_compute_workflow_approver_ids') + workflow_approver_ids = fields.One2many('soong.workflow.log', 'w_res_id', string="审批记录", + compute='_compute_workflow_approver_ids') def _compute_workflow_approver_ids(self): wkf_obj = self.env["soong.workflow"] @@ -111,7 +112,6 @@ class SoongWorkflowMixin(models.AbstractModel): # Get Workflow rec.workflow_id = wkf_obj.search([("model_id", "=", rec_model), ('is_enable', '=', True)]) - node_id = fields.Many2one( comodel_name="soong.workflow.node", string="Workflow Node Ref.", @@ -166,7 +166,8 @@ class SoongWorkflowMixin(models.AbstractModel): "lase_click_date": fields.Datetime.now(), } ) - record_obj.update({"workflow_id": btn_rec.workflow_id.id, "node_btn_id": btn_rec.id, "done_by": self.env.uid, "lase_click_date": fields.Datetime.now()}) + record_obj.update({"workflow_id": btn_rec.workflow_id.id, "node_btn_id": btn_rec.id, "done_by": self.env.uid, + "lase_click_date": fields.Datetime.now()}) return record_obj def btn_exec_action(self): @@ -200,19 +201,25 @@ class SoongWorkflowMixin(models.AbstractModel): ('user_role_ids', 'in', next_state.users_role_id.id)]) # 自动匹配 employee_user_role_id = self.env['hr.employee'].search( - [('user_role_id', '=', next_state.users_role_id.id), '|', - ('department_id', '=', self.department_id.id), - ('department_ids', 'in', self.department_id.id)]) + ['|', ('user_role_id', '=', next_state.users_role_id.id), + ('user_role_ids', 'in', next_state.users_role_id.id), '|', '&', + ('department_id', '=', self.department_id.id), + ('department_ids', 'in', self.department_id.id), + ('yuthon_company', '=', self.create_uid.employee_id.yuthon_company)]) employee_ids = employee_user_role_ids if not next_state.is_automatic else employee_user_role_id url = 'https://oa.thtzjt.com/mail/view?model={}&res_id={}'.format(self._name, self.id) for employee in employee_ids: self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa', user_id=employee.wecom_userid, title=self._description, - description="您有新的审批单 {} 请及时处理\n".format(self.name) + self.env.user.name + ' ' + str(fields.Datetime.now() + timedelta(hours=8)), + description="标题: {}\n".format( + self.name) + self.env.user.name + ' ' + str( + fields.Datetime.now() + timedelta( + hours=8)), url=url, btntxt="查看详情") partner_ids = employee_ids.user_id.partner_id.ids - self.with_context(lang=self.env.lang)._message_auto_subscribe_notify(partner_ids, 'soong_workflow.message_soong_workflow_users_data') + self.with_context(lang=self.env.lang)._message_auto_subscribe_notify(partner_ids, + 'soong_workflow.message_soong_workflow_users_data') return btn_rec.with_context(cx).run() def _add_comment(self, logs, btn_rec): @@ -263,9 +270,11 @@ class SoongWorkflowMixin(models.AbstractModel): ('user_role_ids', 'in', next_state.users_role_id.id)]) # 自动匹配 employee_user_role_id = self.env['hr.employee'].search( - [('user_role_id', '=', next_state.users_role_id.id), '|', + ['|', ('user_role_id', '=', next_state.users_role_id.id), + ('user_role_id', '=', next_state.users_role_id.id), '|', '&', ('department_id', '=', self.department_id.id), - ('department_ids', 'in', self.department_id.id)]) + ('department_ids', 'in', self.department_id.id), + ('yuthon_company', '=', self.create_uid.employee_id.yuthon_company)]) employee_ids = employee_user_role_ids.ids if not next_state.is_automatic else employee_user_role_id.ids if not employee_ids: @@ -520,7 +529,9 @@ class SoongWorkflowMixin(models.AbstractModel): if self.env.user not in button.reviewer_group_id.users: continue elif button.review_type == 'user_role': - user_role_id = self.env['res.users'].search([('employee_id.user_role_id', '=', button.users_role_id.id)]) + user_role_id = self.env['res.users'].search( + ['|', ('employee_id.user_role_id', '=', button.users_role_id.id), + ('employee_id.user_role_ids', 'in', button.users_role_id.id)]) if self.env.user not in user_role_id: continue # 如果是隐藏条件拼接隐藏条件 @@ -724,7 +735,6 @@ class SoongWorkflowMixin(models.AbstractModel): res["arch"] = etree.tostring(arch, encoding="unicode").replace("\t", "") return res - def _update_fields_view(self, view_type, res): """ Updates fields attributes. diff --git a/soong_workflow/models/soong_workflow_record.py b/soong_workflow/models/soong_workflow_record.py index 2f52fa101..5ac9b20e0 100644 --- a/soong_workflow/models/soong_workflow_record.py +++ b/soong_workflow/models/soong_workflow_record.py @@ -9,7 +9,8 @@ _logger = logging.getLogger(__name__) class SoongWorkflowRecord(models.Model): _name = "soong.workflow.record" - _description = "Soong Workflow Record" + _description = "工作流记录" + _order = 'write_date' @api.depends("res_model", "res_id") def compute_name(self): diff --git a/soong_workflow/views/soong_workflow_record.xml b/soong_workflow/views/soong_workflow_record.xml index 46c3732a0..9144930e5 100644 --- a/soong_workflow/views/soong_workflow_record.xml +++ b/soong_workflow/views/soong_workflow_record.xml @@ -7,8 +7,7 @@ - - + @@ -55,6 +54,7 @@ soong.workflow.record tree,form [('users_ids', 'in', [uid]), ('reclaim_state', '=', False)] + @@ -63,6 +63,7 @@ soong.workflow.record tree,form [('users_ids', 'in', [uid]), ('reclaim_state', '=', True)] + diff --git a/soong_workflow/wizard/soong_workflow_comment_wizard.py b/soong_workflow/wizard/soong_workflow_comment_wizard.py index 889659936..5272c91aa 100644 --- a/soong_workflow/wizard/soong_workflow_comment_wizard.py +++ b/soong_workflow/wizard/soong_workflow_comment_wizard.py @@ -52,7 +52,7 @@ class SoongWorkflowCommentWizard(models.TransientModel): def onchange_employee_ids(self): record_id = self.env[self.res_model].search([('id', '=', self.res_id)]) for ret in self.return_link_id: - if ret.name == '拟办': + if ret.name in ['拟办', '申请人']: self.employee_ids = record_id.users_id.employee_id elif self.node_btn_name == '退回': next_list = [] @@ -79,10 +79,23 @@ class SoongWorkflowCommentWizard(models.TransientModel): def onchange_trans_employee_ids(self): record_id = self.env[self.res_model].search([('id', '=', self.res_id)]) for ret in self.trans_link_id: + workflow_id = self.trans_link_id.node_button_id.workflow_id + state_list = ['拟办' if i.node_name == 'start' else i.node_name for i in workflow_id.node_ids] + link_users_id = workflow_id.node_ids.search([('name', '=', self.trans_link_id.name), ('workflow_id', '=', workflow_id.id)]).button_ids[0].users_role_id + next_is_automatic = workflow_id.node_ids.search([('name', '=', self.trans_link_id.name), ('workflow_id', '=', workflow_id.id)]).button_ids[0].is_automatic + # 不自动匹配 + employee_user_role_ids = self.env['hr.employee'].search( + ['|', ('user_role_id', '=', link_users_id.id), ('user_role_ids', 'in', link_users_id.id)]) + # 自动匹配 + employee_user_role_id = self.env['hr.employee'].search( + ['|', ('user_role_id', '=', link_users_id.id), + ('user_role_ids', 'in', link_users_id.id), '|', '&', + ('department_id', '=', record_id.department_id.id), + ('department_ids', 'in', record_id.department_id.id), + ('yuthon_company', '=', record_id.create_uid.employee_id.yuthon_company)]) + self.employee_ids = employee_user_role_ids if not next_is_automatic else employee_user_role_id if self.node_btn_name == '退回': next_list = [] - workflow_id = self.trans_link_id.node_button_id.workflow_id - state_list = ['拟办' if i.node_name == 'start' else i.node_name for i in workflow_id.node_ids] self_state = state_list.index(ret.name) button_ids = workflow_id.node_ids[self_state].button_ids for btn in button_ids: @@ -116,7 +129,7 @@ class SoongWorkflowCommentWizard(models.TransientModel): self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa', user_id=employee.wecom_userid, title=record_id._description, - description="您有新的抄送审批单 {} 请及时查看\n".format( + description="标题: {}\n".format( record_id.name) + self.env.user.name + ' ' + str( fields.Datetime.now() + timedelta(hours=8)), url=url, btntxt="查看详情") @@ -134,7 +147,7 @@ class SoongWorkflowCommentWizard(models.TransientModel): self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa', user_id=employee.wecom_userid, title=record_id._description, - description="您有新的审批单 {} 请及时查看\n".format( + description="标题: {}\n".format( record_id.name) + self.env.user.name + ' ' + str( fields.Datetime.now() + timedelta( hours=8)), @@ -149,7 +162,7 @@ class SoongWorkflowCommentWizard(models.TransientModel): self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa', user_id=employee.wecom_userid, title=record_id._description, - description="您有新的审批单 {} 被退回请及时查看\n".format( + description="标题: {}\n".format( record_id.name) + self.env.user.name + ' ' + str( fields.Datetime.now() + timedelta( hours=8)), @@ -170,7 +183,7 @@ class SoongWorkflowCommentWizard(models.TransientModel): self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa', user_id=employee.wecom_userid, title=record_id._description, - description="您有新的传阅审批单 {} 请及时查看\n".format( + description="标题: {}\n".format( record_id.name) + self.env.user.name + ' ' + str( fields.Datetime.now() + timedelta(hours=8)), url=url, btntxt="查看详情") diff --git a/yuthon_will_task/models/yuthon_will_task.py b/yuthon_will_task/models/yuthon_will_task.py index 8eb3e9cf7..017393532 100644 --- a/yuthon_will_task/models/yuthon_will_task.py +++ b/yuthon_will_task/models/yuthon_will_task.py @@ -44,9 +44,6 @@ class YuthonWillTask(models.Model): min_start = start_time.minute if day_now == day_start and hour_now == hour_start and min_now == min_start: task.add_comment() - else: - if now.day == start_time.day and now.hour == start_time.hour and now.minute == start_time.minute: - task.add_comment() def _compute_duration(self, task_time): if task_time.task_unit == 'min': @@ -65,7 +62,7 @@ class YuthonWillTask(models.Model): raise UserError("请同步{}的企业微信".format(employee_id.name)) url = "https://oa.thtzjt.com/mail/view?model={}&res_id={}".format(self._name, self.id) self.sudo().env["wecom.apps"].sync_send_message_textcard(category='task', user_id=employee_id.wecom_userid, - title="日程事项提醒", description=self.task_content, + title="日程事项提醒", description="事项名称: " + self.task_content + '\t' + self.start_time, url=url, btntxt="详细信息") for record in self: partner_ids = record.employee_ids.user_id.partner_id.ids diff --git a/yuthon_will_task/views/yuthon_will_task_views.xml b/yuthon_will_task/views/yuthon_will_task_views.xml index f29004a26..8878e065e 100644 --- a/yuthon_will_task/views/yuthon_will_task_views.xml +++ b/yuthon_will_task/views/yuthon_will_task_views.xml @@ -15,7 +15,7 @@ - +