From 4697f4aa563dd2e7d0fbcccb70b59557af280354 Mon Sep 17 00:00:00 2001
From: zhou <123@>
Date: Fri, 23 May 2025 17:27:36 +0800
Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
room/models/room_room.py | 3 +-
room/views/room_room_views.xml | 10 ++---
.../models/inherit_res_groups.py | 38 +++++++++++++------
.../views/inherit_res_groups_views.xml | 1 -
.../views/yuthon_hr_employee_views.xml | 10 ++++-
5 files changed, 40 insertions(+), 22 deletions(-)
diff --git a/room/models/room_room.py b/room/models/room_room.py
index 33f20a261..8705f524c 100644
--- a/room/models/room_room.py
+++ b/room/models/room_room.py
@@ -22,7 +22,6 @@ class Room(models.Model):
name = fields.Char(string="会议室", required=True, tracking=2)
description = fields.Html(string="Amenities", translate=html_translate, sanitize=False)
office_id = fields.Many2one("room.office", string="Office", tracking=3)
- company_id = fields.Many2one(related="office_id.company_id", string="Company", store=True)
room_booking_ids = fields.One2many("room.booking", "room_id", string="Bookings")
short_code = fields.Char("Short Code", default=lambda self: str(uuid4())[:8], copy=False, required=True, tracking=1)
# Technical/Statistics
@@ -42,7 +41,7 @@ class Room(models.Model):
meet_equipment = fields.Char(string="会议室设备")
office_address = fields.Char(string="会议室地址", required=True)
- department_id = fields.Many2one("hr.department", string="公司", required=True)
+ company_id = fields.Many2one("hr.department", string="公司", required=True)
meeting_type_template = fields.Selection([('template1', '默认模板')], string='会议室模板')
meet_document_id = fields.Many2one('documents.document', string="布局图片")
meet_capacity = fields.Integer(string="容纳人数", required=True)
diff --git a/room/views/room_room_views.xml b/room/views/room_room_views.xml
index f4a0c7d00..e7e5c5519 100644
--- a/room/views/room_room_views.xml
+++ b/room/views/room_room_views.xml
@@ -14,7 +14,7 @@
Create Rooms
diff --git a/yuthon_hr_employee/models/inherit_res_groups.py b/yuthon_hr_employee/models/inherit_res_groups.py
index bfc51497f..54ada644e 100644
--- a/yuthon_hr_employee/models/inherit_res_groups.py
+++ b/yuthon_hr_employee/models/inherit_res_groups.py
@@ -19,15 +19,23 @@ class ResGroups(models.Model):
self.write({'users': [(3, user.id) for user in users_to_unlink2]})
self.write({'users_ids': [(5, 0, 0)]})
self.write({'employee_ids': [(5, 0, 0)]})
+ self.write({'department_ids': [(5, 0, 0)]})
+ self.write({'user_role_ids': [(5, 0, 0)]})
+ self.write({'users_role_group_ids': [(5, 0, 0)]})
def rule_unlink(self):
self.rule_groups.unlink()
self.model_access.unlink()
- def users_add(self):
- for user in self.employee_ids:
- if user.user_id:
- self.write({'users': [(4, user.user_id.id)]})
+ @api.onchange('employee_ids', 'department_ids', 'user_role_ids', 'users_role_group_ids')
+ def _onchange_update_users(self):
+ """动态更新 users 字段,基于员工、部门和角色的选择"""
+ all_user_ids = set()
+ # 1. 添加选中员工对应的用户
+ for employee in self.employee_ids:
+ if employee.user_id:
+ all_user_ids.add(employee.user_id.id)
+ # 2. 添加选中部门及其子部门的所有员工对应的用户
def get_department_employees(department_id):
valid_user_ids = set()
employee_ids = self.env['hr.employee'].search([('department_id', '=', department_id.id)])
@@ -37,16 +45,22 @@ class ResGroups(models.Model):
valid_user_ids.update(get_department_employees(child))
return valid_user_ids
for department_id in self.department_ids:
- valid_user_ids = get_department_employees(department_id)
- if valid_user_ids:
- self.write({'users': [(4, user_id) for user_id in valid_user_ids]})
+ all_user_ids.update(get_department_employees(department_id))
+ # 3. 添加选中角色对应的用户
for user_role in self.user_role_ids:
- user_employee_ids = self.env['hr.employee'].search(['|', ('user_role_id', '=', user_role.id), ('user_role_ids', 'in', [user_role.id])])
- self.write({'users': [(4, user.user_id.id) for user in user_employee_ids]})
-
+ user_employee_ids = self.env['hr.employee'].search(
+ ['|', ('user_role_id', '=', user_role.id.origin), ('user_role_ids', 'in', [user_role.id.origin])]
+ )
+ all_user_ids.update([user.user_id.id for user in user_employee_ids if user.user_id])
+ # 4. 添加角色组对应的用户
for record in self:
group_role_ids = record.users_role_group_ids.user_role_ids
for user_role in group_role_ids:
- user_employee_ids = self.env['hr.employee'].search(['|', ('user_role_id', '=', user_role.id), ('user_role_ids', 'in', [user_role.id])])
- self.write({'users': [(4, user.user_id.id) for user in user_employee_ids]})
+ user_employee_ids = self.env['hr.employee'].search(
+ ['|', ('user_role_id', '=', user_role.id.origin), ('user_role_ids', 'in', [user_role.id.origin])]
+ )
+ all_user_ids.update([user.user_id.id for user in user_employee_ids if user.user_id])
+
+ # 更新 users 字段(使用 replace 操作)
+ self.users = [(6, 0, list(all_user_ids))]
diff --git a/yuthon_hr_employee/views/inherit_res_groups_views.xml b/yuthon_hr_employee/views/inherit_res_groups_views.xml
index ae752a2d1..d6cad4b79 100644
--- a/yuthon_hr_employee/views/inherit_res_groups_views.xml
+++ b/yuthon_hr_employee/views/inherit_res_groups_views.xml
@@ -10,7 +10,6 @@