1
This commit is contained in:
@@ -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')))
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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 '',
|
||||
},
|
||||
}
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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="节点名称")
|
||||
|
||||
@@ -66,11 +66,16 @@
|
||||
parent="menu_soong_other_setting"
|
||||
action="action_soong_workflow_log"
|
||||
sequence="2"/>
|
||||
<menuitem id="menu_trans_link_action_setting"
|
||||
name="工作流节点配置(后台测试)"
|
||||
parent="menu_soong_other_setting"
|
||||
action="trans_link_action"
|
||||
sequence="3"/>
|
||||
<menuitem id="menu_soong_approval_note"
|
||||
name="常用审批意见"
|
||||
parent="menu_soong_other_setting"
|
||||
action="soong_note_action"
|
||||
sequence="3"/>
|
||||
sequence="4"/>
|
||||
<menuitem id="menu_soong_approval_setting"
|
||||
name="常用审批设置"
|
||||
parent="menu_soong_other_setting"
|
||||
|
||||
@@ -24,8 +24,7 @@
|
||||
<field name="name" required="1"/>
|
||||
<field name="user_type"/>
|
||||
<field name="department_id"/>
|
||||
<field name="personnel_ids" widget="many2many_tags" column_invisible="1"/>
|
||||
<field name="personnel"/>
|
||||
<field name="personnel_ids" widget="many2many_tags"/>
|
||||
<field name="number_people"/>
|
||||
<field name="pinyin_name" column_invisible="1"/>
|
||||
<field name="parent_id"/>
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
<group>
|
||||
<field name="name" placeholder="ex. 'Draft' or 'Direct Manager'" required="1"/>
|
||||
<field name="node_name" placeholder="ex. 'draft' or 'direct_manager'" required="1"/>
|
||||
<field name="department_id" widget="many2many_tags"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="sequence" required="1"/>
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree editable="bottom">
|
||||
<field name="sequence"/>
|
||||
<field name="name"/>
|
||||
<field name="node_button_id"/>
|
||||
<field name="link_type"/>
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
</group>
|
||||
<group invisible="node_btn_name != '分发'">
|
||||
<field name="comment_note_id" require="1" string="分发意见"/>
|
||||
<field name="employee_ids" widget="many2many_tags" string="董事长"/>
|
||||
<field name="employee_ids" widget="many2many_tags" string="董事长" domain="[('user_role_id.name', '=', '董事长')]"/>
|
||||
<field name="circulated_employee_ids" widget="many2many_tags"/>
|
||||
<field name="supervising_employee_ids" widget="many2many_tags" invisible="not is_supervising"/>
|
||||
</group>
|
||||
|
||||
@@ -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='小时')
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
<field name="is_hour"/>
|
||||
<field name="is_day"/>
|
||||
<field name="department_id" invisible="1"/>
|
||||
<field name="user_role_id" invisible="1"/>
|
||||
<field name="is_issues" invisible="1"/>
|
||||
</group>
|
||||
<group>
|
||||
|
||||
Reference in New Issue
Block a user