A build-to-order Odoo module that turns your SQL into governed business intelligence views — materialized or standard — exposed as read-only ORM models you can pivot, filter, group, and export. ECOSIRE scopes, builds, installs, and supports it. Built to order by ECOSIRE for Odoo 17, 18, 19 — indicative price from $249.00 USD; request a quote for a scoped proposal.
App manifest
Built around your workflow
A build-to-order Odoo module that turns your SQL into governed business intelligence views — materialized or standard — exposed as read-only ORM models you can pivot, filter, group, and export. ECOSIRE scopes, builds, installs, and supports it.
No DIY setup — a working app, built, installed and supported by ECOSIRE.
Start with a one-time build price. We scope it with you at kickoff.
ECOSIRE builds, configures and installs it on your Odoo.
You go live in about 2–4 weeks, with a post-launch support window.
Analysts and finance teams on Odoo constantly hit the same wall: the reporting they actually need spans several models — sale orders joined to invoices joined to stock moves joined to analytic lines — but Odoo's native pivot, list, and graph views only report on one model at a time. The out-of-the-box workarounds are painful: build a fragile computed model, wire up dozens of related/compute fields, export to a spreadsheet and reconcile by hand, or push everything into an external BI tool and re-implement your access rules there. Meanwhile the SQL that answers the question already exists in someone's psql session — it just has nowhere to live inside Odoo where the business can safely use it.
The SQL BI View Editor closes that gap. We build a module that lets your team define a business intelligence dataset as a SQL statement and register it as a first-class, read-only Odoo model backed by a real PostgreSQL view. Under the hood each definition maps to a models.Model with _auto = False whose init() runs a CREATE OR REPLACE VIEW for standard (always-live) views, or a CREATE MATERIALIZED VIEW with a scheduled REFRESH for heavy aggregations that you would rather compute on a cron. The declared columns become proper Odoo fields — Integer, Float, Char, Many2one, Date, Datetime, Selection — so the dataset instantly gains pivot, graph, list, and search views, group_by/measure behaviour, and XLSX export, with no bespoke reporting UI to maintain.
Governance is built in, because a raw SQL surface inside an ERP is a liability if it is ungoverned. Every generated model ships with ir.model.access.csv entries and optional ir.rule record rules so a view can be scoped by company, department, or user group, and multi-company datasets respect company_id filtering. Definitions are edited by a restricted authoring group only; the resulting views are read-only to everyone else. We validate each statement against a SELECT-only allowlist so authors cannot smuggle DML into a definition, register the view against the correct database cursor, and (for materialized views) create the supporting indexes and a REFRESH MATERIALIZED VIEW CONCURRENTLY-safe unique index where the workload calls for it. Refreshes can be triggered by ir.cron, by an automated action, or on demand from a button. Because the datasets are ordinary models, they are reachable over XML-RPC/JSON-RPC and can feed a downstream BI/dashboard tool through Odoo's own authenticated API rather than a direct database connection.
Delivery is build-to-order: this is not an existing apps.odoo.com download. We start with a short scoping call to inventory the reports you need, the source models and joins involved, your Community-vs-Enterprise edition, target version (17.0, 18.0, or 19.0), and multi-company/localization requirements. We then build your version of the module, prove it on a staging database with your data volumes, run UAT with your analysts, and deploy with a rollback plan. Typical delivery is 2–4 weeks from confirmed scope. Pricing starts from $249 (indicative, single-company base scope); the number and complexity of source views, multi-company/record-rule depth, materialized-refresh scheduling, and data-migration or historical-backfill volume increase the quoted scope. You receive a fixed quote after the scoping call.
Needs cross-model reporting (orders-to-invoice-to-payment, margin by analytic account) that native single-model pivots can't express. Wants to author the SQL once and hand the team a governed, filterable dataset instead of a spreadsheet.
Owns reporting standardization across departments and companies. Needs role-scoped access, multi-company `company_id` filtering, and a read-only surface so ad-hoc queries never mutate ERP data.
Already writes the SQL and maintains dashboards downstream. Wants those queries to live as Odoo models reachable over XML-RPC/JSON-RPC with materialized-view refresh on a schedule, rather than a fragile direct database connection.
Needs joined views over stock moves, purchase, and manufacturing with heavy aggregations refreshed nightly, surfaced as pivot/graph views the team can slice without exporting.
| Criterion | ECOSIRE | Custom Build | Competitor | Odoo Native |
|---|---|---|---|---|
| Cross-model reporting (multi-table joins) | Purpose-built: any SQL join exposed as one governed BI dataset | Achievable but you design and maintain the SQL-to-model plumbing yourself | Generic editor, often limited to simpler joins and light governance | |
| Materialized vs standard views | Both, chosen per dataset with scheduled `REFRESH` and indexing | Possible, but refresh/index logic is hand-rolled each time | Usually standard views only; materialized support varies | |
| Access governance | Per-view `ir.model.access.csv` + optional `ir.rule`, restricted authors | Whatever you remember to build | Basic group access; record-rule depth often shallow | |
| Multi-company | `company_id`-aware filtering built into scoped datasets | Add it yourself per view | Inconsistent; frequently single-company assumptions | |
| External BI / API access | Datasets queryable over XML-RPC/JSON-RPC through Odoo auth | Build the endpoints or expose a raw DB link | Varies; may require direct DB access | |
| Safety of raw SQL | SELECT-only allowlist + read-only generated models | Depends entirely on your validation discipline | Validation strength varies by vendor | |
| Fit to your data model | Built to your exact reports, versions, and edition | Fully bespoke but full cost and timeline on you | Generic; you adapt your needs to the tool | |
| Support & ownership | Fixed quote, support window, full source + git handover | You own everything including the maintenance burden | Vendor-dependent; roadmap outside your control |
No. This is a build-to-order engagement, not an existing apps.odoo.com download. ECOSIRE scopes your reporting requirements, builds your version of the module, validates it on staging, and installs it. You receive installable source and a git repo at handover.
Typical delivery is 2–4 weeks from confirmed scope. The timeline depends on how many source views you need, the complexity of the joins, multi-company/record-rule depth, and whether historical data backfill is involved. We confirm a delivery date with the fixed quote after the scoping call.
Pricing starts from $249 (indicative, single-company base scope). The number and complexity of views, multi-company and record-rule requirements, materialized-refresh scheduling, and any data-migration volume increase the quoted scope. After a short scoping call we send a fixed, itemized quote — no firm price is committed before we understand your requirements.
Every engagement includes a post-go-live support window for defect fixes and configuration questions. Because you receive the full source and git repository, your team can maintain and extend the module. We also offer ongoing support and version-upgrade engagements (for example moving your build from 17.0 to 18.0 or 19.0) as a separate scope.
Both are supported and we choose per dataset during scoping. Standard views (`CREATE OR REPLACE VIEW`) are always live and best for lightweight queries. Materialized views are used for heavy aggregations where you prefer to precompute on a schedule; we add the supporting indexes and an `ir.cron` refresh (with a unique index so `REFRESH … CONCURRENTLY` doesn't lock readers).
Yes. The module is built on standard ORM primitives (`_auto = False` models, `ir.model.access.csv`, `ir.rule`, `ir.cron`) that exist in both Community and Enterprise, and we build for Odoo 17.0, 18.0, or 19.0. Any Enterprise-only integration points (such as feeding Enterprise dashboards) are confirmed during scoping.
Yes, because the surface is governed. View definitions are editable only by a restricted authoring group, each statement is validated against a SELECT-only allowlist so no DML/DDL can be saved, generated models are read-only (`create`/`write`/`unlink` blocked), and every view carries access rules and optional record rules for company/group scoping.
A build-to-order Odoo module that turns your SQL into governed business intelligence views — materialized or standard — exposed as read-only ORM models you can pivot, filter, group, and export. ECOSIRE scopes, builds, installs, and supports it.