Process full and partial POS returns and exchanges with stock restoration, price-difference handling, and refund-method control. One-time license from $199.00 USD for Odoo 17, 18, 19 — includes 12 months of updates and support.

Process full and partial POS returns and exchanges with stock restoration, price-difference handling, and refund-method control.
No payment now. This sends a quote request to our team — we'll follow up by email with pricing and next steps.
Your counter staff need a fast, controlled way to take back merchandise without breaking your books or your inventory. The POS Order Return & Exchange Manager is a build-to-order Odoo module that ECOSIRE designs, builds, installs, and supports for your business — it adds a first-class returns and exchanges workflow directly inside the Point of Sale, so cashiers stop improvising with manual negative lines and refunds you can't trace.
Receipt-lookup return start — pull up the original pos.order by receipt number, reference, or customer to begin a return with full line traceability
Full-order returns that reverse every line, tax, and payment in one action with correctly linked negative quantities
Partial returns that let cashiers select individual order lines and exact quantities to bring back
In-session exchanges that swap one product for another and automatically compute the price difference
Price-difference handling that collects the balance owed or refunds only the shortfall, reconciled to the original transaction
Per-product 'non-returnable' and 'non-exchangeable' flags on product.template for final-sale, clearance, and hygiene items
Starting from a receipt lookup, a cashier pulls up the original pos.order, selects the exact lines to bring back — a full order or just one item — and the module builds a properly linked return order with negative quantities that Odoo's accounting and stock engines understand natively. Because we extend the real POS models rather than bolting on a parallel system, every return flows through standard stock.move restoration, account.move refund entries, and your existing sales reporting.
Exchanges are handled in the same session: swap a size, a color, or an entirely different product, and the module computes the price difference on the fly. If the customer owes more, it collects the balance; if you owe them, it refunds only the difference — all reconciled to the original transaction. You keep control over which products can ever come back through per-product "non-returnable" and "non-exchangeable" flags (think final-sale, hygiene, or clearance items), and over how money leaves the drawer with configurable refund methods: back to the original tender, to store credit, or to an alternate payment method your policy allows.
Under the hood this is clean, upgrade-safe Odoo engineering. New fields live on pos.order and product.template with @api.depends computes for return eligibility and refundable amounts; access is governed by ir.model.access.csv plus record rules so only authorized roles can approve refunds; the return receipt is a QWeb report; and reason-code capture feeds a returns dashboard you can filter by product, cashier, and reason. It runs on Odoo Community or Enterprise and is delivered tested against Odoo 17, 18, and 19.
This is not an instant download from apps.odoo.com. It is a scoped engagement: we confirm your return policy and refund rules, build the module to fit them, install it on your server or Odoo.sh, migrate any legacy return practices, train your staff, and support you through go-live and beyond. Typical delivery is 2 to 4 weeks depending on scope.
Wants controlled, auditable returns at the counter — with per-product final-sale rules, refund-method limits, and a dashboard that reveals which items and reasons drive returns, so policy is enforced instead of improvised.
Needs a fast, guided flow: scan the receipt, pick the lines, choose return or exchange, and let the system handle the math, the refund, and the receipt — no manual negative lines or guesswork about how much to give back.
Requires refunds that post cleanly to account.move, revenue that nets returns automatically, and stock that restores through native stock.move — so month-end reconciliation and inventory valuation stay accurate without journal patches.
Runs several outlets and wants a consistent, upgrade-safe returns process across all POS sessions, with role-based approval controls and BI-ready return data accessible over XML-RPC/JSON-RPC.
Buy the license on ecosire.com and download the POS Order Return & Exchange Manager module ZIP from your account dashboard.
Extract the ZIP into your Odoo custom addons folder on the server (or upload via Apps > Install from file on Odoo.sh / runbot).
Activate Developer Mode, open Apps, click Update Apps List, search for POS Order Return & Exchange Manager, and press Install.
Open the new menu, paste your ECOSIRE license key, connect any external credentials (Shopify, Amazon, Stripe, etc.), and save.
Run the built-in connection test, sync your first 10 records, and schedule the recurring cron. Contact support if anything fails.
| Criterion | ECOSIRE | Custom Build | Competitor | Odoo Native |
|---|---|---|---|---|
| Full and partial returns from receipt lookup | Possible but you build the line-selection UI and linkage yourself | Varies — many only support full-order returns | ||
| In-session exchange with automatic price-difference handling | Buildable at significant effort | Rare or add-on only | ||
| Per-product non-returnable / non-exchangeable rules | You design the fields and validation | Sometimes | ||
| Automatic stock restoration via native stock.move | You wire the moves correctly to avoid valuation drift | Usually yes | ||
| Refund-method control (original tender / store credit / alternate) | Buildable | Often limited to original tender | ||
| Role-based refund approval via record rules | You define ir.model.access.csv and record rules | Rarely granular | ||
| Returns dashboard with reason codes for analysis | You build the model, views, and reporting | Seldom included | ||
| Built and tested for Odoo 17, 18, and 19 + fitted to your policy | Depends entirely on your team's capacity | Version support varies; not tailored to you | ||
| Delivered, installed, trained, and supported by ECOSIRE | You own the whole lifecycle | Download only — support is best-effort |
This is a build-to-order module, not an instant apps.odoo.com download. After purchase we scope your return and exchange policy, build the module to fit it, install it, and train your team. Typical delivery is 2 to 4 weeks depending on complexity — for example, custom refund rules, multi-store approval flows, or unusual exchange logic. You get a firm timeline at kickoff.
Every engagement includes a post-go-live support window for bug fixes and adjustments, plus documentation and training. We deliver and test the module against Odoo 17, 18, and 19, and can provide version-migration support when you upgrade your Odoo. You receive the source code, so you're never locked in — ECOSIRE can continue to maintain and extend it, or your own team can. Ongoing support beyond the initial window is available as a maintenance plan.
Yes. A cashier can return a full order or select specific lines and quantities for a partial return. Exchanges work in the same session: swap for a different product, size, or color and the module computes the price difference — collecting the balance when the customer owes more, or refunding only the shortfall when you do. Everything stays linked to the original pos.order.
We extend Odoo's real POS models rather than running a parallel system. Returns restore stock through native stock.move (to your main stock or a dedicated return/quarantine location), and refunds post to account.move so your revenue reporting nets returns automatically. No manual inventory adjustments or corrective journals are needed.
Yes. The module adds per-product 'non-returnable' and 'non-exchangeable' flags on product.template, so final-sale, clearance, hygiene, or perishable items are blocked at the counter. You can also enforce a configurable return window (a day limit from the original sale) and restrict refund methods — original tender, store credit, or an approved alternate — by policy and role.
The module is built and tested for Odoo 17, 18, and 19 on both Community and Enterprise editions. During scoping we confirm your exact version and deployment (self-hosted, Odoo.sh, or ECOSIRE-managed) and deliver a build matched to it, including the correct handling of edition-specific POS behavior.
Process full and partial POS returns and exchanges with stock restoration, price-difference handling, and refund-method control.