Odoo 17:通过API为销售订单创建发票(正确的方法)

问题描述 投票:0回答:1

我创建了一个具有以下有效负载的 Odoo 销售订单(出于测试原因,我对所有订单行使用相同的 Odoo 产品 ID)和

sale.order
模型:

{
    "company_id": 1,
    "name": "10000",
    "partner_id": 17,
    "partner_invoice_id": 22,
    "partner_shipping_id": 23,
    "client_order_ref": "10000",
    "carrier_id": 2,
    "order_line":
    [
        [
            0,
            0,
            {
                "product_id": 414,
                "display_name": "Product #2",
                "name_short": "Product #2",
                "name": "Product #2",
                "product_uom_qty": 1,
                "price_unit": 103.36,
                "purchase_price": 40,
                "price_tax": 19.64
            }
        ],
        [
            0,
            0,
            {
                "product_id": 414,
                "display_name": "Demo Product with Variants",
                "name_short": "Demo Product with Variants",
                "name": "Demo Product with Variants",
                "product_uom_qty": 1,
                "price_unit": 84.03,
                "purchase_price": 40,
                "price_tax": 15.97
            }
        ],
        [
            0,
            0,
            {
                "product_id": 414,
                "display_name": "Shipping Costs",
                "name_short": "Shipping Costs",
                "name": "Shipping Costs",
                "product_uom_qty": 1,
                "price_unit": 8.4,
                "purchase_price": 40,
                "price_tax": 0
            }
        ]
    ]
}

此后,我尝试为我的销售订单创建发票,但方法

action_invoice_generate
似乎已失效。然后,我继续使用以下有效负载和
account.move
模型手动创建发票。
invoice_origin
来自我创建的销售订单。

{
    "partner_id": 22,
    "move_type": "out_invoice",
    "invoice_date": "2024-04-19",
    "invoice_line_ids": [...],
    "invoice_origin": "10000"
}

现在我已经创建了发票,并且在我的发票中引用了销售订单。

当我重新打开销售订单时,按钮

Create Invoice
仍然可用,并且未显示发票。

通过 API 为我的销售订单创建发票的最佳方式是什么?

想法:我可以将手动创建的发票的

id
添加到
invoice_ids
模型中的
sale.order
列表中,并手动设置
invoice_status
,但是
invoice_count
amount_invoiced
等字段是怎么回事?

odoo odoo-17
1个回答
0
投票

首先:按钮是根据发票状态显示的,发票状态是由一些“复杂”代码计算的,具体取决于您安装的应用程序/模块的数量。所以最终这完全取决于产品设置。

其次,您可以使用

sale.order._create_invoices()
,它为订单创建发票。仅当需要开具发票时,它才会创建发票,这取决于产品设置和其他因素。

上述方法不应由 XML 或 JSON RPC 接口使用。但是您可以轻松且应该谨慎地通过从您自己实现的接口可用方法调用它来使其可用。

© www.soinside.com 2019 - 2024. All rights reserved.