- Home
- Apps
- SaaS Tools
- Reset Journal Entries
Illustrative previewA build-to-order Odoo accounting tool that lets controllers bulk reset selected journal entries back to draft,
cancel, or re-post them under strict permission and audit controls.
ECOSIRE builds, installs, and supports it for your Odoo 17, 18, or 19 environment.
What is Reset Journal Entries?
A build-to-order Odoo accounting tool that lets controllers bulk reset selected journal entries back to draft, cancel, or re-post them under strict permission and audit controls. ECOSIRE builds, installs, and supports it for your Odoo 17, 18, or 19 environment. Built to order by ECOSIRE for Odoo 17, 18, 19 — indicative price from $999.00 USD; request a quote for a scoped proposal.
Key Features
Built to order, done for you
No DIY setup — a working app, built, installed and supported by ECOSIRE.
- 1
You order
Start with a one-time build price. We scope it with you at kickoff.
- 2
We build & install
ECOSIRE builds, configures and installs it on your Odoo.
- 3
Go live + support
You go live in about one working week, with two weeks of go-live support. Defects in the code we deliver are fixed free of charge.
Technical Specifications
- Odoo Compatibility
- Odoo 17, Odoo 18, Odoo 19
- Editions
- Enterprise & Community
- License
- Licence confirmation required
- Python Requirement
- Python 3.10+
- Database
- PostgreSQL 12+
About this Product
Every accounting team eventually hits the wall Odoo builds on purpose: once an account.move is posted, it locks. That is correct for audit integrity, but it turns routine month-end corrections into a slog. A mispicked journal, a wrong tax on a batch of entries, an imported opening balance that needs re-mapping, or a reversal that should never have gone through — each one has to be handled one record at a time, and the standard "Reset to Draft" is per-move, gated by the journal's inalterability setting and the accounting lock dates. When you are staring at three hundred entries from a bad import, that native path runs out of road fast.
Reset Journal Entries is a build-to-order Odoo tool that gives your controllers a governed, bulk state-transition action across selected account.move records — resetting them to draft, moving them to cancel, or re-posting them to posted — directly from the journal-entries and journal-items list views. It is not a magic bypass. We build it to respect (or, where your finance lead explicitly authorizes, to override with a mandatory logged reason) the lock-date checks in account.move._check_fiscalyear_lock_date, the hash-chain integrity flag on secured journals, and the reconciliation state of each line. Under the hood it is a proper Odoo module: a models.TransientModel wizard invoked from a server action that iterates the recordset, validates each move's preconditions with @api.constrains-style guards, calls the standard button_draft / button_cancel / action_post methods so no business logic is short-circuited, and rolls the whole batch back in a single transaction if any move fails validation. Every transition writes to mail.thread (the chatter) and to a dedicated audit log model, so you always know who reset what, when, and why.
Access is locked down with ir.model.access.csv plus record rules so the bulk action only appears for the accounting roles you nominate — typically a controller or finance-manager group, never a data-entry clerk. We wire the confirmation wizard to force a reason field before any override of a locked period, add an optional automated action to auto-unreconcile lines when a reset requires it, and expose the same operation over the XML-RPC / JSON-RPC API if you drive corrections from an external system or migration script. The UI is delivered as standard XML list-view buttons and an OWL wizard dialog, and where you use Enterprise we hook the operation into the accounting audit trail; on Community we ship an equivalent logging surface so nothing is silent.
Because this is made to order, delivery works around your environment rather than a shrink-wrapped download. After a short scoping call we confirm the exact target states, which roles get the action, how lock-date overrides should behave, and which Odoo version (17.0, 18.0, or 19.0) and edition you run. We then build against a copy of your database, validate the transitions on staging with your real data, and hand over installable source with a rollback plan. Typical delivery is one working week from confirmed scope. Pricing starts from $999 (indicative, single-company base scope); multi-company setups, hashed/secured journals, deep lock-date override policies, or large-volume data-migration corrections increase the quoted scope.
What you get
- Installable source code for your Odoo version and edition (17.0 / 18.0 / 19.0, Community or Enterprise), delivered as a versioned module
- Installation and configuration on your staging and production environments, including access-group and record-rule setup
- Technical documentation covering the models, methods, security rules, and override policy for your future developers
- End-user guide plus a live training session for your accounting/controller team
- Post-go-live support window for defect fixes and questions after deployment
- UAT on a staging copy of your database with a documented rollback plan before production cutover
- Git repository handover with full commit history and tagged release
- Configuration record of which roles, target states, and lock-date override rules were agreed during scoping
Who this is for
Financial Controller
Owns month-end and year-end close and needs to correct batches of posted entries fast — bad imports, wrong journals, mis-tagged taxes — without touching each move by hand or losing the audit trail.
ERP / Odoo Administrator
Maintains the accounting configuration and wants a governed, role-scoped tool rather than granting broad developer access or running raw SQL to fix entry states.
Data Migration Lead
Loads opening balances or historical transactions and repeatedly needs to reset, re-map, and re-post large batches during cutover — ideally driven over the JSON-RPC API from a migration script.
Finance Manager / Signatory
Accountable for period integrity and wants any override of a locked period to be explicit, reason-logged, and restricted to trusted roles, not a silent bypass.
How Reset Journal Entries Compares
| Criterion | ECOSIRE | Custom Build | Competitor | Odoo Native |
|---|---|---|---|---|
| Bulk operation | Multi-select batch reset in one transaction, all-or-nothing | Possible but you build and test the batching yourself | Often per-record or limited batch handling | One move at a time via Reset to Draft |
| Audit trail | Chatter plus dedicated log: who, when, source/target state, reason | Only what you remember to build | Varies; frequently minimal logging | Standard message log on the move only |
| Lock-date / period control | Respected by default; role-scoped override with mandatory reason | You must implement and guard it correctly | May bypass silently or ignore the case | Blocks the reset entirely |
| Access control | Scoped via ir.model.access.csv and record rules to named roles | Depends on your implementation discipline | Usually a single broad access group | Tied to standard accounting rights |
| Fit to your process | Built to your journals, roles, states, and override policy | Fully bespoke but on your time and budget | Generic; you adapt your process to it | Odoo's fixed workflow |
| Support & warranty | Post-go-live window plus source and git handover | Whatever your internal team can sustain | Vendor-dependent, often forum-only | Covered by your Odoo support contract |
| API access | Same operation exposed over XML-RPC / JSON-RPC | Only if you build the endpoint | Rarely exposed | Standard model methods, no bulk convenience |
| Version coverage | Built and tested for 17.0, 18.0, 19.0, Community & Enterprise | Whatever you target and maintain | Often lags new Odoo releases | Ships with each Odoo version |
Frequently Asked Questions about Reset Journal Entries
Is this an existing app I can download and install today?
No. This is a build-to-order tool. ECOSIRE builds it against your specific Odoo version, edition, and correction policy, then installs and supports it. There is no instant download — the value is that it fits your journals, roles, and lock-date rules exactly.
How long does delivery take?
Typically one working week from confirmed scope. After the scoping call we build against a copy of your database, validate the state transitions on staging with your real data, and then schedule the production install with you. Complex multi-company or secured-journal policies sit at the longer end of that range.
How does pricing and scoping work?
Pricing starts from $999 as an indicative from-price for a single-company base scope. We give you a fixed written quote only after a short scoping call, because drivers like multi-company setups, hashed/secured journals, override policy depth, and data-migration volume change the effort. You approve the fixed quote before we build.
What support and updates do I get after go-live?
Every engagement includes a post-go-live support window for defect fixes and questions. You receive the full source and git repository, so your team can maintain it. We also offer optional ongoing support and version-upgrade work (for example moving the module from Odoo 17 to 18 or 19) as a separate arrangement.
Does it break Odoo's audit integrity or bypass lock dates?
No. It calls Odoo's standard `button_draft`, `button_cancel`, and `action_post` methods, so native logic runs normally, and every transition is written to the chatter and a dedicated audit log. Lock-date and hash-chain checks are respected by default; any override is restricted to nominated roles and requires a mandatory logged reason.
Which Odoo versions and editions do you support?
We build for Odoo 17.0, 18.0, and 19.0 on both Community and Enterprise. On Enterprise we can hook into the accounting audit trail; on Community we ship an equivalent logging surface so no transition is ever silent. Tell us your exact version and edition on the scoping call.
Can it reset entries in bulk from an import or migration?
Yes. That is a core use case. You can select hundreds of entries in the list view and transition them in one batched, all-or-nothing transaction, or drive the same operation over the XML-RPC / JSON-RPC API from a migration script for automated correction runs.
Related Modules

Referral 'Refer & Earn' Program
Build-to-order Odoo module: shareable referral codes with automatic wallet, coupon or points rewards for referrer and referee.

Report Full Background per Company
A build-to-order Odoo module that applies custom full-page background images and watermarks to your QWeb PDF reports, resolved per company so each legal entity prints on its own branded stationery. ECOSIRE builds, installs, and supports it on your database after a short scoping call.

Restrict POS Refund with Password
A made-to-order Odoo Point of Sale extension that forces a password or manager PIN before any refund, return, or negative-quantity line is authorized. ECOSIRE builds it to your workflow, installs it, and supports it.

RingCentral SMS for Odoo CRM
A build-to-order Odoo CRM extension that sends, receives, and threads RingCentral SMS conversations against contacts and leads — with templates, bulk send, opt-out handling, and delivery tracking logged to the chatter. ECOSIRE builds, installs, and supports it after you request a quotation.
Reset Journal Entries
A build-to-order Odoo accounting tool that lets controllers bulk reset selected journal entries back to draft, cancel, or re-post them under strict permission and audit controls. ECOSIRE builds, installs, and supports it for your Odoo 17, 18, or 19 environment.
- Bulk `Reset to Draft`, `Cancel`, and `Re-post` server action across multi-selected `account.move` records from the journal-entries and journal-items list views
- Calls the standard `button_draft`, `button_cancel`, and `action_post` methods so native posting logic, sequence handling, and tax computation are never bypassed
- Single-transaction batch execution — if one move fails validation the entire batch rolls back, leaving no half-reset state
- Per-move precondition validation for reconciliation state, matched payments, and downstream documents before any transition is attempted