This question has been flagged
2 Replies
12970 Views

i have the following button in my form:

xml
<button name="button_approve" string="Approve order" attrs="{'invisible':['|', ('manager_id', '=','current_user'),('state' , 'not in', ['to approve'])]}
 <field name="dept_manager_id"/>
 <field name="current_user"/>

python
manager_id = fields.Many2one('res.users'
current_user = fields.Many2one('res.users', compute='_get_current_user')
    @api.depends()
    def _get_current_user(self):
        for rec in self:
            rec.current_user = self.env.user
        self.write({'current_user': self.env.user.id})
The attrs is designed to show the button only for orders if 'current_user' = 'manager_id' , with a status of 'to approve', however only the second part of the condition (status of 'to approve') was being evaluated correctly.

Avatar
Discard
Best Answer

Hi Saud, 

Seems like you wanted to hide button for current user which same as manager, or, state is 'to approve'.
try with : attrs="{'invisible':['|', ('manager_id.id', '=',user.id),('state' , 'not in', ['to approve'])]}
Also no need to store current user to field current_user.

Avatar
Discard

As far as my understanding, user.id will work only with the domain, not with attrs

Indeed @Niyas, that is why in my suggestion, i added a compute field for that.

Best Answer

Hi, 
Please follow instructions i gave in this link : https://www.odoo.com/fr_FR/forum/aide-1/question/maintenance-request-read-only-view-136023#answer-136027

Notes:

1-Since your case is about 'invisible', you can name your variable field_invisible.

2- you need to get the group your manager belongs to and add it in the section has_group.

3- in your field, you add attrs={'invisible':['|', ('field_invisible', '=', True), ('state' , 'not in', ['to approve'])]} and the boolean should be declared in your form with invisible="1".

Upvote if this helps. 

Thank you.

Avatar
Discard