2016-07-26 38 views
1

Ich muss eine Spalte von one2many Feld basierend auf übergeordneten Feld unsichtbar sein. Durch erben des account.invoice Modells habe ich ein Feld inv_type hinzugefügt. In account_invoice_line muss ich das unsichtbare Feld "quantity" machen, wenn inv_type = 'utility'.Feld unsichtbar basierend auf dem übergeordneten Feld Odoo 8

ich unten Code versucht:

xml:

<record id="ams_invoice_form" model="ir.ui.view"> 
     <field name="name">account.invoice.form</field> 
     <field name="model">account.invoice</field> 
     <field name="inherit_id" ref="account.invoice_form"></field> 
     <field name="inherit_id" ref="ams.3e_invoice_form"></field> 
     <field name="arch" type="xml"> 
      <xpath expr="//notebook/page/field/tree/field[@name='quantity']" position="replace"> 
       <field name="quantity" attrs="{'invisible':[('parent.inv_type,'=','utility')]}" /> 
       <field name="consumed_unit"/> 
       <field name="fixed_charge"/> 
      </xpath> 

     </field> 
    </record> 

Es wirft einen Client-Fehler:

Odoo Client Error 

Error: Unknown field parent.invoice_type in domain [["parent.invoice_type","=","utility"]] 

vorschlagen Bitte eine Lösung .. Dank ..

Antwort

0

Wirklich kompliziert Als Vorschlag können Sie ein Attribut verwenden, das in odoo 9:

gilt
<record id="ams_invoice_form" model="ir.ui.view"> 
     <field name="name">account.invoice.form</field> 
     <field name="model">account.invoice</field> 
     <field name="inherit_id" ref="account.invoice_form"></field> 
     <field name="inherit_id" ref="ams.3e_invoice_form"></field> 
     <field name="arch" type="xml"> 
      <xpath expr="//notebook/page/field/tree/field[@name='quantity']" position="replace"> 
       <field name="quantity" invisible="context.get('ok_invisible', False)"/> 
       <field name="consumed_unit"/> 
       <field name="fixed_charge"/> 
      </xpath> 

     </field> 
    </record> 

Im Fakturierungsmodul den fields_view_get Funktion zu beeinflussen hat, verstehe ich, dass Sie die Spalten des Rechnungsproduktliste ausblenden möchten, damit es die account.invoice.line Objekt beeinflussen müssen:

class AccountInvoiceLine(models.Model): 

     _inherit = "account.invoice.line" 

     @api.model 
     def fields_view_get(self, view_id=None, view_type=False, toolbar=False, submenu=False): 
      if self.invoice_id.inv_type == 'utility': 
      self = self.with_context(ok_invisible=True) 
      else: 
      self = self.with_context(ok_invisible=False) 

      return super(AccountInvoiceLine, self).fields_view_get(view_id=view_id, view_type=view_type, toolbar=toolbar, submenu=submenu) 
0

In Odoo 8.0 musste ich es ein bisschen anders implementieren. Es hat die gleiche Logik in Sicht, aber ich musste die Methode fields_view_get von sale.order verwenden und es wird benötigt, um den Auftrag von seiner Kennung zu laden: