添加功能
This commit is contained in:
@@ -49,16 +49,18 @@ class SoongWorkflow(models.Model):
|
||||
text = fields.Text(string="描述")
|
||||
end_date = fields.Date(string="失效日期", copy=False, default=fields.Date.from_string('2099-01-01'))
|
||||
is_enable = fields.Boolean(string="是否启用", compute="compute_is_enable", store=True)
|
||||
is_department_query = fields.Boolean(string="支持部门查询", default=True)
|
||||
is_enable_return_button = fields.Boolean(string="是否启用收回", default=True)
|
||||
is_enable_transmitted_button = fields.Boolean(string="是否启用转交", default=True)
|
||||
is_ease = fields.Boolean(string="是否简化流程")
|
||||
approvals_group_id = fields.Many2one('soong.approval.group', string="审批分组")
|
||||
department_role_ids = fields.Many2many('hr.department', string="授权部门范围", store=True)
|
||||
user_role_ids = fields.Many2many('soong.user.role', 'soong_workflow_user_role_rel', 'workflow_id', 'user_role_id', string="授权范围", store=True)
|
||||
user_role_ids = fields.Many2many('soong.user.role', 'soong_workflow_user_role_rel', 'workflow_id', 'user_role_id', string="流程管理员", store=True)
|
||||
is_user_department_role = fields.Boolean(string="是否有权限查看", store=False, search="_search_is_user_department_role")
|
||||
archive_type = fields.Selection([('applicant', '当前申请人'), ('employee', '人员'), ('role', '角色')], string="归档类型", default="applicant")
|
||||
employee_ids = fields.Many2many('hr.employee', string="人员")
|
||||
excel_template = fields.Binary(string="Excel模板", attachment=True, help="上传自定义的Excel模板文件")
|
||||
|
||||
excel_template_name = fields.Char(string="模板文件名")
|
||||
role_ids = fields.Many2many('soong.user.role', 'soong_workflow_role_rel', 'workflow_id', 'user_role_id', string="角色")
|
||||
|
||||
@@ -124,20 +126,6 @@ class SoongWorkflow(models.Model):
|
||||
def _search_is_user_department_role(self, operator, value):
|
||||
id_list = []
|
||||
if self.env.user.has_group("soong_workflow.group_soong_workflow_user"):
|
||||
# 查询主权限的
|
||||
for user_role_id in self.env.user.employee_id.user_role_id.ids:
|
||||
child_list = [user_role_id]
|
||||
self.search_user_role_child_ids(user_role_id, child_list)
|
||||
for child_id in child_list:
|
||||
id_list += self.sudo().with_context(active_test=False).search([("user_role_ids", "in", [child_id])]).ids
|
||||
|
||||
# 查询辅助权限
|
||||
for user_role_id in self.env.user.employee_id.user_role_ids.ids:
|
||||
child_list = [user_role_id]
|
||||
self.search_user_role_child_ids(user_role_id, child_list)
|
||||
for child_id in child_list:
|
||||
id_list += self.sudo().with_context(active_test=False).search([("user_role_ids", "in", [child_id])]).ids
|
||||
|
||||
# 查询部门的权限
|
||||
for department_id in self.env.user.employee_id.department_id.ids:
|
||||
child_list = [department_id]
|
||||
|
||||
@@ -484,9 +484,14 @@ class SoongWorkflowRecord(models.Model):
|
||||
return [('company_id', 'not in', company_ids)]
|
||||
|
||||
@api.depends_context('uid', 'company')
|
||||
@api.depends('department_id', 'employee_ids')
|
||||
@api.depends('department_id', 'employee_ids', 'workflow_id')
|
||||
def _compute_part_of_department(self):
|
||||
user_employee = self._get_valid_employee_for_user()
|
||||
# 当前用户的所有角色(主角色 + 辅助角色)
|
||||
user_all_role_ids = set(
|
||||
user_employee.user_role_id.ids + user_employee.user_role_ids.ids
|
||||
)
|
||||
active_company_ids = self.env.companies
|
||||
active_department = user_employee.department_id
|
||||
department_ids = []
|
||||
if active_department:
|
||||
@@ -498,9 +503,17 @@ class SoongWorkflowRecord(models.Model):
|
||||
])
|
||||
for record in self:
|
||||
record.member_of_department = False
|
||||
if record.employee_ids and valid_employee_ids:
|
||||
has_valid_employee = bool(record.employee_ids & valid_employee_ids)
|
||||
record.member_of_department = has_valid_employee
|
||||
# 1. 流程管理员:角色在 workflow_id.user_role_ids 中,按本公司判断
|
||||
if user_all_role_ids and record.workflow_id.user_role_ids:
|
||||
if set(record.workflow_id.user_role_ids.ids) & user_all_role_ids:
|
||||
record.member_of_department = record.company_id in active_company_ids
|
||||
continue
|
||||
# 2. 支持部门查询:普通用户按本部门判断
|
||||
if record.workflow_id.is_department_query:
|
||||
if record.employee_ids and valid_employee_ids:
|
||||
record.member_of_department = bool(record.employee_ids & valid_employee_ids)
|
||||
continue
|
||||
# 3. 不支持部门查询且非管理员:False
|
||||
|
||||
@api.depends('create_uid', 'employee_ids')
|
||||
def _compute_is_unlink(self):
|
||||
@@ -566,13 +579,36 @@ class SoongWorkflowRecord(models.Model):
|
||||
|
||||
def _search_part_of_department(self, operator, value):
|
||||
user_employee = self._get_valid_employee_for_user()
|
||||
user_all_role_ids = user_employee.user_role_id.ids + user_employee.user_role_ids.ids
|
||||
|
||||
# 本部门逻辑(仅支持部门查询的流程)
|
||||
active_department = user_employee.department_id
|
||||
department_ids = []
|
||||
if active_department:
|
||||
department_ids = self.env['hr.department'].search([
|
||||
('id', 'child_of', active_department.id)
|
||||
]).ids
|
||||
domain = [('department_id', 'in', department_ids)]
|
||||
# 支持部门查询 + 本部门
|
||||
dept_domain = [
|
||||
'&',
|
||||
('workflow_id.is_department_query', '=', True),
|
||||
('department_id', 'in', department_ids),
|
||||
]
|
||||
|
||||
# 流程管理员逻辑:角色匹配且同公司(不限部门查询)
|
||||
company_ids = self.env.companies.ids
|
||||
admin_domain = [
|
||||
'&',
|
||||
('workflow_id.user_role_ids', 'in', user_all_role_ids),
|
||||
('company_id', 'in', company_ids),
|
||||
]
|
||||
|
||||
# 管理员 OR 部门查询
|
||||
if user_all_role_ids:
|
||||
domain = ['|'] + admin_domain + dept_domain
|
||||
else:
|
||||
domain = dept_domain
|
||||
|
||||
if (operator == '=' and not value) or (operator == '!=' and value):
|
||||
domain = ['!'] + domain
|
||||
return domain
|
||||
|
||||
@@ -459,22 +459,22 @@
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">soong.workflow.record</field>
|
||||
<field name="view_mode">tree,kanban,search</field>
|
||||
<field name="domain">[('reclaim_state', '=', False), ('approve_state','!=','start'),('approvals_group_id.name', 'not in', ['考勤', '人事']), '|', ('users_ids', 'in', [uid]), ('member_of_department', '=', True)]</field>
|
||||
<field name="domain">[('reclaim_state', '=', False), ('approve_state','!=','start'), '|', ('users_ids', 'in', [uid]), ('member_of_department', '=', True)]</field>
|
||||
<field name="context">{'search_default_my_department_shifts': True, 'default_order': 'display_end_time desc'}</field>
|
||||
<field name="search_view_id" ref="soong_workflow_record_search1"/>
|
||||
<field name="view_id" ref="soong_workflow_record_department_tree"/>
|
||||
</record>
|
||||
<record id="soong_workflow_hr_employee_action" model="ir.actions.act_window">
|
||||
<field name="name">人事相关流程</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">soong.workflow.record</field>
|
||||
<field name="view_mode">tree,kanban,search</field>
|
||||
<field name="domain">[('is_company', '=', True), ('reclaim_state', '=', False), '|', ('approvals_group_id.name', '=', '人力资源'),
|
||||
('approvals_group_id.name', 'in', ['考勤','人事']), ('approve_state', '!=', 'start')]
|
||||
</field>
|
||||
<field name="context">{'default_order': 'display_end_time desc'}</field>
|
||||
<field name="search_view_id" ref="soong_workflow_record_search"/>
|
||||
</record>
|
||||
<!-- <record id="soong_workflow_hr_employee_action" model="ir.actions.act_window">-->
|
||||
<!-- <field name="name">人事相关流程</field>-->
|
||||
<!-- <field name="type">ir.actions.act_window</field>-->
|
||||
<!-- <field name="res_model">soong.workflow.record</field>-->
|
||||
<!-- <field name="view_mode">tree,kanban,search</field>-->
|
||||
<!-- <field name="domain">[('is_company', '=', True), ('reclaim_state', '=', False), '|', ('approvals_group_id.name', '=', '人力资源'),-->
|
||||
<!-- ('approvals_group_id.name', 'in', ['考勤','人事']), ('approve_state', '!=', 'start')]-->
|
||||
<!-- </field>-->
|
||||
<!-- <field name="context">{'default_order': 'display_end_time desc'}</field>-->
|
||||
<!-- <field name="search_view_id" ref="soong_workflow_record_search"/>-->
|
||||
<!-- </record>-->
|
||||
<record id="soong_workflow_other_record_action" model="ir.actions.act_window">
|
||||
<field name="name">流程查询</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
|
||||
@@ -42,6 +42,7 @@
|
||||
<field name="start_date"/>
|
||||
<field name="end_date"/>
|
||||
<field name="is_enable"/>
|
||||
<field name="is_department_query"/>
|
||||
<field name="approvals_group_id"/>
|
||||
<field name="user_role_ids" widget="many2many_tags"/>
|
||||
<field name="department_role_ids" widget="many2many_tags"/>
|
||||
|
||||
Reference in New Issue
Block a user