BambooForge Dashboard
A drag-and-drop, data-driven dashboard builder for Odoo 17. Visualise any model with 15+ chart types, set targets, compare periods, drill down into the data, and share the board as a one-click PDF, email, or a scheduled subscription that mails a snapshot daily, weekly or monthly — all with no code.
A live dashboard, built inside Odoo 19
A screen recording from a real Odoo 17 install — picking a model, grouping and measuring, choosing a chart, arranging the grid, setting targets and exporting the board, in a single pass.
Ships with two production dashboards — pointed at your own data
Install the module and you get two fully-built boards immediately: a Sales Performance board on sale.report / sale.order and a CRM Pipeline board on crm.lead. They render your real sales and pipeline — no setup, no configuration. Every board and widget is editable and deletable, so they double as a template you can reshape.
sale.report.
crm.lead.Turn any model into a board — no code
Stop exporting to spreadsheets to see your numbers. Point BambooForge Dashboard at any Odoo model, group and measure it, pick from 15+ chart types and lay it out on a drag-drop grid. Set bambooforge.dashboard.item.goal targets, compare against the previous period, click a chart to drill down through an action chain, then ship the whole board as a PDF or email — straight from an bambooforge.dashboard.board.
What you actually get
Seven capabilities, built on amCharts 5, gridstack and pdfmake — not marketing surface.
15+ chart types
Bar / stacked / horizontal, line / area / cumulative, pie / doughnut / semi, polar / radial, scatter, funnel, radar, KPI tiles, list and map views — all powered by amCharts 5.
Drag-and-drop layout
A 12-column gridstack grid: drag, resize and reorder widgets, and the layout persists per board — every user opens it laid out the way you left it.
Build from any model, no code
Pick a model, group by any stored field (incl. date buckets day→year), measure by count / sum / average or a Python expression, and filter with a domain.
Targets & period comparison
Set KPI goals via bambooforge.dashboard.item.goal and toggle previous-period comparison. 10 date presets — WTD / MTD / QTD / YTD, last 7 / 30 / 90 / 365, or custom.
Drill-down & map
Click a chart to drive a configured action chain (bambooforge.dashboard.item.action), or plot geo data on a map view via base_geolocalize.
Share it
Export the board to multi-page PDF (pdfmake + html2canvas) and send it by email with the bundled mail template. Access is group-controlled and multi-company aware.
Scheduled dashboard subscriptions
Add a bambooforge.dashboard.subscription and a board emails itself to chosen users, contacts or addresses daily, weekly or monthly — as a PDF attachment, inline HTML, or both. Idempotent per period via last_sent, so the cron never sends the same period twice.
Every screen, from a live install
Captured from a running Odoo 17 with real data — not mockups.
Built for production
Group-based access
Boards are limited to their assigned groups — only the right people see the right dashboards.
Multi-company isolation
Company record rules on boards and items keep each company's dashboards cleanly separated.
Respects source-model rights
Every widget reads through the user's own access rights on the source model — no data leaks past your security.
Safe domain eval
Filter domains are validated on save, so a malformed or unsafe expression never reaches production.
Client-side rendering
amCharts renders thousands of points in the browser, keeping charting load off the server.
Bundled libraries
No external CDN: gridstack, amCharts 5, pdfmake and pdf.js all ship inside the module.
What's included — and what's on the roadmap
An honest line-by-line of what ships today versus what's coming next. No surprises after purchase.
| Capability | Status |
|---|---|
| 15+ amCharts chart types | ✔ Included |
| Drag-drop 12-column grid with persistence | ✔ Included |
| Group-by + sub-group-by | ✔ Included |
| Date buckets & 10 presets | ✔ Included |
| Count / Sum / Average / Python measures | ✔ Included |
| KPI targets & previous-period comparison | ✔ Included |
| Drill-down action chains | ✔ Included |
| Map view (geolocalize) | ✔ Included |
| PDF export | ✔ Included |
| Email template | ✔ Included |
| Scheduled dashboard subscriptions (daily / weekly / monthly) | ✔ Included |
| Emailed snapshot — PDF attachment + inline HTML body | ✔ Included |
| Idempotent per-period sending (no duplicate emails) | ✔ Included |
| Group access + multi-company | ✔ Included |
| Live websocket auto-refresh (manual refresh today) | Roadmap |
| Custom SQL / cross-model joins per widget | Roadmap |
| Mobile edit mode (mobile is view-only today) | Roadmap |
From install to a live board in minutes
Four steps from an empty addons path to a dashboard you can share.
Install
Drop the module in your addons path, restart and install from Apps.
Create a board
Add an bambooforge.dashboard.board and assign the groups that may see it.
Add items
Pick a model → group → measure → chart type. Add as many widgets as you need.
Share
Arrange the grid, set targets, then export to PDF or email the board.
What's in the box
In the box
- Dashboard builder with 15+ chart types.
- 12-column drag-drop grid with per-board persistence.
- KPI targets and previous-period comparison.
- Drill-down action chains and a map view.
- PDF export and a board → email template.
- Scheduled dashboard subscriptions — emailed PDF + inline HTML snapshots, daily/weekly/monthly, idempotent per period.
- Group-based and multi-company access control.
- Bundled JS libraries — gridstack, amCharts 5, pdfmake, pdf.js.
- Complete OPL-1 source.
Roadmap / good to know
- Refresh is on-demand — no live websocket push yet.
- One model per widget — no cross-model joins.
- Editing is desktop; viewing works on mobile.
- Depends on
base_geolocalizeandspreadsheet_dashboard.
Frequently asked
What data can I chart?
Any Odoo model, with group-by, date buckets and domain filters; measures by count, sum, average or a Python expression — so you can visualise practically anything already in your database.
Does it work on Community?
Yes — it runs on both Community and Enterprise editions of Odoo 17.
How is access controlled?
Boards are limited to their assigned groups, items respect the source model's own access rights, and everything is multi-company aware.
Can I email dashboards automatically?
Yes — a Dashboard Subscription emails a board snapshot to chosen users, contacts or extra addresses on a daily, weekly or monthly schedule, as a PDF attachment, inline HTML, or both. Sending is idempotent per period, so the built-in cron never sends the same period twice.
Does it refresh live?
Data refreshes on demand. There's no websocket push yet — live auto-refresh is on the roadmap.
Give your team dashboards they'll actually use
BambooForge Labs · drag-and-drop Odoo 19 dashboards · OPL-1 · source included
bambooforge.labs@gmail.comMore from BambooForge Labs — one vendor, the same standard: tested, documented, supported.
BambooForge Dashboard: Charts, KPIs & Targets
Build live operational dashboards inside Odoo 19 without writing code: drop in tiles, charts, KPIs and lists that read straight from any Odoo model, group and measure the data the way you want, drag the tiles into place, then set targets and share the board with the right people.
This page is the complete manual. If you follow it top to bottom you can install the app, build your first dashboard, add a chart with the chart builder, set KPIs and targets, share the board, and fix the common issues without contacting support.
Overview
BambooForge Dashboard turns any Odoo model into a visual dashboard. Each dashboard is a board that holds items; every item reads its own model, applies its own filter, and renders as a tile, a chart, a KPI, a list or a map. You arrange the items on a drag-and-drop grid and save the layout.
It covers:
- Tiles — a single number (count, sum, average, or a Python expression) with an icon, colour and optional unit.
- Charts — bar, horizontal bar, line, area, pie, doughnut, polar area, radial bar, scatter, radar, flower, funnel — each built from a model, a measure and a group-by.
- KPIs — a single headline number with an optional target or a previous-period comparison.
- Lists — a paginated table of records with the fields you choose, optional target and deviation columns.
- Maps — partners plotted by geolocation.
- Targets — a flat standard target, or dated target lines plotted against time-grouped charts and KPIs.
Every item reads live data through Odoo's own read_group / search engine, so it always reflects the current database and respects the user's access rights and the active company.
Requirements
- Odoo: 19.0, Community or Enterprise.
- Dependencies: the app depends on Spreadsheet Dashboard (spreadsheet_dashboard) and Geolocalization (base_geolocalize); both install automatically. The Spreadsheet Dashboard menu becomes the home of the Dashboard Pro menu, and Geolocalization provides partner latitude/longitude for the Map view.
- Python: no extra libraries beyond a standard Odoo 19 install. All charting libraries (amCharts 5, gridstack, pdfmake) ship inside the module.
- Odoo access: every internal user (group base.group_user) can view dashboards they are allowed to see. Only a Dashboard Manager (spreadsheet_dashboard.group_dashboard_manager) can create, edit or delete boards and items. The Odoo administrator (base.group_system) is a Dashboard Manager by default.
- Network: none. Everything runs inside Odoo against your own database.
Installation
- Copy bambooforge_dashboard into your Odoo addons path.
- Restart the Odoo service.
- Open Apps, click Update Apps List, search for BambooForge Dashboard, and press Activate / Install. The Spreadsheet Dashboard and Geolocalization dependencies install automatically.
After install you will find a Dashboards application in the main menu. The app adds a Dashboard Pro entry under it (menu Dashboards ▸ Dashboard Pro). Demo data installs a ready-made Dashboard Demo board you can open to see every item type at once.
Getting started — build your first dashboard
You build a dashboard in three moves: create the board, add items (tiles, charts, KPIs, lists, maps) to it, then arrange and save the layout.
Step 1 — Create a dashboard board
- Open Dashboards ▸ Dashboard Pro. You see the boards as kanban cards.
- Click New and fill in the board form:
| Field | What to enter |
|---|---|
| Dashboard Name | The board title, e.g. Sales Overview. |
| Group of dashboards | Optional grouping shown in the left search panel (Sales, CRM, Finance, Logistics, Services, Marketing, Website, Human Resources ship as defaults). |
| Show Under Menu | Optional. Pick one or more existing menus; the app auto-creates a link to this dashboard directly under each chosen menu so users reach it from where they work. |
| Menu Name | The label for those link menus (defaults to the Dashboard Name if left blank). |
| Company | Multi-company only. The company that owns the board; its items inherit it. |
| Allowed Groups | The security groups allowed to open this board. Leave blank and every internal user can see it; set one or more groups to restrict it (see Usage — sharing & access). |
| Default Date Filter | The period the board opens on: All Time, Week/Month/Quarter/Year to Date, Last 7/30/90/365 days, or Custom Filter (then pick a start and end date). |
- Click Save, then View (header button) to open the live dashboard.
Step 2 — Add a chart with the chart builder
On the open dashboard, as a Dashboard Manager you get an Add the Charts button (the + in the control panel). Click it to open the item builder form.
Fill it in top to bottom:
- Name — a unique label for the item.
- Type — pick the item type. The live preview on the right updates as you configure the rest. Available types:
| Type | What it renders |
|---|---|
| Tile | A single value with icon, colour and optional unit. |
| Bar Chart / Horizontal Bar Chart | Vertical or horizontal bars; supports stacking with a sub-group. |
| Line Chart / Area Chart | Trends over a group-by (often a date); supports a cumulative line. |
| Pie / Doughnut Chart | Share of a measure per group; doughnut/pie can render as a semi-circle. |
| Polar Area / Radial Bar Chart | Circular comparison of a measure across groups. |
| Scatter Chart | Points for value distribution. |
| Radar View / Flower View | Multi-axis comparison. |
| Funnel Chart | Stages sorted high-to-low (sort order is forced to descending). |
| List View | A paginated table of records with chosen fields. |
| KPI | A single headline number with optional target / comparison. |
| Map View | Partners plotted on a world map by geolocation. |
- Model (Data Source ▸ Model) — the model the item reads, e.g. Sales Order. This is the source of every measure and group-by below. Transient models are excluded.
- Domain — optional filter conditions (the standard Odoo domain editor), e.g. only confirmed orders.
- Date Filter Field — the date/datetime field the board's date filter applies to (defaults to Created on when you pick a model). It must be a Date or Datetime field.
- Data Type (Computation ▸ Data Type) — how the measure is aggregated:
| Data Type | Meaning |
|---|---|
| Count | Number of records matching the model + domain (no measure field needed). |
| Sum | Sum of a numeric Measure field. |
| Average | Average of a numeric Measure field. |
| Python Code | A small expression evaluated per group, with records (the matching recordset) in scope; set the answer in result. Example: result = len(records). |
- Measure — for Sum / Average, the numeric field to aggregate (only integer, float or monetary fields are offered).
- Group By — the field that becomes the chart's x-axis / categories (any stored field except binary and x2many). If it is a date/datetime field, also pick a Group By Type (Day, Week, Month, Quarter, Year).
- Sub Group By — optional second level of grouping; produces stacked bars or multiple series. With a sub-group you can enable Stacked Bar Chart.
- Sort By Field / Sort Order — optional ordering of the buckets.
Switch to the Display tab to set colours, icon, layout, Show Data Value, Show Legend, Show Records (click-through to the underlying Odoo list), and custom unit (monetary or a short text unit such as km). Save the item; it appears on the board.
Step 3 — Set KPIs and targets
KPI item. Choose Type = KPI, pick a Model, Data Type and (for sum/average) a Measure. In the Target group:
- Tick Enable Target and enter a Standard Target value — the KPI shows the headline number against that target.
- Or tick Compare With Previous Period (in the KPI Data Source group) to show the current value next to the same metric for the previous period (Week/Month/Quarter/Year to Date map to last week/month/quarter/year).
Chart targets. Bar, horizontal bar, line and area charts can show a target too:
- A Standard Target value plots a flat target series across every bar/point. Show it as an extra bar, or as an overlaid line by enabling Show Target As Line.
- Dated target lines (per-date goals) apply when the chart is grouped by a date field: each goal has a Date and a Value, and the targets are matched to the matching time buckets of the chart. When dated target lines are in use, the list/pagination limit is managed automatically.
Usage
Arrange & drag tiles
Open a board and, as a Dashboard Manager, choose Edit Layout from the gear (cog) menu. The grid becomes draggable (it uses a gridstack grid):
- Drag any tile to move it; drag its corner to resize it.
- Click Save Layout to persist the arrangement, or Discard to revert.
The saved arrangement is stored on the board (the Item Configurations field), so every viewer sees the same layout.
Quick-customise, move, duplicate, delete items
Hover an item to reveal its toolbar (manager only): the pencil opens a quick-customise popup for that item's type and look, the i shows its description, and the bin removes it. You can also Move an item to another board or Duplicate it across boards from the item actions.
Date filter, refresh & export
The control panel carries the board's date filter; changing it re-reads every item for the new period. From the gear menu a manager can Send by Email (uses the bundled Dashboard Report mail template), Print PDF, or Capture Dashboard (saves a board image used on the kanban card).
Sharing & access rights
Who can see a board is controlled by Allowed Groups on the board form:
- Blank — every internal user can open the board and its items.
- One or more groups — only users in those groups can open it; the app enforces this with record rules on both the board and its items, so a restricted board's charts, measures and data are not even readable by users outside the groups.
Who can build is fixed by Odoo groups: only Dashboard Managers create/edit/delete; everyone else is view-only. Use Show Under Menu to surface a board as a link beneath the menus where your users already work.
Customization
- Look — per item: background and font colour (with transparency), a built-in icon or an uploaded image, six tile layouts, decimal places, and a custom unit (monetary symbol or a short text unit, max 5 characters).
- Computation — beyond count/sum/average, the Python Code data type lets you compute a value per group from the matching records recordset (e.g. ratios across related models). The expression runs in Odoo's safe-eval sandbox.
- Click-through — enable Show Records so clicking an item opens the underlying Odoo records, or attach an Item Action (an existing window action on the same model) to jump to a specific view.
- Grouping — single or two-level grouping; date group-bys at Day/Week/Month/Quarter/Year; cumulative line on date-grouped charts; fill-temporal to show empty periods.
Troubleshooting
| Symptom | Cause and fix |
|---|---|
| Chart / KPI shows no data | The model has no records matching the Domain and the active Date Filter. Widen or clear the domain, switch the board date filter to All Time, and confirm the Date Filter Field points at a field that actually holds dates for these records. |
| Wrong measure or aggregation | Data Type and Measure disagree. Count ignores the measure; Sum/Average require a numeric Measure field (only integer/float/monetary fields are offered). Re-pick the measure after changing the model — changing the model clears it. |
| Chart is empty but the model has data | A required Group By is missing, or a date group-by has no Group By Type. Pick a Group By, and for date fields also pick Day/Week/Month/Quarter/Year. |
| Target line not showing | Targets only render on bar, horizontal bar, line and area charts and on KPI items. Enable Enable Target and set a Standard Target; dated target lines need the chart grouped by a date field so goals can match the buckets. |
| "Pagination limit value cannot be Negative or Zero" | The list-view pagination limit must be positive. Set a value above 0, or use dated target lines (which manage the limit automatically). |
| User cannot see a dashboard | The board has Allowed Groups set and the user is not in them, or the user is not an internal user. Add the user's group to Allowed Groups, or clear it to show the board to everyone. |
| User cannot create or edit dashboards | Only Dashboard Managers can build. Give the user the Dashboard Manager group (under the Spreadsheet Dashboard app). Plain users are view-only by design. |
| Slow dashboard on a large model | Each chart reads via read_group and is capped at 500 buckets. A high-cardinality Group By (free-text names, per-day over years) is slow and unreadable. Group by a coarser field or a larger date interval (Month/Quarter/Year) and tighten the domain. |
| Map view is empty | Partners have no latitude/longitude. Run Odoo's geolocalization on the contacts (the Geolocalization dependency) so they get coordinates to plot. |
| "Start date must be less than end date" | The board's custom date filter has the dates reversed. Set Start Date before End Date. |
Frequently asked questions
Which Odoo versions are supported? Odoo 19.0, Community or Enterprise. The app depends on the standard Spreadsheet Dashboard and Geolocalization modules, which ship with Odoo.
Do I need to write code? No. Tiles, charts, KPIs, lists and maps are built entirely from the form by picking a model, a measure and a group-by. The optional Python Code data type is there only if you want a computed value; everything else is point-and-click.
Which models can I chart? Any non-transient Odoo model your user may read. Measures are numeric fields (integer/float/monetary); group-bys are any stored field except binary and x2many.
Can different teams see different dashboards? Yes. Set Allowed Groups on each board. Leave it blank for everyone, or pick groups to restrict a board to those users — the restriction is enforced down to the item data.
Who is allowed to edit dashboards? Only users in the Dashboard Manager group (the Odoo administrator is one by default). All other internal users are view-only.
How do I move or reuse an item? Use the item's Move action to send it to another board, or Duplicate to copy it onto one or more boards.
Can I email or print a dashboard? Yes — a manager can Send by Email (using the bundled report template), Print PDF, or Capture Dashboard as an image from the gear menu.
What support and refund policy do I get? Every request is answered within 24 hours, setup help included. If you report a bug within 2 months of purchase and it is not resolved within 15 days, you are entitled to a full money-back refund.
Data, privacy & limits
- The app reads from the Odoo models you point each item at, using the viewing user's own access rights and the active company; it does not send data outside your Odoo instance.
- Multi-company is respected: boards and items are scoped to companies via record rules.
- Board visibility is enforced by Allowed Groups plus record rules on both boards and items.
- In scope today: tiles, the full chart set (bar, horizontal bar, line, area, pie, doughnut, polar area, radial bar, scatter, radar, flower, funnel), KPIs with target / previous-period comparison, list views with target & deviation columns, partner maps, flat and dated targets, drag-and-drop layout, date filtering, email / PDF / image export.
- Limits: each chart is capped at 500 group-by buckets for performance, so a very high-cardinality group-by is truncated — group by a coarser field instead. The Map view plots partners that have geolocation coordinates. Targets render on bar/horizontal-bar/ line/area charts and KPIs only.
Support & updates
- Support: bambooforge.labs@gmail.com — answered within 24 hours, setup help included.
- Refund: report a bug within 2 months of purchase; if unresolved within 15 days, full refund.
- Full source is included. Updates track the supported Odoo 19 line.
Upgrading & version compatibility
This build targets Odoo 19.0. Each Odoo major series (17.0, 18.0, 19.0) has its own dedicated build of this module — always install the build that matches your Odoo version. Mixing a build with a different Odoo series is not supported.
Patch upgrades (same series, e.g. 19.0.1.0.0 → later)
Back up your database and filestore first.
Replace the module folder with the newer build.
Restart Odoo with the module updated:
./odoo-bin -c your.conf -u bambooforge_dashboard -d your_db
Odoo applies any schema/data changes automatically. Your existing records and configuration are preserved.
Cross-version migration (e.g. Odoo 17 → 18)
Upgrading Odoo itself is a database migration handled by Odoo's standard upgrade tooling. When you migrate the database to the next Odoo series, install the matching build of this module for that series. Data created by this module carries over with the database migration.
After any upgrade the module's scheduled actions resume on their normal cadence — no manual re-activation is required.
Uninstallation
You can remove this module at any time from Apps → (this module) → Uninstall, or from the command line. Uninstalling is clean and reversible by reinstalling — but note what is and is not deleted.
What is removed
- The module's own tables and every record in them (7 models, prefixed bambooforge.*) — this is the data this module created.
- The menus, actions, views and reports this module installed.
- Its scheduled actions (cron jobs) — they stop immediately on uninstall.
- The security groups this module defined (user assignments to them are dropped).
What is preserved
- Your standard Odoo data (partners, products, sales, invoices, inventory moves) is not deleted — this module only reads and annotates it; the underlying records stay.
- Attachments and chatter messages on standard records are kept.
As always, take a database backup before uninstalling in production.
Changelog
19.0.1.0.6
Current release for Odoo 19.0. This build includes:
- Scheduled dashboard subscriptions: emailed PDF + inline HTML snapshots, daily/weekly/monthly, idempotent per period. Drag-and-drop, no-code Odoo dashboards with 15+ chart types, KPI targets, period comparison, drill-down and PDF export.
Feature additions and fixes ship as new builds on the Odoo Apps store; this page and the module's version reflect the current published release. Always keep the build matched to your Odoo series (see Upgrading & version compatibility).
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