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 @@ - + @@ -55,7 +55,7 @@
- +
@@ -72,7 +72,7 @@ - + @@ -119,7 +119,7 @@ - + @@ -169,7 +169,7 @@ 会议室 room.room kanban,list,form - {'search_default_group_department_id': True,} + {'search_default_group_company_id': True,}

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 @@

-
diff --git a/yuthon_hr_employee/views/yuthon_hr_employee_views.xml b/yuthon_hr_employee/views/yuthon_hr_employee_views.xml index b3c6d9ed3..039a7c437 100644 --- a/yuthon_hr_employee/views/yuthon_hr_employee_views.xml +++ b/yuthon_hr_employee/views/yuthon_hr_employee_views.xml @@ -20,7 +20,7 @@ 1 - + ztree_select @@ -101,7 +101,13 @@ - + + + + 1 + + + 1