| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
Discuss (mail)
|
| Community Apps Dependencies | Show |
| Lines of code | 878 |
| Technical Name |
nexterp_license |
| License | LGPL-3 |
| Website | https://www.nexterp.ro |
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
Discuss (mail)
|
| Community Apps Dependencies | Show |
| Lines of code | 878 |
| Technical Name |
nexterp_license |
| License | LGPL-3 |
| Website | https://www.nexterp.ro |
NextERP License Client
Generic license cache for private NextERP packages
Overview
This module provides a generic, shared license cache used by every private NextERP package (declarations, partner_data_anaf, ...). Consuming modules extend license_type, declare their API key field on res.company, and yield their requests from _collect_license_requests. The cache itself is one row per (company, license_type), refreshed by a cron against the NextERP license server.
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
- Shared license cache — one
nexterp.licenserow per(company, license_type), used by every private NextERP module (declarations, partner_data_anaf, ...). - Pluggable consumers — each consuming module extends the
license_typeselection and overrides_collect_license_requeststo yield its own(license_type, api_key)tuples. - Centralised refresh cron — a single cron iterates all companies,
collects every consumer's requests and POSTs them to the NextERP
license server's
/check_licenseendpoint. - Cached state, dates and feature flags —
state,start_date,expiry_date,feature_codes,package_name,latest_versionandlast_checkare stored on the cache row so the rest of Odoo can read them without hitting the network. - Feature gating helper —
has_feature(license_type, code)is the one-line check consuming modules call to enable a paid feature. - Optional auto-update — a second cron pip-upgrades any package
whose
latest_versionexceeds the installed version; the Odoo module upgrade itself is delegated to an external supervisor. - Per-company server URL — the license server URL is configurable
on
res.company(group System) and defaults tohttps://nexterp.ro.
Configuration
1. Set the license server URL (optional)
Edit the company (group System) to override NextERP License Server
(nexterp_license_server_url). The default is https://nexterp.ro and
is correct for all standard NextERP subscribers.
2. Provide the API key on each consuming module
This module ships only the cache. The actual API keys live on
res.company and are added by each consuming module — for example
nexterp_declarations_license_key for the declarations package.
Open Settings → Companies → your company and fill in the keys
issued to you by NextERP support.
3. Refresh
The scheduled action NextERP License: Refresh runs daily and
calls /check_license for every (company, license_type) declared by
consuming modules. You can also trigger a refresh manually from the
list view (NextERP → Licenses) via Refresh All.
4. Auto-update (optional)
The scheduled action NextERP License: Auto-update Packages
pip-upgrades each package whose latest_version exceeds the locally
installed version. The actual Odoo module upgrade (restart with
-u <module>) is delegated to your external supervisor — this cron
only refreshes the Python package on disk.
How it works
Inspecting cached licenses
- Go to NextERP → Licenses.
- Each row shows a
(company, license_type)pair with its currentstate,start_date,expiry_date,feature_codes,package_name,installed_versionandlatest_version. - Open a row to read the last error returned by the server
(
last_error) and the timestamp of the most recent check (last_check).
Calling from another module
Consuming modules check whether a feature is unlocked with:
self.env["nexterp.license"].has_feature("declarations", "d390")
This returns True only when the cache row for the current company is
active, not expired and includes the given code in feature_codes.
Versions
19.0.1.0.0 (2026-06-08)
- Initial release: generic license cache shared by every private NextERP package.
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.
Please log in to comment on this module