添加功能

This commit is contained in:
zhou
2025-05-23 17:27:36 +08:00
parent e6f11c1cca
commit 4697f4aa56
5 changed files with 40 additions and 22 deletions
+1 -2
View File
@@ -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)
+5 -5
View File
@@ -14,7 +14,7 @@
<filter name="meet_capacity" string="二十人以上" domain="[('meet_capacity', '&gt;', 20)]"/>
<filter name="meet_capacity" string="二十人以下" domain="[('meet_capacity', '&lt;', 20)]"/>
<group expand="0" string="Group By">
<filter string="公司" name="group_department_id" context="{'group_by': 'department_id'}"/>
<filter string="公司" name="group_company_id" context="{'group_by': 'company_id'}"/>
</group>
</search>
</field>
@@ -55,7 +55,7 @@
</div>
</div>
<div>
<span><field name="department_id"/></span>
<span><field name="company_id"/></span>
</div>
</div>
</div>
@@ -72,7 +72,7 @@
<tree>
<field name="name"/>
<field name="office_address"/>
<field name="department_id" widget="ztree_select"/>
<field name="company_id" widget="ztree_select"/>
<field name="is_available" string="Is Currently Available"/>
<field name="next_booking_start"/>
</tree>
@@ -119,7 +119,7 @@
<field name="meeting_type_template"/>
<field name="meet_document_id"/>
<field name="office_address"/>
<field name="department_id" widget="ztree_select"/>
<field name="company_id" widget="ztree_select"/>
<field name="short_code" invisible="1"/>
</group>
<!-- <group>-->
@@ -169,7 +169,7 @@
<field name="name">会议室</field>
<field name="res_model">room.room</field>
<field name="view_mode">kanban,list,form</field>
<field name="context">{'search_default_group_department_id': True,}</field>
<field name="context">{'search_default_group_company_id': True,}</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create Rooms
+26 -12
View File
@@ -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))]
@@ -10,7 +10,6 @@
</xpath>
<xpath expr="//group" position="before">
<header>
<button class="oe_highlight" name="users_add" string="更新用户" type="object"/>
<button class="oe_highlight" name="users_unlink" string="清除用户" type="object"/>
<button class="oe_highlight" name="rule_unlink" string="清除规则权限" type="object"/>
</header>
@@ -20,7 +20,7 @@
<attribute name="invisible">1</attribute>
</xpath>
<xpath expr="//field[@name='work_email']" position="after">
<field name="user_state"/>
<field name="user_state" readonly="1"/>
</xpath>
<xpath expr="//field[@name='department_id']" position="attributes">
<attribute name="widget">ztree_select</attribute>
@@ -101,7 +101,13 @@
<xpath expr="//field[@name='job_id']" position="after">
<field name="number"/>
<field name="user_number"/>
<field name="use_user_type"/>
<field name="use_user_type" readonly="1"/>
</xpath>
<xpath expr="//field[@name='department_id']" position="attributes">
<attribute name="readonly">1</attribute>
</xpath>
<xpath expr="//field[@name='job_id']" position="attributes">
<attribute name="readonly">1</attribute>
</xpath>
<xpath expr="//field[@name='identification_id']" position="after">
<field name="is_identification" invisible="1"/>