| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Invoicing (account)
• Sales (sale_management) • Purchase (purchase) • Discuss (mail) |
| Community Apps Dependencies | Show |
| Lines of code | 11106 |
| Technical Name |
eh_log_dashboard |
| License | LGPL-3 |
| Website | https://www.erpheritage.com.au/ |
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Invoicing (account)
• Sales (sale_management) • Purchase (purchase) • Discuss (mail) |
| Community Apps Dependencies | Show |
| Lines of code | 11106 |
| Technical Name |
eh_log_dashboard |
| License | LGPL-3 |
| Website | https://www.erpheritage.com.au/ |
Logistics Dashboard
One landing page that reads live KPIs from every installed logistics module and drills straight to the source records.
Why this module
Logistics Dashboard
The whole suite on one screen
Open quotations, weighted pipeline, freight in transit, open and rejected customs declarations, and transport trips planned today all read live from the engines the suite already ships, so an operator opens one page instead of hopping between five menus.
Tiles that match what you installed
Ten vertical checks (last mile, cold chain, dangerous goods, containers, 3PL warehouse, carrier portal, track and trace, EDI, ship agency, project cargo) light up only when the module is present. Absent modules contribute zero and their tiles stay hidden, so you never see a dead number.
Every number is a way in
Eleven tiles are buttons that open the underlying records with the right domain already applied: freight in transit, open or rejected customs, deliveries due today, warehouse receipts and picks, carrier bookings, the EDI dead-letter queue, active port calls, executing project cargo, and permits expiring inside seven days.
Day in the life
A typical morning at the desk
The operator opens the dashboard and the tiles render from live counts. Open quotations and weighted pipeline frame the day. Freight in transit and trips planned for today set the workload. The rejected-customs tile shows two, so they click it and land straight on those two declarations, filtered, ready to fix. The EDI dead-letter tile is at one; one click opens the failed message. No report to run, no menu to hunt through. The dashboard creates a throwaway record on entry, computes, and is garbage-collected on exit, so nothing accumulates.
Edge cases
The cases most modules quietly ignore.
In the shipped code today, each one a place where a cheaper module silently does the wrong thing.
Vertical KPIs resolve their model with env.get and return zero when it is missing, while the form hides the tile with an invisible predicate. Installing only the five core engines yields a clean dashboard with no broken layout and no error.
The container tile derives occupancy from gate movements: it counts gate-in movements, counts gate-out movements, and reports the difference floored at zero, so a partial or out-of-order movement history never produces a negative count.
Weighted pipeline sums each open quotation in its own currency, converting to the company currency at the order date, and applies a per-quote probability when the quotation module exposes that field or a 50 percent default when it does not, so one honest figure aggregates a multi-currency pipeline.
On a fresh install every count is a non-negative integer and the entry action still returns a valid form action, verified by the bundled zero-baseline test, so the dashboard is safe to open before any operational data exists.
Trips, deliveries, and tracking-event tiles bound their counts to the local day using context-aware date boundaries rather than naive UTC, so today means today for the operator regardless of server timezone.
A drill-down whose target model is not installed returns false rather than raising, so a stale or mis-targeted tile click degrades quietly instead of throwing a traceback at the user.
What is inside
Built to do the job, end to end.
- 18 live KPI computes. Open quotations, weighted pipeline value, open and in-transit freight jobs, open and rejected customs declarations, transport trips today, deliveries today, COD outstanding, cold-chain deviations, active dangerous-goods declarations, containers at yard, open warehouse receipts and picks, active carrier bookings, tracking events today, EDI dead-letter, active port calls, executing project cargo, and permits expiring. Each is a single search_count or sum read on form load.
- Soft adaptation via env.get. Ten module-presence flags test for the vertical model with env.get. When a model is absent the related count returns zero and the form hides its section through an invisible predicate. Adding a future vertical is a flag plus a tile; the pattern is uniform.
- Eleven drill-down actions. Stat-button tiles call object methods that return ir.actions.act_window with the matching domain already set (in_transit, rejected, dead_letter, expiring within seven days, and more), opening the records in list and form so the click lands on exactly the rows the number represents.
- Cross-suite analytics menu. A top-level Analytics menu exposes four pivot and graph actions over freight jobs, logistics quotations, customs declarations, and transport trips, each opening on pivot, graph, kanban, list, and form for ad hoc slicing without leaving the suite.
- Transient by design. The dashboard is a TransientModel rendered in a read-only form. It is created on entry and garbage-collected on exit, so there is no stored state, no snapshot table, and no scheduled refresh job to maintain.
- Web tour onboarding. A registered web tour walks a new operator from the app launcher into the dashboard and on to the quotation menu, so the shape of the suite is clear within the first session.
- Role-scoped access. Access rights ship for the logistics user, manager, and auditor groups, and tile counts inherit the company scope and record rules already enforced on each underlying engine and vertical model.
Honest about the edges
What this does not do, so nothing surprises you.
- This module displays and links to data. It does not create quotations, freight jobs, customs declarations, or trips itself; those live in the engine and vertical modules it depends on.
- KPI values refresh on each form load using live search_count queries. There is no auto-refresh timer, no push update, and no cached snapshot, so reopening the dashboard is how you get fresh numbers.
- Customs adapters and country packs (for example a GCC customs pack) belong to the customs and base modules. This dashboard only surfaces customs KPIs and drill-downs; it implements no regulator integration of its own.
- The five core engines (base, quotation, freight, customs, transport) are hard dependencies and must be installed. The ten specialised verticals are optional and their tiles simply do not appear when absent.
- Tile counts are unsigned operational figures, not accounting balances. The weighted pipeline is a sales estimate, not posted revenue.
- Multi-company scoping is inherited from the standard record rules on the underlying models and from the active company context; the dashboard adds no company selector of its own.
logistics dashboard odoo, freight forwarder dashboard, operational kpi tiles, single pane of glass logistics, customs declaration tracker, transport trip monitor, cod outstanding tracker, edi dead letter queue, weighted sales pipeline, 3pl operations dashboard, odoo 19 community logistics, freight forwarding software, container yard tracking, drill down dashboard odoo, multi company logistics dashboard
Please log in to comment on this module