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 @@
+