web/web_responsive/models/ir_ui_menu.py

32 lines
1.2 KiB
Python

# -*- coding: utf-8 -*-
from odoo import api, models
class IrUiMenu(models.Model):
_inherit = 'ir.ui.menu'
@api.model
def search(self, args, offset=0, limit=None, order=None, count=False):
"""The filtering that is done on the menus by upstream doesn't take into account
the visibility of their ancestors to decide if the menu is visible or not, which
is needed for the AppDrawer menu search.
"""
menus = super(IrUiMenu, self).search(
args, offset=offset, limit=limit, order=order, count=count
)
if menus and not count and self.env.context.get("responsive_search"):
accesible_menus = self.env["ir.ui.menu"]
full_menus = self.with_context(responsive_search=False).search([])
for menu in menus:
add = True
parent_menu = menu.parent_id
while parent_menu:
if parent_menu not in full_menus:
add = False
break
parent_menu = parent_menu.parent_id
if add:
accesible_menus += menu
menus = accesible_menus
return menus