Purchase Stock Picking Return Invoicing
This module extends the functionality of purchase orders to better manage supplier returns and refunds.
In the purchase order you are able to display, for each line:
- Billed Quantity and Refunded Quantity, as separate fields.
- Received Quantity and Returned Refundable Quantity, as separate fields.
You have the option to create a vendor bill or a refund. In the bill or refund the correct quantity will be proposed, based on those fields.
auto_awesome What this module does
AI-generated from the code · Odoo 18.0Adds refund handling to purchase orders: see returned and refunded quantities per line, create a vendor refund from the PO, and track refunds separately from bills.
This module helps you manage supplier returns and the refunds that follow them directly from the purchase order.
On each purchase order line you now see two extra columns: "Returned* Qty" (the quantity you returned to the supplier that is still refundable) and "Refunded Qty" (the quantity already covered by a refund or a negative bill line). These columns appear once the order is confirmed or done.
A new "Create Refund" button sits next to the standard invoice button on confirmed orders. It builds a vendor refund (a credit note) using the quantities that still need to be refunded, and it refuses to run if there is nothing refundable. A "Refunds" smart button on the order shows how many refunds exist and opens them; the normal invoice button now only shows regular bills, not refunds.
When you create a refund from a purchase order, lines with zero quantity are removed automatically. The order's invoicing status is also recalculated so that returned and refunded quantities are taken into account, avoiding the situation where an order wrongly stays or leaves the "to invoice" state.
It touches purchase.order, purchase.order.line and account.move, and adds a field on the vendor bill form to pick a purchase order or an old bill when working on a refund.
Depends on
Required by other modules
Models and fields (3)
- account.move · extends an existing model
- purchase.order · extends an existing modelinvoice_refund_count (# of Invoice Refunds)
- purchase.order.line · extends an existing modelqty_refunded (Refunded Qty), qty_returned (Returned* Qty)
Text generated by AI (DeepSeek) from reading the Odoo 18.0 code on GitHub; it may contain mistakes, so check the code before deciding. View the code on GitHub
Availability by version
Reviewed: 2026-11-03Confirmation status: 7 confirmed, 2 with no information of 9 versions.
Sources · Odoo 18.0
Confirmed on 2026-11-03 in branch 18.0 of OCA/account-invoicing.
terminal Installation and usage
OCA documentation · Odoo 18.0Usage
Source · Odoo 18.0Case 1: When you return to a supplier some products, and you have not yet received the bill from the supplier
- Go to Purchases \> Purchase \> Purchase Orders \> Create.
- Choose a supplier and add a product whose Control Purchase Bills is On received quantities, and input some quantity to purchase.
- Confirm the purchase order.
- Go to Shipment \> Validate \> Apply so as to receive the quantities ordered.
- Press the button Return.
- In the wizard Reverse Transfer set Quantity to the quantity to be returned. Press Return to complete the wizard. IMPORTANT: You have to mark "To refund (Update SO/PO)" check before pressing the button.
- On the return picking press Validate \> Apply.
- Go back to the purchase order. You will notice that the field Returned Qty is now the quantity that was returned.
- Press the button Create Bill to create the vendor bill.
- The proposed vendor bill will be proposed for the difference between the received and the returned quantity.
Case 2: When you return to a supplier some products, and you have already received a bill from the supplier.
- Go to Purchases \> Purchase \> Purchase Orders \> Create.
- Choose a supplier and add a product whose Control Purchase Bills is On received quantities, and input some quantity to purchase.
- Confirm the purchase order.
- Go to Shipment \> Validate \> Apply so as to receive the quantities ordered.
- Go back to the purchase order. Press the button Create Bill to create the vendor bill.
- The proposed vendor bill will be proposed for the quantity received. The Billing Status is now 'Fully Billed'
- Go to the original incoming shipment
- Press the button Return.
- In the wizard Reverse Transfer set Quantity to the quantity to be returned. Press Return to complete the wizard. IMPORTANT: You have to mark "To refund (Update SO/PO)" check before pressing the button.
- On the return picking press Validate \> Apply.
- Go back to the purchase order. It will have Billing Status as 'Waiting Bills'. You will notice that the field Returned Qty is now the quantity that was returned.
- Press the button Refunds to create the vendor refund bill.
- The proposed vendor refund bill will be proposed for the quantity that is to be refunded.
- If you back to the purchase order, you will notice that Billing Status is now 'Fully Billed', even when the quantity ordered does not match with the quantity invoiced, because you did return some products.
Remark: If you accept that you will not claim for a refund for the quantity returned to the supplier, just leave without checking the mark "To refund (Update SO/PO)" on the return dialog.
No verified information in OCA: Installation, Configuration.
Installation instructions, the distribution package, dependencies and configuration steps are not shown because they have not yet been verified in the module documentation for any version.
Data imported from GitHub: this sheet reflects the latest catalog review, not a live lookup. Always check the module documentation and staging before installing in production.