Skip to main content
Reset Journal Entries — A build-to-order Odoo accounting tool that lets controllers bulk reset selected journal entries back  — 1/1Illustrative preview

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.

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

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
Lock-date awareness: respects `_check_fiscalyear_lock_date`, with an optional finance-manager override that forces a mandatory typed reason
Hash-chain / inalterability guard for secured journals (`restrict_mode_hash_table`) so integrity-locked entries are handled per your policy, not silently altered
Role-scoped visibility via `ir.model.access.csv` and record rules — the bulk action appears only for the accounting groups you nominate
Full audit trail: every transition posts to `mail.thread` chatter and to a dedicated log model capturing user, timestamp, source state, target state, and reason
Optional auto-unreconcile step that detaches reconciled lines when a reset legitimately requires it, logged as a distinct action
Dry-run / preview mode in the OWL wizard that lists which moves will transition and which will be skipped, with the reason for each skip
Exposed over XML-RPC / JSON-RPC for external migration scripts and integrations that need to drive corrections programmatically
Optional `ir.cron` or automated-action hook for scheduled clean-up of stuck draft or cancelled entries under defined rules
Multi-company aware: transitions respect company boundaries and per-company journals and lock dates
Built and tested for Odoo 17.0, 18.0, and 19.0 on both Community and Enterprise, with edition-appropriate logging surfaces

Built to order, done for you

No DIY setup — a working app, built, installed and supported by ECOSIRE.

  1. 1

    You order

    Start with a one-time build price. We scope it with you at kickoff.

  2. 2

    We build & install

    ECOSIRE builds, configures and installs it on your Odoo.

  3. 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

CriterionECOSIRECustom BuildCompetitorOdoo Native
Bulk operationMulti-select batch reset in one transaction, all-or-nothingPossible but you build and test the batching yourselfOften per-record or limited batch handlingOne move at a time via Reset to Draft
Audit trailChatter plus dedicated log: who, when, source/target state, reasonOnly what you remember to buildVaries; frequently minimal loggingStandard message log on the move only
Lock-date / period controlRespected by default; role-scoped override with mandatory reasonYou must implement and guard it correctlyMay bypass silently or ignore the caseBlocks the reset entirely
Access controlScoped via ir.model.access.csv and record rules to named rolesDepends on your implementation disciplineUsually a single broad access groupTied to standard accounting rights
Fit to your processBuilt to your journals, roles, states, and override policyFully bespoke but on your time and budgetGeneric; you adapt your process to itOdoo's fixed workflow
Support & warrantyPost-go-live window plus source and git handoverWhatever your internal team can sustainVendor-dependent, often forum-onlyCovered by your Odoo support contract
API accessSame operation exposed over XML-RPC / JSON-RPCOnly if you build the endpointRarely exposedStandard model methods, no bulk convenience
Version coverageBuilt and tested for 17.0, 18.0, 19.0, Community & EnterpriseWhatever you target and maintainOften lags new Odoo releasesShips 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.

Request a quote

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

Request a Quotation

Tell us about your Reset Journal Entries requirements and we'll send pricing, licensing options and a tailored proposal — usually within one business day.

No payment now. This sends a quote request to our team — we'll follow up by email with pricing and next steps.