Odoo: How to inherit menu items (make menu items invisible)

17,119

Solution 1

Actually, given a menuitem, this is the correct way to hide a menuitem by using an "hiding" group

    <record model="res.groups" id="group_invisible">
        <field name="name">Hidden items</field>
    </record>


    <record id="module_id.menu_id" model="ir.ui.menu">
        <field name="groups_id" eval="[(6, False, [ref('module_id.group_invisible')])]"/>
    </record>

This works just fine for me. Of course you can use it also for redefine others of its properties (parent, name, etc...)

Solution 2

<record id="make_invisible" model="res.groups">
    <field name="name">Invisible</field>
</record>
<record model="ir.ui.menu" id="base.menu_product">
    <field name="groups_id" eval="[(6,0,[ref('make_invisible')])]"/>
</record>

Solution 3

You can't make a menuitem invisible in Odoo as if it were a field. You must remove it with the delete tag:

<delete id="your_module.tour_xml_id" model="ir.ui.menu"/>

A way to make it invisible without removing it is to add the attribute groups to the menuitem, and put there a group whose components are only the users who can see the menuitem. If you don't want any user to see it, then create a empty group and assign it that attribute:

<menuitem id="your_module.tour_xml_id" groups="empty_group"/>

Solution 4

You can Hide a menu by

<record model="ir.ui.menu" id="module_name.menu_id">
    <field name="action" eval="False"/>
</record>
Share:
17,119
RobbeM
Author by

RobbeM

Updated on June 05, 2022

Comments

  • RobbeM
    RobbeM about 2 years

    I need to remove (or make invisible) a menu item. I guess this should be done with an inherit and xpath.

    But I'm not sure which name, model and inherit_id I should use. Where can I find the correct values for these?

    I also don't know how to use xpath correctly for this. As far as I know, there are only expressions for pages, groups and fields? (http://www.odoo.yenthevg.com/xpath-expressions-in-odoo-8/)

    The menu that has to be removed is Product Variants: enter image description here

    In addons/product/product_view.xml I found something that might have to do with it.

    Line 1:

    <menuitem id="base.menu_product" name="Product Variants" parent="base.menu_base_partner" sequence="9"/>
    

    line 444-446:

    <menuitem action="variants_action"
                id="menu_variants_action"
                parent="product.prod_config_main" sequence="10" />
    

    The way I tried to make the menu item invisible in my own views.xml:

        <record model="ir.ui.view" id="menuproductvariants_inherit">
        <field name="name">name">product.prod_config_main</field>
        <field name="model">base.menu_product</field>
        <field name="inherit_id" ref="product.product_template_only_form_view" />
        <field name="arch" type="xml">
            <xpath expr="//menuitem[@string='Product Variants']" position='replace'>
            <menuitem name=""/>         
        </xpath>            
        </field>
    </record>
    

    The error it gives:

    ParseError: "ValidateError
    Field(s) `arch` failed against a constraint: Invalid view definition
    
    Error details:
    Element '<xpath expr="//menuitem[@string='Product Variants']">' cannot be located in parent view
    
    Error context:
    View `name">product.prod_config_main`
    [view_id: 971, xml_id: n/a, model: base.menu_product, parent_id: 257]" while parsing /root/git/odoo/modulesdewieuw/dewieuw/views.xml:59, near
    <record model="ir.ui.view" id="menuproductvariants_inherit">
            <field name="name">name"&gt;product.prod_config_main</field>
            <field name="model">base.menu_product</field>
            <field name="inherit_id" ref="product.product_template_only_form_view"/>
            <field name="arch" type="xml">
                <xpath expr="//menuitem[@string='Product Variants']" position="replace">
                <menuitem name=""/>         
            </xpath>            
            </field>
        </record>
    

    Edit: After the tips on making a new group I tried it. I've created a group "verborgenmenus" and added a user to it.

    In my xml I just put this, somewhere:

    <menuitem id="base.menu_product" name="Product Variants" parent="base.menu_base_partner" sequence="9" groups="verborgenmenus"/>
    

    It gives me the following error:

        raise ValueError('External ID not found in the system: %s' % (xmlid))
    ParseError: "External ID not found in the system: dewieuw.verborgenmenus" while parsing /root/git/odoo/modulesdewieuw/dewieuw/views.xml:34, near
    <menuitem id="base.menu_product" name="Product Variants" parent="base.menu_base_partner" sequence="9" groups="verborgenmenus"/>
    

    What is wrong in my code?

    Edit: I got it how I wanted by just removing the users from the group Usability/Technical Features.