38 lines
1.8 KiB
Python
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()
|