2016-07-26 2 views
1

Мне нужно, чтобы невидимый столбец из одного поля, основанного на родительском поле. Наследуя модель account.invoice, я добавил поле inv_type. В account_invoice_line мне нужно сделать невидимое поле «количество», если inv_type = 'utility'.Поле невидимое, основанное на родительском поле Odoo 8

Я попытался ниже код:

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> 

It бросали ошибку клиента:

Odoo Client Error 

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

Пожалуйста, предложить решение .. спасибо ..

ответ

0

Действительно сложный , в качестве предложения вы можете использовать атрибут, который применяется в odoo 9:

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

В модуле выставления счета он должен влиять на функцию fields_view_get, я понимаю, что вы хотите, чтобы скрыть столбцы списка счета-фактуры продукции, поэтому он должен влиять на объект account.invoice.line:

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

В Odoo 8.0 мне пришлось реализовать его немного другим. Он имеет одинаковую логику, но мне пришлось использовать метод sell_view_get sale.order и необходимо загрузить заказ по его идентификатору:

class SaleOrder(models.Model): 
    _inherit = 'sale.order' 

    @api.model 
    def fields_view_get(self, view_id=None, view_type=False, toolbar=False, 
         submenu=False): 
     order = False 
     params = self.env.context.get('params', False) 
     if params: 
      order_id = params.get('id', False) 
      if order_id: 
       order = self.browse(order_id) 

     if order and not order.is_agreement: 
      self = self.with_context(hide_agreement_cols=False) 

     result = super(SaleOrder, self).fields_view_get(
      view_id=view_id, view_type=view_type, 
      toolbar=toolbar, submenu=submenu 
     ) 
     return result 
Смежные вопросы