51 lines
1.8 KiB
Python
51 lines
1.8 KiB
Python
# Copyright 2025 Cetmix OÜ
|
|
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
|
|
|
|
from odoo import models
|
|
|
|
|
|
class ResUsers(models.Model):
|
|
_inherit = "res.users"
|
|
|
|
def reload_views(self, model, view_types=None, rec_ids=None):
|
|
"""
|
|
Trigger UI reload for selected users and record IDs.
|
|
|
|
This method allows to reload specific views from the backend.
|
|
Be aware that when reloading form views, if a user is currently
|
|
doing some updates, those updates may be lost.
|
|
|
|
:param model: str, Model name (e.g., 'res.partner')
|
|
:param view_types: list of str, optional, View types to reload
|
|
(e.g., ['form', 'kanban']). Leave blank to reload all views.
|
|
:param rec_ids: list of int, optional, View will be reloaded only if a record
|
|
with id from the list is present in the view.
|
|
|
|
Example usage:
|
|
# Reload the kanban and form views for all salespeople
|
|
# when an opportunity is won.
|
|
# Will reload views only if the current opportunity is being displayed
|
|
group_id = self.env.ref("sales_team.group_sale_salesman").id
|
|
users_to_reload = self.env["res.users"].search(
|
|
[("groups_id", "in", [group_id])]
|
|
)
|
|
users_to_reload.reload_views(
|
|
model="crm.lead",
|
|
view_types=["kanban", "form"],
|
|
rec_ids=[self.id]
|
|
)
|
|
"""
|
|
|
|
# Prepare the message payload
|
|
bus_message = {
|
|
"model": model,
|
|
"view_types": view_types or [],
|
|
"rec_ids": rec_ids or [],
|
|
}
|
|
|
|
# Send notification to each user's partner
|
|
notifications = [
|
|
[user.partner_id, "web.refresh_view", bus_message] for user in self
|
|
]
|
|
self.env["bus.bus"]._sendmany(notifications)
|