创建发票和付款,然后通过 Odoo 模块中的代码 link

Create invoices and payments then link them by code in Odoo module

我正在使用 Odoo 13,我创建了名为 my_module.invoice 的模型,在使用该模型后我需要注册一些付款,因此我创建了另一个名为 my_module.payment,它们是一对多的关系,它们工作正常。付款完成相关发票后,我需要获取模块发票和付款的值,并使用 account.move[ 在 Odoo 中创建相同的场景=36=]。 我能够将 my_module.invoice 转换为 account.move 并将 my_module.payment 转换为 account.payment 但不能 link 它们。

这是将我的模型转换为 Odoo 模型的代码:

# "record" is my_module.invoce model and "ni" is Odoo's account.move model
# Here I convert my invoice model into Odoo's model
new_invoice = record.env['account.move']
ni = new_invoice.create({
    'partner_id': record.client,
    'invoice_date': record.invoice_date,
    'type': 'out_invoice',
    'state': 'draft',
    'invoice_line_ids': [(0, 0, {'product_id': record.product_id,
                                    'account_id': record.account_id,
                                    'name': record.product_name,
                                    'quantity': 1,
                                    'price_unit': record.total_to_pay
                                    }
                            )],
})

然后如果 account.move 被创建,那么模块会创建 account.payment:

# If ni (account.move) is true, it means the invoice has been created, so lets create the account.payment
if ni:
    new_payment = self.env['account.payment']
    np = new_payment.create({
        'payment_type': 'inbound',
        'has_invoices': True,
        'payment_method_id': 1,
        'partner_type': 'customer',
        'partner_id': some_client,
        'amount': my_module.payment.amount,
        'payment_date': my_module.payment.create_date,
        'journal_id': my_module.payment.journal_id.id,
        'communication': ni,
    })
    np.post()


至此,一切正常,但我不知道如何将新创建的 account.payment 分配给新创建的 account.move

有没有人经历过这种情况或知道如何link他们?

注意:我创建不同模型以将它们转换为 Odoo 模型的原因是因为在 Odoo 中使用正常流程之前存在一些逻辑和条件。

您可以使用上下文将发票关系传递给新付款:

new_payment = self.env['account.payment'].\
    with_context(active_ids=ni.ids, active_model='account.move', active_id=ni.id)

np = new_payment.create({ ......

注意:支付模型的communication字段是char字段,因此您将account.move对象分配给char字段,这是错误的。例如,您可以传递 name 的发票。

'communication': ni.name,