160 lines
9.5 KiB
Python
160 lines
9.5 KiB
Python
# -*- coding: utf-8 -*-
|
|
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
|
|
|
from odoo import fields, models, api
|
|
from odoo.exceptions import UserError, ValidationError
|
|
|
|
|
|
class SoongApprovalNoticeWizard(models.TransientModel):
|
|
_name = "soong.approval.notice.wizard"
|
|
_description = "Soong Workflow Comment Wizard"
|
|
|
|
|
|
class SoongWorkflowCommentWizard(models.TransientModel):
|
|
_name = "soong.workflow.comment.wizard"
|
|
_description = "Soong Workflow Comment Wizard"
|
|
|
|
res_model = fields.Char()
|
|
res_id = fields.Integer()
|
|
log_ids = fields.Many2many(comodel_name="soong.workflow.log")
|
|
node_btn_id = fields.Many2one(comodel_name="soong.workflow.node.button")
|
|
node_btn_name = fields.Char(string="动作名称", related='node_btn_id.name')
|
|
node_link_len = fields.Char(string="转交2")
|
|
|
|
comment_note_id = fields.Many2one('soong.note', string="意见")
|
|
state_list = fields.Char(string="状态列表")
|
|
|
|
record_id = fields.Integer()
|
|
trans_link_id = fields.Many2one('trans.link', string='转交节点')
|
|
return_link_id = fields.Many2one('trans.link', string='退回节点')
|
|
|
|
employee_ids = fields.Many2many('hr.employee', 'employee_ids_rel',
|
|
'custom_id', 'employee_id',
|
|
string="传阅人员", store=True)
|
|
circulated_employee_ids = fields.Many2many('hr.employee', 'circulated_employee_rel',
|
|
'custom_id', 'employee_id',
|
|
string="传阅人员", store=True)
|
|
supervising_employee_ids = fields.Many2many('hr.employee', 'supervising_employee_rel',
|
|
'custom_id', 'employee_id',
|
|
string="督办人员", store=True)
|
|
|
|
is_automatic = fields.Boolean('是否自动匹配')
|
|
|
|
@api.onchange('record_id')
|
|
def _onchange_record_id(self):
|
|
record_id = self.env[self.res_model].search([('id', '=', self.res_id)])
|
|
self.record_id = record_id
|
|
|
|
@api.onchange('return_link_id')
|
|
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 == '拟办':
|
|
self.employee_ids = record_id.users_id.employee_id
|
|
elif self.node_btn_name == '退回':
|
|
next_list = []
|
|
workflow_id = self.return_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:
|
|
next_list.append(btn.name)
|
|
if '转交' not in next_list:
|
|
raise UserError('配置错误,请配置当前{}的转交按钮'.format(btn.name))
|
|
else:
|
|
if btn.is_automatic:
|
|
employee_user_role_id = self.env['hr.employee'].search(
|
|
[('user_role_id', '=', btn.users_role_id.id),
|
|
('department_id', '=', record_id.department_id.id)])
|
|
self.employee_ids = employee_user_role_id
|
|
else:
|
|
employee_user_role_ids = self.env['hr.employee'].search(
|
|
[('user_role_id', '=', btn.users_role_id.id)])
|
|
self.employee_ids = employee_user_role_ids
|
|
|
|
@api.onchange('trans_link_id')
|
|
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:
|
|
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:
|
|
next_list.append(btn.name)
|
|
if '转交' not in next_list:
|
|
raise UserError('配置错误,请配置当前{}的转交按钮'.format(btn.name))
|
|
else:
|
|
if btn.is_automatic:
|
|
employee_user_role_id = self.env['hr.employee'].search(
|
|
[('user_role_id', '=', btn.users_role_id.id),
|
|
('department_id', '=', record_id.department_id.id)])
|
|
self.employee_ids = employee_user_role_id
|
|
else:
|
|
employee_user_role_ids = self.env['hr.employee'].search(
|
|
[('user_role_id', '=', btn.users_role_id.id)])
|
|
self.employee_ids = employee_user_role_ids
|
|
|
|
def add_comment(self):
|
|
self.ensure_one()
|
|
cx = self.env.context.copy() or {}
|
|
record_id = self.env[self.res_model].search([('id', '=', self.res_id)])
|
|
# 抄送人员
|
|
if self.node_btn_name == '转交':
|
|
self_node_id = record_id.workflow_id.node_ids.search(
|
|
[('name', '=', record_id.state), ('workflow_id', '=', record_id.workflow_id.id)])
|
|
if self_node_id.is_carbon_copy:
|
|
for employee in self_node_id.employee_ids:
|
|
if not employee.wecom_userid:
|
|
raise ("请同步{}的企业微信".format(employee.name))
|
|
url = "https://oa.thtzjt.com/mail/view?model={}&res_id={}".format(self.res_model, record_id.id)
|
|
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa',
|
|
user_id=employee.wecom_userid,
|
|
title=record_id.name + "审批抄送提醒",
|
|
description="您有新的抄送提醒请及时查看",
|
|
url=url, btntxt="详细信息")
|
|
# 转交逻辑--单线
|
|
if not self.node_link_len:
|
|
state = self.node_btn_id.node_id.out_link_ids.name.split('-> ')[-1]
|
|
record_id.write({'state': 'end' if state == '结束' else state})
|
|
# 转交逻辑--多线
|
|
if self.node_link_len:
|
|
record_id.write({'state': 'end' if self.trans_link_id.name == '结束' else self.trans_link_id.name})
|
|
url = 'https://oa.thtzjt.com/mail/view?model={}&res_id={}'.format(self.res_model, self.res_id)
|
|
for employee in self.employee_ids:
|
|
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa', user_id=employee.wecom_userid,
|
|
title=record_id.name,
|
|
description="您有新的审批单请及时处理",
|
|
url=url, btntxt="详情")
|
|
return self.node_btn_id.with_context(cx).run()
|
|
if self.node_btn_name == '退回':
|
|
record_id.write({'state': 'start' if self.return_link_id.name == '拟办' else self.return_link_id.name})
|
|
url = 'https://oa.thtzjt.com/mail/view?model={}&res_id={}'.format(self.res_model, self.res_id)
|
|
for employee in self.employee_ids:
|
|
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa', user_id=employee.wecom_userid,
|
|
title=record_id.name,
|
|
description="您的审批单已被退回,请查看详情",
|
|
url=url, btntxt="详情")
|
|
return self.node_btn_id.with_context(cx).run()
|
|
# 填写审批记录
|
|
if self.node_btn_name != '加签':
|
|
self.log_ids.write({"comment": self.comment_note_id.name})
|
|
# 加签人员写入
|
|
if self.node_btn_name == '加签':
|
|
record_id.approval_sign_ids = self.approval_users_ids
|
|
if self.node_btn_name == '分发':
|
|
if self.circulated_employee_ids:
|
|
url = 'https://oa.thtzjt.com/mail/view?model={}&res_id={}'.format(self.res_model, self.res_id)
|
|
for employee in self.circulated_employee_ids:
|
|
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa',
|
|
user_id=employee.wecom_userid,
|
|
title=record_id.name,
|
|
description="传阅审批单,请知晓",
|
|
url=url, btntxt="详情")
|
|
if self.employee_ids:
|
|
state = self.node_btn_id.node_id.out_link_ids.name.split('-> ')[-1]
|
|
record_id.write({'state': 'end' if state == '结束' else state})
|
|
return self.node_btn_id.with_context(cx).run()
|