2016-08-30 1 views
2

hr 출석에는 "employee_id"라는 필드가 있습니다.그룹에 대해서만 편집 가능한 필드를 설정하는 방법은 무엇입니까? In odoo9

이 필드는 그룹에 대해서만 편집 가능하게 설정하고 싶습니다 (또는 다른 그룹에 대해 읽기 전용으로 설정).

예를 들어 "manager"그룹에 대해서만 "form"보기에서 "employee_id"필드를 편집 가능으로 설정하려고합니다.

내가 출석 모듈을 확장하고 내 확장 모듈의 XML이 코드가이 코드를

<?xml version="1.0" encoding="utf-8"?> 
<openerp> 
    <data> 
    <record id="view_employee_readonly_custom" model="ir.ui.view"> 
     <field name="name">hr.attendance.form</field> 
     <field name="model">hr.attendance</field> 
     <field name="inherit_id" ref="hr_attendance.view_attendance_form"/> 
     <field name="groups_id" eval="[(6,0,[ref('base.group_hr_manager')])]"/> 
     <field name="arch" type="xml"> 
      <field name="employee_id" position="attributes"> 
       <attribute name="readonly">True</attribute> 
      </field> 
     </field> 
    </record> 
    </data> 
</openerp> 

을 필드는 hr_manager 그룹을 제외하고 모두 편집 할 수 있습니다. 그것은 내가 원하는 반대 다.

이 작업을 수행하려면 무엇을 수정해야합니까?

편집 : 더 나은 이해를 위해 다른 필드로 원래 코드를 수정했습니다.

답변

1

찾았습니다!

먼저 필드는 모든 사용자에게 읽기 전용으로 정의되어야합니다. 그런 다음

<xpath expr="//field[@name='employee_id']" position="replace"> 
    <field name="employee_id" attrs="{'readonly':True}"/> 
</xpath> 

, 우리는 마지막으로, 우리는 여기에
<field name="groups_id" eval="[(6, 0, [ref('base.group_hr_manager')])]"/> 
<field name="arch" type="xml"> 
    <xpath expr="//field[@name='employee_id']" position="attributes"> 
     <attribute name="readonly">False</attribute> 
    </xpath> 
</field> 

최종 코드 관리자 그룹에 대한 읽기 전용 제한 (group_hr_manager)을 삭제 최초의 사용자 정의보기를
<field name="inherit_id" ref="hr_attendance_extend.view_employee_readonly_custom"/> 

을 상속 :

<?xml version="1.0" encoding="utf-8"?> 
<openerp> 
    <data> 
    <record id="view_employee_readonly_custom" model="ir.ui.view"> 
     <field name="name">hr.attendance.form</field> 
     <field name="model">hr.attendance</field> 
     <field name="inherit_id" ref="hr_attendance.view_attendance_form"/> 
     <field name="arch" type="xml"> 
      <xpath expr="//field[@name='employee_id']" position="replace"> 
       <field name="employee_id" attrs="{'readonly':True}"/> 
      </xpath> 
     </field> 
    </record> 

    <record id="view_employee_readonly" model="ir.ui.view"> 
     <field name="name">hr.attendance.form</field> 
     <field name="model">hr.attendance</field> 
     <field name="inherit_id" ref="hr_attendance_extend.view_employee_readonly_custom" /> 
     <field name="groups_id" eval="[(6, 0, [ref('base.group_hr_manager')])]"/> 
     <field name="arch" type="xml"> 
      <xpath expr="//field[@name='employee_id']" position="attributes"> 
       <attribute name="readonly">False</attribute> 
      </xpath> 
     </field> 
    </record> 
    </data> 
</openerp> 
1

올바르게 기억한다면 Odoo에는 특정 그룹에 대해서만 필드를 편집 할 수있는 기본 제공 방법이 없습니다.

그룹을 추가하여 표시하거나 숨길 수 있습니다.

그룹에 따라 필드를 편집 가능하게하려면 사용자에 따라 새로운 계산 필드를 만들어 필드에 attrs를 추가하여 사용자를 기준으로 읽기 전용으로 만들어야합니다. 당신의 XML로

can_edit_name = fields.Boolean(compute='_compute_can_edit_name') 

def _compute_can_edit_name(self): 
    self.can_edit_name = self.env.user.has_group('base.group_hr_user') 

:

파이썬에서 : 귀하의 경우

, 당신은 이런 식으로 뭔가를해야

<xpath expr="//field[@name='name']" position="before"> 
    <field name="can_edit_name" invisible="1"/> 
</xpath> 
<xpath expr="//field[@name='name']" position="attributes"> 
    <attribute name="attrs">{'readonly': ['can_edit_name', '=', False]}</attribute> 
</xpath> 

이 의미하는 것을 can_edit_name는 True 인 경우 입력란을 수정할 수 있습니다.

몇 가지 오타가있을 수 있으므로 테스트하지는 않았지만이를 수행하는 방법에 대한 아이디어가 필요합니다.

행운을 빈다.

+0

나는 계산 된 필드. 이제 해결책을 찾았습니다. 어쨌든, 답변 주셔서 감사합니다 :) – MouTio

관련 문제