2016-08-30 4 views
2

In Stunden Anwesenheit gibt es ein Feld namens "Mitarbeiter_ID".Wie kann ein Feld nur für eine Gruppe bearbeitet werden? In odoo9

Ich möchte dieses Feld nur für eine Gruppe editierbar (oder schreibgeschützt für andere Gruppen setzen).

Zum Beispiel möchte ich das Feld "employee_id" in der "form" Ansicht nur für die "manager" Gruppe bearbeiten.

ich die Anwesenheits Modul erweitert haben, und ich habe diesen Code in das XML meiner erweiterten Modul:

<?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> 

Mit diesem Code ist das Feld bearbeitet werden für alle, außer für die hr_manager Gruppe. Das ist das Gegenteil, das ich will.

Was muss ich ändern, um dies zu erreichen?

Bearbeitet: Ich habe den ursprünglichen Code mit einem anderen Feld zum besseren Verständnis geändert.

Antwort

1

Ich habe es gefunden!

Zuerst muss das Feld für alle nur als schreibgeschützt definiert werden.

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

Dann erben wir die erste benutzerdefinierte Ansicht

<field name="inherit_id" ref="hr_attendance_extend.view_employee_readonly_custom"/> 

Schließlich haben wir die Nur-Lese-Einschränkung für die Administrator-Gruppe (group_hr_manager)

<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> 

Hier ist der endgültige Code löschen:

<?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

Wenn ich mich richtig erinnere, gibt es in Odoo keine eingebaute Möglichkeit, ein Feld nur für eine bestimmte Gruppe editierbar zu machen.

Sie können es sichtbar oder unsichtbar machen, indem Sie eine Gruppe hinzufügen.

Wenn Sie das Feld je nach Gruppe editierbar machen möchten, müssen Sie ein neues berechnetes Feld erstellen, das benutzerabhängig ist, und ein Attribut auf dem Feld hinzufügen, um es basierend auf dem Benutzer schreibgeschützt zu machen.

In Ihrem Fall würden Sie so etwas wie dies benötigen:

In Python:

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') 

In Ihrem xml:

<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> 

Das bedeutet, dass, wenn die can_edit_name ist wahr, die Feld kann bearbeitet werden.

Ich habe es nicht getestet, so dass es einige Tippfehler geben kann, aber das sollte Ihnen eine Vorstellung davon geben, wie es geht!

Viel Glück!

+0

Ich möchte nicht verwenden berechnetes Feld Jetzt habe ich die Lösung gefunden. Wie auch immer, danke für die Antwort :) – MouTio

Verwandte Themen