Odoo18-Base/extra-addons/website_helpdesk/models/website_menu.py

38 lines
1.8 KiB
Python

# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import models
class WebsiteMenu(models.Model):
_inherit = "website.menu"
def _compute_visible(self):
""" Display helpdesk team menus even if they are unpublished """
helpdesk_menus = self.filtered(lambda menu: menu.url and menu.url.startswith("/helpdesk"))
other_menus = self - helpdesk_menus
if not helpdesk_menus or self.env.user._is_internal(): # avoid extra query if not needed
return super()._compute_visible()
helpdesk_menu_data = self.env['helpdesk.team'].sudo()._read_group(
[('website_menu_id', '!=', False)],
['is_published'],
['website_menu_id:recordset'],
)
for is_published, menus in helpdesk_menu_data:
menu_urls = menus.mapped('url')
matching_heldpesk_menus = helpdesk_menus.filtered(lambda menu: menu.url in menu_urls or menu in menus)
matching_heldpesk_menus.is_visible = is_published
helpdesk_menus -= matching_heldpesk_menus
menu_per_helpdesk_team_id = {}
for menu in helpdesk_menus:
_dummy, helpdesk_team_id = self.env['ir.http']._unslug(menu.url)
if helpdesk_team_id:
menu_per_helpdesk_team_id[helpdesk_team_id] = menu
if menu_per_helpdesk_team_id:
helpdesk_teams = self.env['helpdesk.team'].sudo().search([('id', 'in', list(menu_per_helpdesk_team_id.keys()))])
for team in helpdesk_teams:
menu = menu_per_helpdesk_team_id[team.id]
menu.is_visible = False
helpdesk_menus -= menu
# compute other menus + remaining menus with heldpesk route.
super(WebsiteMenu, other_menus + helpdesk_menus)._compute_visible()