89 lines
4.6 KiB
Python
89 lines
4.6 KiB
Python
# -*- coding: utf-8 -*-
|
|
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
|
|
|
from odoo import fields, models, api
|
|
|
|
|
|
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="意见")
|
|
comment_type = fields.Selection(related="comment_note_id.type", string="意见类型")
|
|
comment_return_type = fields.Char(related="comment_note_id.return_type", string="退回类型")
|
|
state_list = fields.Char(string="状态列表")
|
|
notice_message = fields.Char(string="消息通知")
|
|
|
|
record_id = fields.Integer()
|
|
trans_link_id = fields.Many2one('trans.link', string='转交节点')
|
|
return_link_id = fields.Many2one('trans.link', string='退回节点')
|
|
|
|
send_type = fields.Selection([('send', '分发'), ('super', '督办')], default='send', string="动作类型")
|
|
department_id = fields.Many2one('hr.department', string="承办部门")
|
|
start_date = fields.Date(string="开始日期", default=fields.Date.today())
|
|
end_date = fields.Date(string="结束日期")
|
|
|
|
department_ids = fields.Many2many('hr.department', string='部门范围')
|
|
employee_ids = fields.Many2many('hr.employee', string='人员范围')
|
|
users_role_ids = fields.Many2many('soong.user.role', string='角色范围')
|
|
approval_users_ids = fields.Many2many('res.users', string="传阅/督办人员", compute="compute_approval_users_ids", store=True)
|
|
|
|
is_automatic = fields.Boolean('是否自动识别')
|
|
|
|
@api.depends('department_ids', 'employee_ids', 'users_role_ids')
|
|
def compute_approval_users_ids(self):
|
|
department_users_list = []
|
|
users_role_list = []
|
|
for users in self:
|
|
if users.department_ids:
|
|
for depart in users.department_ids:
|
|
department_users_data = users.env['hr.employee'].search([('department_id', '=', depart.id.origin)])
|
|
department_users_list = [de.user_id.id for de in department_users_data]
|
|
if depart.child_ids:
|
|
for child in depart.child_ids:
|
|
department_child_users_data = users.env['hr.employee'].search(
|
|
[('department_id', '=', child.id.origin)])
|
|
department_users_list += [de.user_id.id for de in department_child_users_data]
|
|
employee_users_list = users.employee_ids.user_id.ids
|
|
if users.users_role_ids:
|
|
for user_id in users.users_role_ids:
|
|
user_role_data = users.env['hr.employee'].search(
|
|
['|', ('user_role_id', '=', user_id.id.origin), ('user_role_ids', '=', user_id.id.origin)])
|
|
users_role_list = [ro.user_id.id for ro in user_role_data]
|
|
publish_user_list = department_users_list + employee_users_list + users_role_list
|
|
false_none_list = [x for x in publish_user_list if x != False]
|
|
users.approval_users_ids = [(6, 0, list(set(false_none_list)))]
|
|
|
|
@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
|
|
|
|
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 not self.node_link_len and self.node_btn_name == '转交':
|
|
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})
|
|
if self.node_btn_name == '退回':
|
|
record_id.write({'state': 'start' if self.return_link_id.name == '拟办' else self.return_link_id.name})
|
|
# 填写审批记录
|
|
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
|
|
return self.node_btn_id.with_context(cx).run()
|