Search code examples
pythonxmlodoo-10odoo

Odoo - Hide button for specific user


I am using odoo 10 enterpeise . I want to show buttons to specific users not to groups because there would be many users in a group and i want to only show below button who have the previlige to reject/approve a object. Here is button

<xpath expr="//sheet" position="before">
          <header>
            <button name="update_approve" attrs="{'invisible':[('first_approve', '=', uid)]}" string="Approve" type="object" class="oe_highlight"/>
              <button name="update_reject" attrs="{'invisible':[('second_approve', '=', uid)]}" string="Reject" type="object" class="btn-danger"/>
          </header>
      </xpath>

I tried to do this using uid but uid is not available in xml

first_approve and second_approve are the fields in my model based on which i want to show button only to users which are assigned in first_approve/second_approve


Solution

  • One of the thing i know to use a field in attrs the field must be Mentionsed in the form. i don't know how to get the value of the user id in the form. but if there is not a short way like uid or user you can work arround this, just create a m2o field to res.users make this field compute field with store = False.

        # by default store = False this means the value of this field
        # is always computed.
        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
    

    and you can use this field in your form.

        <xpath expr="//sheet" position="before">
                  <header>
                     <!-- fin a good place for the field if i make the header look ugly -->
                    <!-- make invisible -->
                     <field name="current_user" invisible="1"/>
                                                                                        <!-- hope it work like this -->
                    <button name="update_approve" attrs="{'invisible':[('first_approve', '=', current_user)]}" string="Approve" type="object" class="oe_highlight"/>
                    <button name="update_reject" attrs="{'invisible':[('second_approve', '=', current_user)]}" string="Reject" type="object" class="btn-danger"/>
                  </header>
         </xpath>
    

    sorry for my english.