首页 > 解决方案 > 如何使用 Web API 在 Odoo 中注册发票付款

问题描述

我正在尝试为我之前通过 API 创建的发票注册付款。

我按如下方式发布发票

models = xmlrpc.client.ServerProxy('{}/xmlrpc/2/object'.format(url))

models.execute_kw(db, uid, password, 'account.move', 'post', [[invoice_id]])

我想注册此付款并在发布后将其标记为已付款。我正在尝试使用类似于上面这样的工作流程

models.execute_kw(db, uid, password, 'account.payment', 'action_register_payment', [{"active_id":invoice_id}])

我也尝试在模块中发送必填字段。我没有收到任何错误,但发票仍未注册。

任何人都可以帮忙吗?谢谢

标签: pythonodooxml-rpc

解决方案


action_register_payment方法将检查是否active_ids上下文中,如果不是,它将返回一个空字符串。
要传递上下文,您需要在 args 列表之后传递一个 dict,就像他们将fields参数传递给官方 XML-RPC 文档中的read方法一样:

models.execute_kw(db, uid, password, 'account.payment', 'action_register_payment', [[]], {'context': {"active_ids": [invoice_id]}}

该方法将一个动作作为字典返回,这将导致:

TypeError: cannot marshal <class \'odoo.tools.misc.frozendict\'>

您可以使用付款登记向导来创建发票付款,您必须创建一个新的付款登记记录然后调用create_payments方法。

例子:

payment_register_id = models.execute_kw(db, uid, password, 'account.payment.register', 'create', [{'journal_id': bank_journal_id, 'payment_method_id': payment_method_id, 'invoice_ids': [(4, invoice_id)]}])
models.execute_kw(db, uid, password, 'account.payment.register', 'create_payments', [[payment_register_id]])

推荐阅读