| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Invoicing (account)
• Discuss (mail) |
| Community Apps Dependencies | Show |
| Lines of code | 2820 |
| Technical Name |
l10n_ro_account_report_partner_balance |
| License | OPL-1 |
| Website | https://www.nexterp.ro |
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Invoicing (account)
• Discuss (mail) |
| Community Apps Dependencies | Show |
| Lines of code | 2820 |
| Technical Name |
l10n_ro_account_report_partner_balance |
| License | OPL-1 |
| Website | https://www.nexterp.ro |
Romania - Aged Partner Balances
Romania - Aged Partner Balances
Overview
This module adds two Romania-scoped variants of Odoo's Aged
Partner Balance reports — RO Aged Receivable and RO Aged
Payable — built on top of Odoo's native account.report engine.
The variants are country-scoped to Romania (country_id = base.ro)
and re-implement the aging-bucket SQL with intervals adapted to the
Romanian accounting practice for trade-partner ledgers.
What's different from the stock Aged Partner Balance:
- Fixed Romanian aging buckets —
At Date,1 - 30,31 - 90,91 - 270,271 - 365,Older. The aging-interval filter that lets users redefine the buckets on the stock report is hidden via an OWL inheritance ofAgedPartnerBalanceFilters. - Custom SQL engine — each variant exposes its own
_report_custom_engine_aged_payable/_report_custom_engine_aged_receivableformula and a dedicated abstract model (l10n.ro.account.aged.payable/l10n.ro.account.aged.receivable) inheriting the stockaccount.aged.partner.balance.report.handler. - Counterpart-aware drilldown —
open_journal_itemsinjects the opposite account-type filter so opening the journal items from a partner line shows both sides of the partner's transactions.
Both variants are registered as standard Odoo client actions
(ro-aged-receivable, ro-aged-payable) and inherit pagination,
drill-down, search and PDF / XLSX export from the
account_reports engine.
Built & supported by NextERP Romania
Romanian Odoo specialists, here for the long run — from implementation to localization and day-to-day production support.
What we do
Odoo Solutions
From quick-start rollouts to multi-company deployments and custom modules built for your processes.
Romanian Localization
SAF-T (D406), e-Factura, e-Transport, D300 / D390 / D394, ANAF integration, full chart of accounts and fiscal positions.
Our Services
Implementation, customization, migration, integration, support and consultancy — Romanian-speaking, SLA-backed.
Features
- Two RO-scoped reports —
RO Aged ReceivableandRO Aged Payable, registered as variants of the stock Aged Receivable / Aged Payable (root_report_idpoints to the stock reports) and country-scoped to Romania (country_id = base.ro). - Romanian aging buckets — six fixed columns:
At Date,1 - 30,31 - 90,91 - 270,271 - 365,Older. Column labels are set in_custom_options_initializer; the stock aging-interval filter is removed in the OWL view viaAgedPartnerBalanceFiltersinheritance. - Custom SQL engine — the abstract model
l10n.ro.account.aged.partneroverrides_aged_partner_report_custom_engine_commonto build the six-rowperiod_tableand the per-bucketCASEcolumns. Receivable and payable variants share the same engine, parametrised byinternal_type(asset_receivablevs.liability_payable). - Reconciliation-aware balances — debit / credit amounts are
netted against
account_partial_reconcilerows whosemax_date <= date_to, so partially reconciled invoices land in the correct bucket for the residual amount only. - Foreign-currency column — each row exposes
amount_currencyand the line's currency, alongside the company-currency totals. - Drill-down to journal items —
open_journal_itemsextends the stock action with the opposite-sideaccount_typeso a customer drill-down also shows the matching vendor lines (and vice versa).
Configuration
The module is plug-and-play: no master data has to be created specifically for the RO Aged Partner Balance reports. A few prerequisites have to be in place so the reports yield the expected result:
- Romanian fiscal company — the variants are country-scoped to
Romania (
country_id = base.ro). Make sure the active company'saccount_fiscal_country_idis Romania so the reports appear in the variant selector of the stock Aged Receivable / Aged Payable. - Romanian chart of accounts — install the Romanian chart so
account.account.codeis populated and so trade receivable (411x) / trade payable (401x) accounts carry the correctaccount_type(asset_receivable/liability_payable). - Partner records on invoices — only
account.move.linerows carrying apartner_idaggregate under the partner grouping; for manual journal entries set the partner so they appear in the right bucket. - Reconciliation discipline — the SQL engine nets balances
against
account_partial_reconcilerows whosemax_date <= options['date']['date_to']; reconciling payments against invoices is what shifts amounts out of the buckets, so keep customer / vendor reconciliation up to date. - Aging-date basis — pick the aging basis at run time from the
report's filter bar (
base_on_invoice_datevs.date_maturity); the engine readsoptions["aging_based_on"]and bases the bucket placement on whichever date was chosen.
Access follows the stock account_reports model — any user with
read access to account.report can open the reports.
How it works
Opening the reports
The two variants are exposed as Odoo client actions registered in
views/report_data.xml:
- RO Aged Receivable — action tag
account_report, pathro-aged-receivable. - RO Aged Payable — action tag
account_report, pathro-aged-payable.
They appear in the variant selector of the stock Aged Receivable /
Aged Payable reports (Accounting → Reporting → Partner Reports) for
companies whose fiscal country is Romania, and can also be opened
directly via their path.
Columns
| Column | Meaning |
|---|---|
| Invoice Date | invoice_date of the line (first when the partner has many) |
| Amount Currency | Net amount in the line's own currency |
| Currency | Currency code |
| Account | Account code of the receivable / payable line |
| At Date | Open amount on the report date_to itself (no aging delay yet) |
| 1 - 30 | Open amount aged 1 to 30 days |
| 31 - 90 | Open amount aged 31 to 90 days |
| 91 - 270 | Open amount aged 91 to 270 days |
| 271 - 365 | Open amount aged 271 to 365 days |
| Older | Open amount older than 365 days |
| Total | Sum of the six bucket columns |
The aging-interval filter is hidden via an OWL inheritance so the
Romanian buckets stay fixed; the rest of the standard
AccountReportFilters (date, partner, account, multi-company,
draft, search bar) remains available.
Behind the scenes
- The custom handler model
(
l10n.ro.account.aged.receivableor…aged.payable) overrides_aged_partner_report_custom_engine_commonand builds a six-rowperiod_table(date_start, date_stop, period_index). - The SQL joins
account_move_lineto itself viaaccount_partial_reconcile(debit and credit sides) and assigns each line to its bucket through a join onperiod_table. The open amount per bucket is then summed with a sign multiplier of-1for payables so the printout displays positive values. - The engine collapses the result per grouping key (
partner_id, thenidwhen unfolding a partner), and the Aged Partner Balance OWL component renders the columns and the partner / line drill-down tree. - Drill-down from a line (
open_journal_items) extends the stock action with the opposite-sideaccount_typefilter so the user immediately sees both sides of the partner's transactions.
Versions
19.0.0.1.0 (2026-05-24)
- Changelog tracking starts at this release.
Discover the NextERP suite
Other modules from the same publisher, built to work together.
NextERP Romania
Odoo implementation, customization, Romanian localization and long-term support since 2018.
Odoo Proprietary License v1.0 This software and associated files (the "Software") may only be used (executed, modified, executed after modifications) if you have purchased a valid license from the authors, typically via Odoo Apps, or if you have received a written agreement from the authors of the Software (see the COPYRIGHT file). You may develop Odoo modules that use the Software as a library (typically by depending on it, importing it and using its resources), but without copying any source code or material from the Software. You may distribute those modules under the license of your choice, provided that this license is compatible with the terms of the Odoo Proprietary License (For example: LGPL, MIT, or proprietary licenses similar to this one). It is forbidden to publish, distribute, sublicense, or sell copies of the Software or modified copies of the Software. The above copyright notice and this permission notice must be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Please log in to comment on this module