从发票行树中访问发票抬头数据 (invoice_id)

Access invoice header data (invoice_id) from invoice line tree

亲爱的!

我需要访问销售发票抬头数据(即字段 invoice_id)以默认发票行 table 树视图中字段 (analytics_id) 的另一个值。

我编写了以下代码来确定字段 analytics_id 的默认值,并在继承 account.invoice.line:

的自定义 class 中实现了它
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 字段在上下文中不可用(context.get('invoice_id', False) 总是 returns False),尽管发票抬头 已经创建并且 一个 ID。我敢肯定,它必须以某种方式可用 - 只是想不出任何方法。

你能告诉我正确的方向吗?

非常感谢任何帮助,谢谢。

各位,

我终于成功了 - 并在此处记录我的结果,希望它可以帮助其他人解决此类问题。

发票 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()

此致