Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

conditionally hide a button openerp/odoo

I have a button which I need to show only if the user is a superuser (admin). My problem is that when I'm using xpath to include the attrs, nothing is working as expected. My code is:

<record id="wms_stock_view_move_form" model="ir.ui.view">
        <field name="name">wms.stock.view.move.form</field>
        <field name="model">stock.move</field>
        <field name="inherit_id" ref="stock.view_move_form" />
        <field name="arch" type="xml">
            <field name="location_id" position="attributes">
                <attribute name="domain">[('name','!=', 'Scrapped')]</attribute>
            </field>
            <field name="location_id" position="after">
                <field name="is_superuser"/>
            </field>
            <field name="location_dest_id" position="attributes">
                <attribute name="domain">[('name','!=', 'Scrapped')]</attribute>
            </field>
            <xpath expr='//form[@string="Stock Moves"]' position='attributes'>
                <attribute name="create">false</attribute>
                <attribute name="edit">false</attribute>
                <attribute name="delete">false</attribute>
            </xpath>
            <xpath expr="//button[@name='action_cancel']" position="attributes">
                <attribute name="attrs">{'invisible':[('is_superuser','=', True)]}</attribute>
            </xpath>

        </field>
    </record>

here, is_superuser is a computed field, its code is:

is_superuser = fields.Boolean(compute='_is_super_user')

def _is_super_user(self):

    if self._uid == SUPERUSER_ID:
        self.is_superuser = True
    else:
        self.is_superuser = False

The original code for the button, in its original view is:

<button name="action_cancel" states="draft,assigned,confirmed" string="Cancel Move" type="object"/>

any idea, what I'm doing wrong ? Thanks in advance.

like image 268
odoobeginner Avatar asked Dec 11 '25 04:12

odoobeginner


1 Answers

I would prefer to use Odoo's group access system for such behaviour. Just extend the button with the attribute groups and ofcourse the correct group (for example base.group_system or base.group_no_one for admins):

<field name="action_cancel" states="draft,assigned,confirmed" position="attributes">
    <attribute name="groups">base.group_system</attribute>
</field>
like image 50
CZoellner Avatar answered Dec 14 '25 20:12

CZoellner