如何使用web API在Odoo中注册发票付款

2024-05-13 20:27:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试为我先前通过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}])

我也尝试发送模块中的必填字段。我没有收到任何错误,但发票仍然没有登记

有人能帮忙吗?谢谢


Tags: clientapiidexecutedbuidmodelsaccount
1条回答
网友
1楼 · 发布于 2024-05-13 20:27:46

action_register_payment方法将检查active_ids是否在上下文中,如果不在上下文中,它将返回一个空字符串。
要传递上下文,您需要在args列表之后传递dict,就像它们在官方XML-RPC文档中将fields参数传递给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\'>

您可以使用payment register向导来创建发票付款,您必须创建一个新的付款登记记录,然后调用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]])

相关问题 更多 >