diff --git a/soong_workflow/views/soong_workflow_record.xml b/soong_workflow/views/soong_workflow_record.xml index f3ccde854..22b5b3e09 100644 --- a/soong_workflow/views/soong_workflow_record.xml +++ b/soong_workflow/views/soong_workflow_record.xml @@ -130,7 +130,7 @@ ir.actions.act_window soong.workflow.record tree,kanban,search - [('reclaim_state', '=', False), '|', ('approvals_group_id.name', '=', '人力资源'), ('approvals_group_id.name', '=', '考勤')] + [('reclaim_state', '=', False), '|', ('approvals_group_id.name', '=', '人力资源'), ('approvals_group_id.name', '=', '考勤'), ('member_of_department', '=', True)] @@ -160,7 +160,5 @@ - - diff --git a/soong_workflow/wizard/soong_workflow_comment_wizard.py b/soong_workflow/wizard/soong_workflow_comment_wizard.py index 91e9abcaa..047b00e71 100644 --- a/soong_workflow/wizard/soong_workflow_comment_wizard.py +++ b/soong_workflow/wizard/soong_workflow_comment_wizard.py @@ -202,49 +202,72 @@ class SoongWorkflowCommentWizard(models.TransientModel): ('user_id', '=', button.reviewer_id.id), ], limit=1) return employee - # 部门筛选条件 + + # 部门和公司筛选条件 department_domain = [] + company_domain = [] + if record_id: - # 申请人自动匹配逻辑 - if is_automatic: - department_domain = ['|', ('department_id', '=', record_id.department_id.id), ('department_ids', 'in', record_id.department_id.id)] - elif is_automatic_company or is_automatic_group: - applicant_field = None - for field_name in ['user_id', 'users_id']: - if hasattr(record_id, field_name): - applicant_field = getattr(record_id, field_name) - if applicant_field: - break - if applicant_field and hasattr(applicant_field, 'company_id'): - if is_automatic_company: - company_departments = self.env['hr.department'].search([('company_id', '=', applicant_field.company_id.id)]).ids - department_domain = ['|', ('department_id', 'in', company_departments), ('department_ids', 'in', company_departments)] - elif is_automatic_group: - parent_company = applicant_field.company_id.parent_id - group_departments = self.env['hr.department'].search([('company_id', 'child_of', parent_company.id)]).ids if parent_company else [] - department_domain = ['|', ('department_id', 'in', group_departments), ('department_ids', 'in', group_departments)] - # 登录人自动匹配逻辑 - elif is_logged_by: - department_domain = ['|', ('department_id', '=', self.env.user.department_id.id), ('department_ids', 'in', self.env.user.department_id.id)] + # 获取当前用户和申请人的相关信息 + current_user = self.env.user + applicant = None + + # 尝试获取申请人的用户对象 + for field_name in ['user_id', 'users_id']: + if hasattr(record_id, field_name): + applicant = getattr(record_id, field_name) + if applicant: + break + + # 根据勾选的条件设置域条件(只勾选一个) + if is_automatic and record_id.department_id: + # 按当前申请人自动匹配-本部门(保留部门和公司条件) + department_domain = ['|', ('department_id', '=', record_id.department_id.id), + ('department_ids', 'in', record_id.department_id.id)] + company_domain = [('company_id', '=', record_id.company_id.id)] if hasattr(record_id, + 'company_id') else [] + + elif is_automatic_company and applicant and hasattr(applicant, 'company_id'): + # 按当前申请人自动匹配-本公司(仅保留公司条件) + company_id = applicant.company_id.id + company_domain = [('company_id', '=', company_id)] + + elif is_automatic_group and applicant and hasattr(applicant, 'company_id'): + # 按当前申请人自动匹配-本集团(仅保留公司条件) + parent_company = applicant.company_id.parent_id + if parent_company: + group_company_ids = self.env['res.company'].search([('id', 'child_of', parent_company.id)]).ids + company_domain = [('company_id', 'in', group_company_ids)] + + elif is_logged_by and current_user.department_id: + # 按当前登录人自动匹配-本部门(保留部门和公司条件) + department_domain = ['|', ('department_id', '=', current_user.department_id.id), + ('department_ids', 'in', current_user.department_id.id)] + company_domain = [('company_id', '=', current_user.company_id.id)] + elif is_logged_company: - company_departments = self.env['hr.department'].search([('company_id', '=', self.env.user.company_id.id)]).ids - department_domain = ['|', ('department_id', 'in', company_departments), ('department_ids', 'in', company_departments)] + # 按当前登录人自动匹配-本公司(仅保留公司条件) + company_id = current_user.company_id.id + company_domain = [('company_id', '=', company_id)] + elif is_logged_group: - parent_company = self.env.user.company_id.parent_id - group_departments = self.env['hr.department'].search([('company_id', 'child_of', parent_company.id)]).ids if parent_company else [] - department_domain = ['|',('department_id', 'in', group_departments), - ('department_ids', 'in', group_departments)] + # 按当前登录人自动匹配-本集团(仅保留公司条件) + parent_company = current_user.company_id.parent_id + if parent_company: + group_company_ids = self.env['res.company'].search([('id', 'child_of', parent_company.id)]).ids + company_domain = [('company_id', 'in', group_company_ids)] + # 角色筛选 if link_users_id: role_domain = ['|', ('user_role_id', '=', link_users_id.id), ('user_role_ids', 'in', link_users_id.id)] - company_domain = [('company_id', '=', self.env.user.company_id.id)] domain = role_domain + company_domain + department_domain return self.env['hr.employee'].sudo().search(domain) elif link_users_group_ids: - role_domain = ['|', ('user_role_id', 'in', link_users_group_ids.user_role_ids.ids), ('user_role_ids', 'in', link_users_group_ids.user_role_ids.ids)] - company_domain = [('company_id', '=', self.env.user.company_id.id)] + role_domain = ['|', ('user_role_id', 'in', link_users_group_ids.user_role_ids.ids), + ('user_role_ids', 'in', link_users_group_ids.user_role_ids.ids)] domain = role_domain + company_domain + department_domain return self.env['hr.employee'].sudo().search(domain) + # 特殊分发按钮 if '分发' in link.name and record_id and hasattr(record_id, 'users_id'): return record_id.users_id.employee_id diff --git a/yuthon_notice/views/yuthon_notice_views.xml b/yuthon_notice/views/yuthon_notice_views.xml index f71012775..9d803fcce 100644 --- a/yuthon_notice/views/yuthon_notice_views.xml +++ b/yuthon_notice/views/yuthon_notice_views.xml @@ -13,7 +13,6 @@ -