Skip to content
DevMarket
Odoo ModulesWordPress PluginsWordPress ThemesShopify ThemesApp TemplatesScripts & UtilitiesBlogSell on DevMarket

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

In plain words: Odoo is strict, and that is good: a posted invoice cannot simply be edited, a done delivery cannot be reopened, a paid invoice cannot be cancelled. But sooner or later someone posts the wrong invoice or validates the wrong delivery, and the accountant spends an afternoon undoing it. This module gives a small group of trusted people a guarded way to do it in a few clicks.
A paid invoice with the two new red buttons: Force Reset to Draft and Force Cancel.
A paid invoice with the two new red buttons: Force Reset to Draft and Force Cancel.
DocumentWhat you can doWhat the module does behind the scenes
Invoices, vendor bills, credit notes, journal entriesReset to draft, or cancelRemoves 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.
Tip: Nothing happens by surprise. Before anything changes, the module shows what it is about to do, asks for a reason and asks you to tick a confirmation box. Every use is recorded in a log and in the chatter of the document.

What it adds to Odoo

WhereWhat you see
Invoice, bill and journal entry formTwo red buttons in the header: Force Reset to Draft and Force Cancel.
Transfer formForce Reset to Draft and Force Cancel / Reverse.
Manufacturing order formForce Reset to Draft and Force Cancel / Unbuild.
List views of those documentsAn action Force cancel / reset… in the Actions menu, to treat many records at once.
Settings → Force Cancel / Reset LogThe history of every forced change: who, when, why, and what was done.
Users → Force Cancel & Reset to DraftThe security group that controls who sees all of the above.
In plain words: Everything is hidden from people who are not in the group: they do not see the buttons, the menu or the log, and the server refuses the action even if they try to call it by hand.

Requirements

ItemDetails
Odoo19.0 (Community or Enterprise)
Apps neededInvoicing (account) and Inventory (stock)
Manufacturing ordersInstall Manufacturing (mrp); the second module then installs itself
LicenseOPL-1 (Odoo Proprietary License v1.0)

Install

In plain words: The package contains two Odoo modules. 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.
  1. Unzip the package. Inside are taqnix_force_cancel_reset.zip and taqnix_force_cancel_reset_mrp.zip; unzip both.
  2. Copy the two folders into one of the addons_path folders of your Odoo server and restart Odoo.
  3. Log in as an administrator, activate Developer mode, open Apps and press Update Apps List.
  4. 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
Tip: The default administrator user is put in the security group automatically. Add other people yourself (next chapter).

Who can use it

In plain words: Access is controlled by one group: Force Cancel & Reset to Draft. Give it to as few people as possible: the chief accountant, the warehouse manager, the owner.
Settings → Users & Companies → Groups (Developer mode): the group and its members.
Settings → Users & Companies → Groups (Developer mode): the group and its members.
  1. Open Settings → Users & Companies → Users and open the user.
  2. In Access Rights, add the group Force Cancel & Reset to Draft (or add the user from the group form shown above).
  3. Ask the user to reload the page. The red buttons appear.
Important: The group is not part of any standard role. A user who is “Administrator” of Accounting or Inventory does not get it automatically (only the default administrator user does).

Resetting an invoice to draft

In plain words: Open a posted invoice and click Force Reset to Draft. A window opens.
The confirmation window for a paid invoice: it warns that the payment will be unreconciled.
The confirmation window for a paid invoice: it warns that the payment will be unreconciled.
  1. Read What will happen. Warnings (orange) and blockers (red) are listed here before anything is changed.
  2. Choose the mode: Reset to draft or Cancel.
  3. Write the reason (at least 5 characters). It is kept in the log and in the chatter.
  4. Tick I understand… and press Apply.
The invoice is back in draft, and the chatter keeps a note of who did it and why.
The invoice is back in draft, and the chatter keeps a note of who did it and why.
In plain words: The invoice number is kept. After you correct the invoice you can confirm it again, or cancel it.

Many records at once

In plain words: Select several invoices (or transfers, or manufacturing orders) in a list, open Actions and choose Force cancel / reset…. The same window opens and the explanation is listed for every selected record.
The Actions menu of the invoice list, with three invoices selected.
The Actions menu of the invoice list, with three invoices selected.
One reason and one confirmation for all selected records.
One reason and one confirmation for all selected records.
Tip: If anything cannot be done for one of the records, Odoo refuses the whole operation and nothing at all is changed. You never end up half-way.

Deliveries and other transfers

In plain words: Transfers behave differently depending on their state.
State of the transferForce Reset to DraftForce Cancel / Reverse
Waiting, ReadyBack to Draft; reservations releasedCancelled; reservations released
DraftNothing to doCancelled
DoneNot offeredReversed: a full return is created and validated
A done delivery: Odoo offers only Return, the module adds Force Cancel / Reverse.
A done delivery: Odoo offers only Return, the module adds Force Cancel / Reverse.
For a done transfer the window explains that a return will be created.
For a done transfer the window explains that a return will be created.
In plain words: Odoo cannot reopen a done transfer, because stock moves and valuation entries have been posted. So the module undoes it the way Odoo itself would: it creates a full return of everything, and validates it at once. Stock is back where it was, the valuation is reversed by Odoo, and the original transfer stays Done with a link to the return.
After the operation: the Returns smart button shows the new return and the chatter says what happened.
After the operation: the Returns smart button shows the new return and the chatter says what happened.
Important: A done transfer can be reversed only once. A second attempt is refused. If a return must be validated by hand (for example tracked products that need lots you must choose), the module tells you and stops.

Manufacturing orders

In plain words: With Manufacturing installed, the second module taqnix_force_cancel_reset_mrp adds the same two buttons to manufacturing orders.
A done manufacturing order: Odoo offers Unbuild, the module adds Force Cancel / Unbuild.
A done manufacturing order: Odoo offers Unbuild, the module adds Force Cancel / Unbuild.
A done order is reversed by an unbuild of the produced quantity.
A done order is reversed by an unbuild of the produced quantity.
State of the orderResult
Confirmed, In progressWork orders and stock moves are cancelled (or reset to draft). Components are released.
DoneAn 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.
Important: If the finished product is no longer in stock (it was already sold), the unbuild cannot be done and nothing is changed. Reverse the delivery first.

The audit log

In plain words: Every forced change is written to Settings → Force Cancel / Reset Log and to the chatter of the document. The log cannot be edited or deleted from the interface.
The log: who, which document, what mode, state before and after, and the reason.
The log: who, which document, what mode, state before and after, and the reason.
ColumnMeaning
Date / Done byWhen and who
Document type / DocumentFor example Customer Invoice INV/2026/00008
ModeReset to draft or Cancel
State before / afterThe state of the document, before and after
ReasonThe text typed in the window
In plain words: Open a line and press Open document to jump to the record. You can group the log by user, document type or day, and search by document or reason.

What it does not do

Not coveredWhy / what to do instead
Entries in a locked periodOdoo's fiscal lock dates are respected. Change the lock date (as an authorised user), then run the tool.
Hashed (inalterable) entriesLocked by law in some countries. Create a credit note instead.
Invoices accepted by a tax authorityThey need a cancellation request through the e-invoicing app first.
Bank statement lines already matchedUn-match them in the bank reconciliation first.
Changing quantities of a done transferThe module reverses it. Create a new transfer with the right quantities.
In plain words: The module is a power tool. Use it for mistakes, not as part of a normal workflow.

For developers

In plain words: Skip this chapter if you only use the module.
ItemDetails
Mixintaqnix.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.
Grouptaqnix_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

ProblemWhat to do
I do not see the red buttonsYou 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 appearsThe invoice is in a closed period. Ask an adviser to move the lock date.
The unbuild or return needs a manual stepStock 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.