添加功能

This commit is contained in:
李鹏宇
2026-06-26 18:14:41 +08:00
parent 7a2add8f0c
commit 99722c8e90
4 changed files with 57 additions and 32 deletions
+3 -15
View File
@@ -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]
+41 -5
View File
@@ -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
+12 -12
View File
@@ -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"/>