How to view or hide field by attrs based on function (Automatically)?

依然范特西╮ 提交于 2019-12-20 04:21:29

问题


I want to view 'working_hours' field only for employee, his manager and 'hr.group_hr_user' group. how to hide this field automatically without edit form or trigger a button

class InheritHrEmployee(models.Model):
    _inherit = 'hr.employee'


    def hide_working_hours(self):
        if self.env.uid == self.user_id.id or self.env.uid == self.parent_id.user_id.id or self.env.user.has_group(
            'hr.group_hr_user'):
            self.working_hours_view = True
        else:
            self.working_hours_view = False

    working_hours_view = fields.Boolean(computed=hide_working_hours)

XML:

<record id="hide_working_hours_for_employees" model="ir.ui.view">
  <field name="name">Hide Working Hours Employees Form</field>
  <field name="model">hr.employee</field>
  <field name="inherit_id" ref="hr.view_employee_form"/>
  <field name="arch" type="xml">
    <xpath expr="//field[@name='resource_calendar_id']" position="before">
      <field name="working_hours_view" invisible="1"/>
    </xpath>
    <xpath expr="//field[@name='resource_calendar_id']" position="attributes">
      <attribute name="attrs">{'invisible': [('working_hours_view' ,'=', False)]}</attribute>
    </xpath>
  </field>
</record>

回答1:


Try below code for display working hours field only hr.group_hr_user group users.

XML:

<record id="hide_working_hours_for_employees" model="ir.ui.view">
  <field name="name">Hide Working Hours Employees Form</field>
  <field name="model">hr.employee</field>
  <field name="inherit_id" ref="hr.view_employee_form"/>
  <field name="arch" type="xml">
    <xpath expr="//field[@name='resource_calendar_id']" position="before">
      <field name="working_hours_view" invisible="1"/>
    </xpath>
    <xpath expr="//field[@name='resource_calendar_id']" position="attributes">
      <attribute name="groups">hr.group_hr_user</attribute>
    </xpath>
  </field>
</record>

You can add multiple attributes in the XML file like above code.




回答2:


i added the field before the function and it works now automatically

class InheritHrEmployee(models.Model):
    _inherit = 'hr.employee'

    inv = fields.Boolean(string="Invisible", compute="c_inv", store=False)

    @api.one
    def c_inv(self):
        if self.env.uid == self.user_id.id or self.env.uid == self.parent_id.user_id.id or self.env.user.has_group(
             'hr.group_hr_user'):
            self.inv = False
        else:
            self.inv = True

.. like this example make fields visible to user and invisible to other



来源:https://stackoverflow.com/questions/59267563/how-to-view-or-hide-field-by-attrs-based-on-function-automatically

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!