Skip to Content
Menu
This question has been flagged
2 Replies
25771 Views

Hi everyone,

I'd like to create a custom view on recruitment model. And I want to hide some fields (and label) for a certain groups. Can I make it with xml?

The original view is:

<record model="ir.ui.view" id="crm_case_form_view_job">

.....

     <group string="Contract">

                        <label for="salary_expected"/>

                        <div>

                            <field name="salary_expected" class="oe_inline"/>

                            <span class="oe_inline" attrs="{'invisible':[('salary_expected_extra','=',False)]}"> + </span>

                            <field name="salary_expected_extra" class="oe_inline" placeholder="Extra advantages..."/>

                        </div>

                        <label for="salary_proposed"/>

                        <div>

                            <field name="salary_proposed" class="oe_inline"/>

                            <span class="oe_inline" attrs="{'invisible':[('salary_proposed_extra','=',False)]}"> + </span>

                            <field name="salary_proposed_extra" class="oe_inline" placeholder="Extra advantages..."/>

                        </div>

                        <field name="availability"/>

                        <field name="emp_id" invisible="1"/>

                    </group>

</record>


I want to hide the "salary_expected" and the label from group "group_hr_recruitment_user".

How can I do that?

Thank so much.

Avatar
Discard
Best Answer

Hi Vu,
You can make it possible with the help of python function. Add a new field in the form and make it invisible , then we can make hide the field salary_expected based on the value of the new field.

In the xml view, add this new field and make it invisible.

<field name="make_visible" invisible="1"/>

Then change the the salary expected field as,

<label for="salary_expected" attrs="{'invisible':[('make_visible','=',False)]}"/>

<field name="salary_expected" attrs="{'invisible':[('make_visible','=',False)]}"/>

In the python file

class ModelExtend(models.Model):

_inherit = 'model_name'

make_visible = fields.Boolean(string="User", compute='get_user')

@api.depends('make_visible')
def get_user(self, ):
user_crnt = self._uid
res_user = self.env['res.users'].search([('id', '=', self._uid)])
if res_user.has_group('module_name.group_name'):
    self.make_visible = False
else:
            self.make_visible = True
Avatar
Discard
Author Best Answer

Hi Niyas,

I tried with your solution, I create new model:


class CustomApplicant(models.Model):

    _inherit = 'hr.applicant'
    salary_invisible = fields.Boolean(string="User", compute='get_user')
    @api.depends('salary_invisible')
    def get_user(self):
        user_crnt = self._uid
        res_user = self.env['res.users'].search([('id', '=', self._uid)])
        if res_user.has_group('hr_recruitment.group_hr_recruitment_user'):
            self.salary_invisible = True
        else:
            self.salary_invisible = False

and the view:

<record model="ir.ui.view" id="custom_crm_case_form_view_job">

            <field name="name">Custom - Jobs - Recruitment Form</field>
            <field name="model">hr.applicant</field>
            <field name="inherit_id" ref="hr_recruitment.crm_case_form_view_job"/>
            <field name="arch" type="xml">
                <field name="salary_invisible" invisible="1"/>
                <field name='salary_expected' position="attributes">
                    <attribute name="attrs">{'invisible':[('salary_invisible','=',True)]}</attribute>
                </field>
            </field>
        </record>

But it's seem not understand field "salary_invisible".



Avatar
Discard

Hi Vu,

First of all Is it working fine ?

The make invisible field(salary invisible) is added as a check field, so it is kept as invisible. This field is set to true or false based on the logged in user. If the logged in user has the group to check, then False value is set to the field. If the user has not that group then value is True.

Then attribute i given to the original field based on the value of this field.

Author

Hi Niyas,

It doesn't work, when I added the field in my new view, I got error:

ParseError: "Error while validating constraint

Element '<field name="salary_invisible" invisible="1">' cannot be located in parent view

Author

Hi Niyas,

I have updated the code, and adding the new field with xpath, and it works now.

Thank you