Force Cancel & Reset to Draft for Odoo 19 documentation
A guide to the guarded Force Cancel / Reset to Draft: who can use it, how to undo invoices, deliveries and manufacturing orders, what the audit log keeps, and what is never overridden.
Documents version 1.0.0Updated Oct 23, 2026
Start here
| Document | What you can do | What the module does behind the scenes |
|---|---|---|
| Invoices, vendor bills, credit notes, journal entries | Reset to draft, or cancel | Removes the reconciliations with payments, optionally cancels the linked payments, then resets or cancels. |
| Transfers (deliveries, receipts, internal) | Reset to draft, or cancel. A done transfer is reversed. | Releases reservations. For a done transfer it creates and validates a full return, so the stock goes back where it was. |
| Manufacturing orders (with the second module) | Reset to draft, or cancel. A done order is unbuilt. | Cancels work orders and moves. For a done order it unbuilds the produced quantity: the product leaves stock and the components return. |
What it adds to Odoo
| Where | What you see |
|---|---|
| Invoice, bill and journal entry form | Two red buttons in the header: Force Reset to Draft and Force Cancel. |
| Transfer form | Force Reset to Draft and Force Cancel / Reverse. |
| Manufacturing order form | Force Reset to Draft and Force Cancel / Unbuild. |
| List views of those documents | An action Force cancel / reset… in the Actions menu, to treat many records at once. |
| Settings → Force Cancel / Reset Log | The history of every forced change: who, when, why, and what was done. |
| Users → Force Cancel & Reset to Draft | The security group that controls who sees all of the above. |
Requirements
| Item | Details |
|---|---|
| Odoo | 19.0 (Community or Enterprise) |
| Apps needed | Invoicing (account) and Inventory (stock) |
| Manufacturing orders | Install Manufacturing (mrp); the second module then installs itself |
| License | OPL-1 (Odoo Proprietary License v1.0) |
Install
taqnix_force_cancel_reset is the main one. taqnix_force_cancel_reset_mrp adds manufacturing orders; it installs itself automatically when both the main module and Manufacturing are present, so you never have to choose.- Unzip the package. Inside are
taqnix_force_cancel_reset.zipandtaqnix_force_cancel_reset_mrp.zip; unzip both. - Copy the two folders into one of the
addons_pathfolders of your Odoo server and restart Odoo. - Log in as an administrator, activate Developer mode, open Apps and press Update Apps List.
- Remove the “Apps” filter, search Force Cancel and install Force Cancel & Reset to Draft.
# or from the command line ./odoo-bin -c odoo.conf -d YOUR_DATABASE -i taqnix_force_cancel_reset --stop-after-init
Who can use it
- Open Settings → Users & Companies → Users and open the user.
- In Access Rights, add the group Force Cancel & Reset to Draft (or add the user from the group form shown above).
- Ask the user to reload the page. The red buttons appear.
Resetting an invoice to draft
- Read What will happen. Warnings (orange) and blockers (red) are listed here before anything is changed.
- Choose the mode: Reset to draft or Cancel.
- Write the reason (at least 5 characters). It is kept in the log and in the chatter.
- Tick I understand… and press Apply.
Paid invoices and their payments
| Option | Result |
|---|---|
| Leave Also cancel the linked payments unticked (default) | The reconciliation is removed. The payment stays posted and becomes open credit on the customer, ready to be applied to the corrected invoice. |
| Tick Also cancel the linked payments | The payment is reset and cancelled too. Use it when the payment itself was wrong. |
Many records at once
Deliveries and other transfers
| State of the transfer | Force Reset to Draft | Force Cancel / Reverse |
|---|---|---|
| Waiting, Ready | Back to Draft; reservations released | Cancelled; reservations released |
| Draft | Nothing to do | Cancelled |
| Done | Not offered | Reversed: a full return is created and validated |
Manufacturing orders
taqnix_force_cancel_reset_mrp adds the same two buttons to manufacturing orders.| State of the order | Result |
|---|---|
| Confirmed, In progress | Work orders and stock moves are cancelled (or reset to draft). Components are released. |
| Done | An unbuild of the produced quantity is created and validated: the finished product leaves stock and the components come back. The order stays Done and the unbuild is linked. |
The audit log
| Column | Meaning |
|---|---|
| Date / Done by | When and who |
| Document type / Document | For example Customer Invoice INV/2026/00008 |
| Mode | Reset to draft or Cancel |
| State before / after | The state of the document, before and after |
| Reason | The text typed in the window |
What it does not do
| Not covered | Why / what to do instead |
|---|---|
| Entries in a locked period | Odoo's fiscal lock dates are respected. Change the lock date (as an authorised user), then run the tool. |
| Hashed (inalterable) entries | Locked by law in some countries. Create a credit note instead. |
| Invoices accepted by a tax authority | They need a cancellation request through the e-invoicing app first. |
| Bank statement lines already matched | Un-match them in the bank reconciliation first. |
| Changing quantities of a done transfer | The module reverses it. Create a new transfer with the right quantities. |
For developers
| Item | Details |
|---|---|
| Mixin | taqnix.force.mixin: add it to a model and implement the two hooks below. |
_tx_force_preview(mode, options) | Returns [(level, text)] shown in the window. Level: info, warning, danger. |
_tx_force_apply(mode, options) | Does the work on one record and returns a short text for the log. |
_tx_force_doc_label() | Name shown for the document type. |
| Group | taqnix_force_cancel_reset.group_force_cancel_reset |
class SaleOrder(models.Model):
_name = 'sale.order'
_inherit = ['sale.order', 'taqnix.force.mixin']
def _tx_force_apply(self, mode, options=None):
self.action_cancel()
return 'cancelled'
# then add a button calling action_tx_force_wizard with context {'tx_mode': 'cancel'}Troubleshooting
| Problem | What to do |
|---|---|
| I do not see the red buttons | You are not in the group Force Cancel & Reset to Draft, or you need a page reload. |
| “Only users in the … group can do this” | Same cause: ask an administrator to add you to the group. |
| “Please give a reason” | The reason must have at least 5 characters. |
| The window says the entry is locked (hashed) | The entry is inalterable. Create a credit note. |
| A fiscal-lock-date message appears | The invoice is in a closed period. Ask an adviser to move the lock date. |
| The unbuild or return needs a manual step | Stock is short or lots must be chosen. Do it by hand from the document; nothing was changed. |
Updating and removing
Replace the folders with the new version, restart Odoo and run -u taqnix_force_cancel_reset. To remove it, uninstall taqnix_force_cancel_reset from Apps (the manufacturing module goes with it). The buttons disappear. The log is deleted with the module, so export it first if you need it. The chatter notes stay as ordinary notes.
Support
Installation help and bug fixes are included for 6 months, with lifetime updates. Contact us through the marketplace page where you bought the module or write to support@taqnix.com with your Odoo version and a screenshot.