# -*- 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 == '退回': 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_id = workflow_id.node_ids[self_state].button_ids[1] if button_id.name != '转交': raise UserError('配置错误,请配置当前{}的转交按钮'.format(self_state)) if button_id.is_automatic: employee_user_role_ids = self.env['hr.employee'].search([('user_role_id', '=', button_id.users_role_id.id)]) employee_user_role_id = self.env['hr.employee'].search( [('user_role_id', '=', button_id.users_role_id.id), ('department_id', '=', record_id.department_id.id)]) self.employee_ids = employee_user_role_ids if not button_id.is_automatic else employee_user_role_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 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="审批抄送提醒", description="您有新的抄送提醒请及时查看", url=url, btntxt="详细信息") # 转交逻辑--单线 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()