Odoo 8/9/10 API,如何通过 XMLRPC 从销售订单创建发票
Odoo 8/9/10 API, how to create an invoice from a sale order via XMLRPC
我正在开发一个 ruby 应用程序,它通过 XMLRCP API 向 Odoo 发送一些命令。
我已经能够在此 whay
中创建销售订单
def execute_odoo_command(odoo_model, odoo_command, values)
@models.execute_kw(ODOO_DB, @uid, ODOO_PASSWORD, odoo_model, odoo_command, values)
end
def create_order_sale
order_reference = "SO #{@reference_code}_#{@customer_odoo_id}"
values = {
currency_id: 1,
date_order: Date.today.to_s,
name: order_reference,
payment_term: 1,
partner_id: @customer_odoo_id
}
order_id = execute_odoo_command('sale.order', 'create', [values])
create_sale_order_lines(order_id)
execute_odoo_command('sale.order', 'action_confirm', [order_id])
end
现在,我将启动发票创建。我找到了这样的方法
execute_odoo_command('account.invoice', 'create', [invoice_values(order_reference)])
但是,即使创建了发票,销售订单仍然是 "open",我可以通过单击 "Create Invoice" 按钮从 Odoo 界面创建另一个发票(这显然是错误的)。有没有办法通过 API 来模拟那个动作?
调试模式不在工具提示中显示任何方法。
欢迎任何建议,谢谢!
对于未来的谷歌员工。解决方案是我使用的是旧 API 版本。正确的命令调用是这个
def create_invoice_from_sale_order(sale_order_id)
sale_order_to_invoice_data = [sale_order_id, {context: {active_ids: sale_order_id}}]
@odoo_rpc_client.execute_odoo_command('sale.order', 'action_invoice_create', sale_order_to_invoice_data)
end
我正在开发一个 ruby 应用程序,它通过 XMLRCP API 向 Odoo 发送一些命令。 我已经能够在此 whay
中创建销售订单def execute_odoo_command(odoo_model, odoo_command, values)
@models.execute_kw(ODOO_DB, @uid, ODOO_PASSWORD, odoo_model, odoo_command, values)
end
def create_order_sale
order_reference = "SO #{@reference_code}_#{@customer_odoo_id}"
values = {
currency_id: 1,
date_order: Date.today.to_s,
name: order_reference,
payment_term: 1,
partner_id: @customer_odoo_id
}
order_id = execute_odoo_command('sale.order', 'create', [values])
create_sale_order_lines(order_id)
execute_odoo_command('sale.order', 'action_confirm', [order_id])
end
现在,我将启动发票创建。我找到了这样的方法
execute_odoo_command('account.invoice', 'create', [invoice_values(order_reference)])
但是,即使创建了发票,销售订单仍然是 "open",我可以通过单击 "Create Invoice" 按钮从 Odoo 界面创建另一个发票(这显然是错误的)。有没有办法通过 API 来模拟那个动作?
调试模式不在工具提示中显示任何方法。
欢迎任何建议,谢谢!
对于未来的谷歌员工。解决方案是我使用的是旧 API 版本。正确的命令调用是这个
def create_invoice_from_sale_order(sale_order_id)
sale_order_to_invoice_data = [sale_order_id, {context: {active_ids: sale_order_id}}]
@odoo_rpc_client.execute_odoo_command('sale.order', 'action_invoice_create', sale_order_to_invoice_data)
end