Skip ke Konten
Menu
Pertanyaan ini telah diberikan tanda
2 Replies
26379 Tampilan

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
Buang
Jawaban Terbai

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
Buang
Penulis Jawaban Terbai

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
Buang

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.

Penulis

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

Penulis

Hi Niyas,

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

Thank you