2016-04-18 5 views
0

ディアーズから!アクセス請求書ヘッダデータ(invoice_id)送り状行木

請求書明細テーブルツリービューの項目(analytics_id)の別の値をデフォルトに設定するには、販売請求書ヘッダデータ(つまり、項目invoice_id)にアクセスする必要があります。

私はフィールドanalytics_idのデフォルト値を決定するために、次のコードを書き、account.invoice.lineを継承するカスタムクラスでそれを実装:

class my_account_invoice_line(osv.osv): 
    _inherit = "account.invoice.line" 

    def _default_analytics_id(self, cr, uid, context=None): 
     if context is None: 
      context = {} 

     invoice_id = context.get('invoice_id', False) 
     if invoice_id: 
      inv_obj = self.pool.get('account.invoice').browse(cr, uid, invoice_id, context=context) 
      plan = inv_obj.plan_id 
      return plan 

     return False 

    _defaults = { 
     'analytics_id': _default_analytics_id, 
     } 

my_account_invoice_line() 

驚いたことに、invoice_idフィールドは、(文脈では使用できません。請求ヘッダが既に作成あり、 IDを有するがcontext.get('invoice_id', False)常に)Falseを返します。私は確かに、それは何とか利用可能でなければならない - ちょうどそれを行う方法について何らかの方法を考えることができません。

あなたは正しい方向に私を入れてくださいことはできますか?

すべてのヘルプは感謝、感謝を理解されたいです。

答えて

0

皆さん、

は最終的に私はそれを作った - そしてそれは誰にもこの種の問題を解決するのに役立ちますことを期待して、ここに私の結果を文書化します。

請求書ID(または送り状ヘッダから他のフィールド)は、明示的に対応するXMLファイルでcontext属性を介して通過する必要があります。したがって、私は次のように継承されたフォームのフィールドinvoice_linecontext属性を修飾:

<record model="ir.ui.view" id="view_custom_account_invoice_form_inherited"> 
    <field name="name">account.invoice.form</field> 
    <field name="model">account.invoice</field> 
    <field name="type">form</field> 
    <field name="inherit_id" ref="account.invoice_form" /> 
    <field name="arch" type="xml"> 
     <xpath expr="//field[@name='invoice_line']" position="attributes"> 
      <attribute name="context">{'type': type, 'custom_field_id': custom_field_id}</attribute> 
     </xpath> 
    </field> 
</record> 

備考:context="{'type': type}"はOpenERP 7に標準値(ファイル/addons/account/account_invoice_view.xmlを参照します)。

とすぐにこれが行われているように、請求書のヘッダデータからcustom_field_idの値は請求書のラインで利用可能で、あなたの目的のためにそれを使用することができます。

class my_account_invoice_line(osv.osv): 
    _inherit = "account.invoice.line" 

    def _default_analytics_id(self, cr, uid, context=None): 
     if context is None: 
      context = {} 
     custom_id = context.get('custom_field_id', False) 
     if custom_id: 
      # ...your code to do something with custom_id goes here... 
      return True # or whatever suits your needs to be used as default 
     return False 

    _defaults = { 
     'analytics_id': _default_analytics_id, 
     } 

my_account_invoice_line() 

よろしく

関連する問題