What is the recommended Odoo best practice when a customer exchanges a product for a different size at the same price after the original Sales Order has been paid and delivered? Should the process be handled via Return Transfer + New Sales Order, or by creating a new Sales Order with negative and positive quantities? My concern is preserving the integrity of the original Sales Order and avoiding the need to unlock completed transactions.
Cette question a été signalée
Great question! Here's the recommended best practice in Odoo 18 for a same-price product exchange (no refund):
✅ Recommended Approach: Return Transfer + New Sales Order
- On the original Delivery Order, click "Return" — select the product to return, confirm the reverse transfer.
- Validate the Return Transfer to bring stock back into inventory.
- Create a New Sales Order for the replacement product (same price) — no need to touch the original SO.
- Deliver and confirm the new order normally.
- It complicates reporting and invoice reconciliation.
- Mixing negative quantities can confuse stock valuation.
Hope this helps! For professional Odoo implementation in India, feel free to reach out to Alligator Infosoft at alligatorinfosoft.com
Great question! Here's the recommended best practice for a same-price product exchange (no refund) in Odoo 18: Recommended Flow: Return Transfer + New Sales Order
- Go to the original delivery order → click Return
- Select the product being returned → validate the return receipt
- Create a New Sales Order for the replacement product (same price)
- On the new SO, apply a credit note from the original invoice as payment (if needed), or mark as paid via journal entry
- Deliver the new product → validate
- Breaks original SO integrity
- Complicates reporting & audit trail
- Causes inventory valuation issues
For complex exchange scenarios with Indian GST implications, ensure credit notes reference the original invoice correctly.
Hope this helps! For professional Odoo implementation in India, feel free to reach out to Alligator Infosoft at alligatorinfosoft.com
For a same-price product exchange (no refund) in Odoo 18, the recommended best practice is:
- Create a Return Transfer from the original Delivery Order (Reverse Transfer) — select only the exchanged product, validate it back into stock.
- Create a new Sales Order for the replacement product at the same price — this keeps the original SO intact and fully auditable.
- On the new SO, you can optionally add a note referencing the original SO number for traceability.
- Invoice the new SO at ₹0 (or apply a 100% discount) since payment was already received — no financial impact.
- Validate the new delivery for the replacement item.
- Negative quantities on a locked/done SO require unlocking, risking audit integrity.
- Separate documents maintain clean GST reporting and stock valuation in Indian localization.
Great question! This is a very common scenario — especially in Indian retail, apparel, and FMCG businesses where size/variant exchanges are frequent. Let me walk you through the recommended best practice in Odoo 18 for handling a product exchange without a refund, while preserving the integrity of the original Sales Order.
Understanding the Core Requirement
When a customer exchanges Product A (Size M) for Product B (Size L) at the same price, after the original SO is confirmed, delivered, and paid, you need to:
- Return the original product back to stock
- Dispatch the new product to the customer
- Ensure no financial impact (no refund, no extra charge)
- Keep the original Sales Order and Invoice untouched and locked
Recommended Best Practice: Return Transfer + Exchange Delivery (No New Invoice)
The cleanest approach in Odoo 18 is using the Return Transfer mechanism paired with a new Sales Order at zero net value (or using stock moves directly). Here is the step-by-step process:
Step 1: Create a Return for the Original Delivery
- Go to Inventory → Operations → Transfers
- Open the original validated Delivery Order linked to the Sales Order
- Click Return button at the top
- In the Return dialog, select the product being returned (e.g., T-Shirt Size M, Qty: 1)
- Set the Return Location — ideally a dedicated Exchange/Return location (e.g., WH/Exchange Zone) rather than your main stock, so inventory accuracy is maintained
- Click Return to create the reverse transfer
- Validate the return transfer once the physical item is received back
Step 2: Create a New Sales Order for the Exchange Item
- Go to Sales → Orders → Orders → New
- Select the same customer
- Add the new product (e.g., T-Shirt Size L, Qty: 1) at the same unit price
- In the Other Info tab, add a note in the customer reference like "Exchange against SO/2024/XXXXX"
- Confirm the Sales Order
- Deliver the new product to the customer
Step 3: Handle the Financial Settlement (Zero Balance)
Since no money changes hands, you need to neutralize the invoice on the new SO:
- On the new Sales Order, click Create Invoice
- The invoice will show the full amount for the new product
- Now create a Credit Note on the original invoice for the returned product — same amount
- Go to Accounting → Customers → Credit Notes and open the credit note
- Instead of refunding, click Outstanding Credits on the new invoice and reconcile it against the credit note
- Both the new invoice and the credit note will show as Paid/Matched with zero cash movement
Important Note on GST (Indian Localization)
- The Credit Note generated will carry the appropriate GST (CGST/SGST or IGST) reversal
- The new Invoice will have fresh GST — these will offset each other in your GSTR-1 and GSTR-3B
- Make sure both the Credit Note and new Invoice fall in the same GST period wherever possible to simplify reconciliation
- Always use the "Reversal of Invoice" reason when creating the Credit Note for proper GSTR reporting
- If the exchange is for a product with a different HSN code or GST rate, the tax lines will differ — ensure your tax mapping is correct on both products
Alternative Approach: New SO with Negative + Positive Lines (Not Recommended)
You mentioned the approach of adding negative and positive quantity lines on a single new SO. Here is why this is generally discouraged:
- Negative quantity lines on a Sales Order create confusing stock moves and can trigger validation errors in Odoo 18
- It breaks clean reporting — Sales Analysis and Revenue reports will show distorted figures
- Delivery orders with negative quantities are not standard and require manual workarounds
- It is harder to audit from a GST compliance perspective
Pro Tip: Create a Dedicated Exchange Route/Location
For businesses handling frequent exchanges (retail, garments, electronics), we recommend setting up:
Inventory → Configuration → Warehouses → Locations
Create:
- Location Name : WH/Exchange Zone
- Location Type : Internal
- Use for : Receiving returned exchange items before re-inspection
Workflow:
Customer Return → WH/Exchange Zone → Quality Check → WH/Stock (if resaleable)
→ WH/Scrap (if damaged)
This gives you full traceability and keeps your main stock clean.
Version-Specific Notes
- Odoo 16/17:
New SO -> Invoice -> Credit Note Applied (Balance zeroed out)
We understand the recommended approach is:
- Process a Return Transfer for the original items.
- Create a new Sales Order for the replacement items.
- Deliver the replacement items.
Could you please confirm:
- Is this the recommended Odoo best practice?
- Should the replacement Sales Order be invoiced if the original invoice has already been paid and there is no price difference?
- How should the new Sales Order be handled to avoid creating duplicate revenue or accounts receivable?
- Is there a preferred workflow for same-value exchanges that maintains accurate inventory, accounting, and reporting?
- Would you recommend using the Sales Order workflow or the POS workflow when the original transaction was a Sales Order?
Hello,
For a size-for-size exchange at the same price, the recommended Odoo approach is typically:
- Create a Return Transfer for the originally delivered product.
- Create a new Sales Order (or replacement delivery process) for the replacement item.
This keeps the original Sales Order intact, preserves a clear audit trail, and avoids unlocking or modifying completed transactions. Using positive and negative quantities on a new Sales Order is generally less desirable from a reporting and transaction-history perspective.
Hope this works for you! If you need any help implementing this or want a more optimized approach, feel free to reach out for further discussion.
Regards,
Zehntech Technologies Inc.
Vous appréciez la discussion ? Ne vous contentez pas de lire, rejoignez-nous !
Créez un compte dès aujourd'hui pour profiter de fonctionnalités exclusives et échanger avec notre formidable communauté !
S'inscrire