show menu item based on system parameter odoo 15

516 Views Asked by At

How to show/hide menu item based on system parameter?

I've this code to create menu item, and it working fine, but i need to hide it depends on system parameter.

<!-- this is for test, remove this after testing -->
<record id="check_qty_and_move_from_internal_customer_to_customer" model="ir.actions.server">
    <field name="name">Cron Run Directly 2</field>
    <field name="model_id" ref="model_kiotviet_cron"/>
    <field name="binding_model_id" ref="onnet_kiotviet.model_kiotviet_cron"/>
    <field name="state">code</field>
    <!-- function called -->
    <field name="code">model.check_qty_and_move_from_internal_customer_to_customer()</field>
</record>

<!-- this is for test, remove this after testing -->
<menuitem id="check_qty_and_move_from_internal_customer_to_customer" name="Cron Run Directly 2" parent="kiotviet_menu_root"
          action="check_qty_and_move_from_internal_customer_to_customer" sequence="6"/>

Does anyone know how to do that? Thanks.

1

There are 1 best solutions below

0
On BEST ANSWER

I've found the answer, here is it:

from odoo import models, api, tools, _


class Menu(models.Model):
    _inherit = 'ir.ui.menu'

    @api.model
    @tools.ormcache('frozenset(self.env.user.groups_id.ids)', 'debug')
    def _visible_menu_ids(self, debug=False):
        menus = super(Menu, self)._visible_menu_ids(debug)
      # get system parameter
        if not self.env['ir.config_parameter'].sudo().get_param('your_module.your_config_name'):
         # get menu item id
            menu_item_id = self.env.ref('your_module.menu_item_id').id
         # remove it from menus
            menus.dis

card(menu_item_id) return menus