From 19a5d4160ea8802f274e940fee1182a411c6f3f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=AE=87?= Date: Sun, 16 Feb 2025 18:13:06 +0800 Subject: [PATCH] 1 --- soong_workflow/models/soong_user_role.py | 22 +------ soong_workflow/models/soong_workflow.py | 2 +- soong_workflow/models/soong_workflow_mixin.py | 58 ++++++++----------- soong_workflow/models/soong_workflow_node.py | 1 + soong_workflow/models/trans_link.py | 1 + soong_workflow/views/menuitem.xml | 7 ++- .../views/soong_user_role_views.xml | 3 +- .../views/soong_workflow_node_views.xml | 1 + soong_workflow/views/trans_link_views.xml | 1 + .../soong_workflow_comment_wizard_view.xml | 2 +- yuthon_holiday/models/inherit_hr_leave.py | 1 + yuthon_holiday/views/hr_leave_batch.xml | 1 + 12 files changed, 43 insertions(+), 57 deletions(-) diff --git a/soong_workflow/models/soong_user_role.py b/soong_workflow/models/soong_user_role.py index e67153b01..1b6416302 100644 --- a/soong_workflow/models/soong_user_role.py +++ b/soong_workflow/models/soong_user_role.py @@ -18,9 +18,9 @@ class YuthonUserRole(models.Model): end_time = fields.Date(string="结束时间") parent_id = fields.Many2one('soong.user.role', string='上级角色', index=True) personnel_ids = fields.Many2many('hr.employee', string='在岗人员', compute='_compute_employee_ids', store=True) - personnel = fields.Text(string="在岗人员", compute='_compute_personnel', store=True) + number_people = fields.Integer(string="在岗人数", compute='_compute_employee_ids', store=True) + personnel = fields.Text(string="在岗人员", store=True) employee_ids = fields.One2many('hr.employee', 'user_role_id') - number_people = fields.Integer(string="在岗人数", compute='_compute_number_people', store=True) child_ids = fields.One2many('soong.user.role', 'parent_id', string='下级角色', index=True) yuthon_company = fields.Selection([('thtz', '天河投资集团'), ('thwg', '天河物管'), ('thlc', '天河粮储'), ('thtjbb', '天河投资本部')], string="所属公司", compute='compute_company') @@ -61,29 +61,13 @@ class YuthonUserRole(models.Model): domain = expression.AND([search_domain, domain]) return self._search(domain, limit=limit, order=order) - @api.depends('number_people') def _compute_employee_ids(self): for rec in self: employee_ids = rec.env['hr.employee'].search(['|', ('user_role_id', '=', rec.id), ('user_role_ids', 'in', [rec.id])]) employee_list = [rec.id for rec in employee_ids] rec.personnel_ids = employee_list + rec.number_people = len(employee_list) - @api.depends('personnel_ids') - def _compute_number_people(self): - for record in self: - record.number_people = len(record.personnel_ids) - - @api.depends('personnel_ids') - def _compute_personnel(self): - for rec in self: - employee_list = [personnel.name for personnel in rec.personnel_ids] - rec.personnel = ','.join(employee_list) - - # @api.onchange('personnel_ids') - # def _onchange_personnel_ids(self): - # for employee in self.personnel_ids: - # if self.id not in employee.user_role_ids.ids: - # employee.user_role_ids = [(4, self.id)] def f5_new(self): job_ids = self.env["soong.user.role"].browse(self._context.get('active_ids', self._context.get('active_id'))) diff --git a/soong_workflow/models/soong_workflow.py b/soong_workflow/models/soong_workflow.py index d70fb917a..9e4b84404 100644 --- a/soong_workflow/models/soong_workflow.py +++ b/soong_workflow/models/soong_workflow.py @@ -76,7 +76,7 @@ class SoongWorkflow(models.Model): default.update({ 'name': self.name + '-v' + str(workflow_version), 'model_id': False, - 'remove_default_attrs_mod': self.remove_default_attrs_mod, + # 'remove_default_attrs_mod': self.remove_default_attrs_mod, 'current_stage_highlight_color': self.current_stage_highlight_color, }) res = super(SoongWorkflow, self).copy(default) diff --git a/soong_workflow/models/soong_workflow_mixin.py b/soong_workflow/models/soong_workflow_mixin.py index d3f4f2b21..b508ca5ef 100644 --- a/soong_workflow/models/soong_workflow_mixin.py +++ b/soong_workflow/models/soong_workflow_mixin.py @@ -7,6 +7,7 @@ from odoo.exceptions import UserError from datetime import datetime, date, time, timedelta from lxml import etree import logging +import ast _logger = logging.getLogger(__name__) @@ -74,7 +75,6 @@ class SoongWorkflowMixin(models.AbstractModel): string="审批明细") approval_sign_ids = fields.Many2many('res.users', store=False, compute="_compute_approval_sign_ids", string="加签人员") - @api.depends("node_id", "log_ids") def _compute_approval_sign_ids(self): for record in self: @@ -347,10 +347,11 @@ class SoongWorkflowMixin(models.AbstractModel): def _add_comment(self, logs, btn_rec): wizard = self.env.ref("soong_workflow.view_soong_workflow_comment_wizard") # 状态列表 - state_list = ['拟办' if i.node_name == 'start' else i.node_name for i in btn_rec.workflow_id.node_ids] + state_list = [i.node_name for i in btn_rec.workflow_id.node_ids] # 当前节点状态 - self_state = state_list.index('拟办' if self.state == 'start' else self.state) + self_state = state_list.index(self.state) self.env['trans.link'].search([]).unlink() + # 退回节点根据日志进行判断 if btn_rec.name == '退回': for state in state_list[0:self_state]: self.env['trans.link'].create({ @@ -375,33 +376,26 @@ class SoongWorkflowMixin(models.AbstractModel): "default_node_link_len": '转交2' if len(btn_rec.node_id.out_link_ids) > 1 and btn_rec.name == '转交' else '', }, } - # 下一个节点 - if self_state + 1 != len(state_list): - next_state = btn_rec.workflow_id.node_ids[self_state + 1].button_ids[0] - # 转交逻辑调整。之后的所有流程 - if btn_rec.name == '转交' and len(btn_rec.node_id.out_link_ids) >= 1: - for state in btn_rec.node_id.out_link_ids: - trans_link_id = self.env['trans.link'].create({ - 'node_button_id': btn_rec.id, - 'name': state.name.split('-> ')[1], - 'link_type': 'trans', - 'record_id': self.id, - }) - # 不自动匹配 - employee_user_role_ids = self.env['hr.employee'].search( - ['|', ('user_role_id', '=', next_state.users_role_id.id), - ('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), - '|', ('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.ids if not next_state.is_automatic else employee_user_role_id.ids - if not employee_ids: - state = btn_rec.workflow_id.node_ids[self_state + 1] - raise UserError('请配置{}的角色人员'.format(state.name)) - if btn_rec.name == '分发': - employee_ids = [self.env['hr.employee'].search([('user_role_id.name', '=', '董事长')])[0].id] + if btn_rec.name == '转交': + for i in btn_rec.workflow_id.node_ids[self_state:]: + for node in i.out_link_ids: + if len(i.out_link_ids) > 1: + if node.node_to.button_ids[0].btn_hide: + if node.node_to.button_ids[0].review_type == 'invisible': + domain = ast.literal_eval(node.node_to.button_ids[0].invisible_expression) + if domain[0][0] == 'user_role_id': + domain = ['|'] + domain + [('user_role_ids', '=', domain[0][2])] + employee_ids = self.env['hr.employee'].search(domain) + else: + raise UserError('多条线路分支,转交按钮必须选择隐藏条件') + elif len(i.out_link_ids) == 1: + self.env['trans.link'].create({ + 'node_button_id': btn_rec.id, + 'name': node.node_to.name, + 'sequence': node.node_to.sequence, + 'link_type': 'trans', + 'record_id': self.id, + }) # 分发督办隐藏过滤 is_supervising = False if self._module in ['yuthon_official']: @@ -419,10 +413,8 @@ class SoongWorkflowMixin(models.AbstractModel): "default_res_model": self._name, "default_log_ids": logs.ids, "default_is_supervising": is_supervising, - "default_is_automatic": next_state.is_automatic if btn_rec.name != '分发' else False, - "default_employee_ids": employee_ids, "default_node_btn_id": btn_rec.id, - "default_trans_link_id": trans_link_id.id if btn_rec.name == '转交' else False, + "default_trans_link_id": self.env['trans.link'].search([])[0].id if btn_rec.name == '转交' else False, "default_node_link_len": '转交2' if len(btn_rec.node_id.out_link_ids) > 1 and btn_rec.name == '转交' else '', }, } diff --git a/soong_workflow/models/soong_workflow_node.py b/soong_workflow/models/soong_workflow_node.py index cefa71191..038975489 100644 --- a/soong_workflow/models/soong_workflow_node.py +++ b/soong_workflow/models/soong_workflow_node.py @@ -89,6 +89,7 @@ class SoongWorkflowNode(models.Model): is_apostille = fields.Boolean(string="加签", default=False) employee_ids = fields.Many2many('hr.employee', string='抄送/传阅人员') is_end = fields.Boolean(string="结束", default=False) + department_id = fields.Many2many('hr.department', string='部门') @api.onchange("is_apostille") def onchange_is_apostille(self): diff --git a/soong_workflow/models/trans_link.py b/soong_workflow/models/trans_link.py index f6171a78a..9a477ef35 100644 --- a/soong_workflow/models/trans_link.py +++ b/soong_workflow/models/trans_link.py @@ -5,6 +5,7 @@ from odoo import api, fields, models, _ class TransLink(models.Model): _name = 'trans.link' _rec_name = 'name' + _order = 'sequence' node_button_id = fields.Many2one('soong.workflow.node.button', string="按钮") name = fields.Char(string="节点名称") diff --git a/soong_workflow/views/menuitem.xml b/soong_workflow/views/menuitem.xml index 2a76e3c50..cd68df249 100644 --- a/soong_workflow/views/menuitem.xml +++ b/soong_workflow/views/menuitem.xml @@ -66,11 +66,16 @@ parent="menu_soong_other_setting" action="action_soong_workflow_log" sequence="2"/> + + sequence="4"/> - - + diff --git a/soong_workflow/views/soong_workflow_node_views.xml b/soong_workflow/views/soong_workflow_node_views.xml index fff814e11..2f8cb419f 100644 --- a/soong_workflow/views/soong_workflow_node_views.xml +++ b/soong_workflow/views/soong_workflow_node_views.xml @@ -12,6 +12,7 @@ + diff --git a/soong_workflow/views/trans_link_views.xml b/soong_workflow/views/trans_link_views.xml index 216f1b8d6..f2689026a 100644 --- a/soong_workflow/views/trans_link_views.xml +++ b/soong_workflow/views/trans_link_views.xml @@ -6,6 +6,7 @@ tree + diff --git a/soong_workflow/wizard/soong_workflow_comment_wizard_view.xml b/soong_workflow/wizard/soong_workflow_comment_wizard_view.xml index dd49c73da..b5467821e 100644 --- a/soong_workflow/wizard/soong_workflow_comment_wizard_view.xml +++ b/soong_workflow/wizard/soong_workflow_comment_wizard_view.xml @@ -24,7 +24,7 @@ - + diff --git a/yuthon_holiday/models/inherit_hr_leave.py b/yuthon_holiday/models/inherit_hr_leave.py index 060fa61d4..01a14f740 100644 --- a/yuthon_holiday/models/inherit_hr_leave.py +++ b/yuthon_holiday/models/inherit_hr_leave.py @@ -129,6 +129,7 @@ class HolidaysRequestBatch(models.Model): index=True) users_id = fields.Many2one('res.users', string="请假人", default=lambda self: self.env.user.id) department_id = fields.Many2one(related='users_id.employee_id.department_id', string="部门") + user_role_id = fields.Many2one(related='users_id.employee_id.user_role_id', string="角色") details = fields.Text(string="假期流程说明", compute='_compute_details') days = fields.Float(string='天数') hours = fields.Float(string='小时') diff --git a/yuthon_holiday/views/hr_leave_batch.xml b/yuthon_holiday/views/hr_leave_batch.xml index 21b330646..9a29678ee 100644 --- a/yuthon_holiday/views/hr_leave_batch.xml +++ b/yuthon_holiday/views/hr_leave_batch.xml @@ -36,6 +36,7 @@ +