| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Employees (hr)
• Attendances (hr_attendance) • Discuss (mail) • Time Off (hr_holidays) • Calendar (calendar) |
| Community Apps Dependencies | Show |
| Lines of code | 7368 |
| Technical Name |
eh_hr_dashboard |
| License | LGPL-3 |
| Website | https://www.erpheritage.com.au/ |
| Versions | 16.0 17.0 18.0 19.0 |
EH HR Dashboard
Your HR command center, one click deep.
Why this module
EH HR Dashboard
Server-side aggregation
The whole board loads from a single get_dashboard_data call, not eleven separate searchCount round-trips. Today's attendance is one grouped read by status, the rest are guarded counts, and the page paints once instead of flickering tile by tile.
Counts you are allowed to see
Every count runs through the standard ORM under the calling user's record rules and company scope. The number on a tile is exactly what that user would see if they opened the list, never a privileged total leaked onto a dashboard.
Optional modules degrade, never break
Overtime, loans, and approval-request tiles count models that live in modules outside this one's dependencies. If a module is not installed the tile shows a dash and stays unclickable, so one absent add-on never takes the whole board down.
Day in the life
An HR officer opens the platform on a Monday.
The dashboard loads in one call. The Today row reads four present, one on leave, two absent, and flags one attendance anomaly to chase. Under Pending your action, three leave requests and two overtime claims are waiting; the loans tile shows a dash because that module is not installed on this database, so it sits quiet rather than erroring. The officer clicks the leave tile and lands straight in the submitted-leave list, already filtered, approves, and clicks Refresh to watch the count drop. The Workforce row confirms headcount, two new hires this month, and how many leaves were approved across the month. No report to run, no filter to rebuild, every number one click from its records.
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.
Each tile counts through a safe helper that returns None if the model is absent or unreadable. A missing optional module (overtime, loans, approval requests) renders as a dash and a non-clickable cell, so it never raises and never opens an empty action.
Counts use the standard ORM under the calling user's record rules and active company. The dashboard surfaces only what that user is entitled to see, with no privileged or cross-company totals slipping onto a tile.
Today's present, on leave, and absent figures come from one grouped read over the attendance-day model. Because read_group's signature varies across Odoo series, the code falls back to a per-status count if the grouped read is unavailable, so the same numbers hold on 16 through 19.
The aggregation always returns every expected KPI key as an integer or None, never a raised error. If the backend call itself fails, the board falls back to an empty value map and renders dashes rather than a crash screen, a behavior the test suite asserts.
Today and month-start are computed in the user's context timezone and passed as ISO dates the ORM expects, so the present-today and new-this-month windows line up with the user's actual calendar day, not the server's.
The dashboard owns no business models and writes nothing. It is a pure read-and-launch surface, so it cannot corrupt platform data; the source of truth stays in the attendance, leave, and employee records it reads.
What is inside
Built to do the job, end to end.
- Today: the attendance pulse. Four tiles for the current day, sourced from the attendance-day model: Present, On leave, Absent, and Anomalies (days flagged with a detected issue such as a missing check-out).
- Pending your action: the approvals worklist. Four tiles counting work that needs a decision: leave requests submitted, overtime submitted, loans submitted, and approval-engine requests still pending. The last three count optional models and degrade to a dash when their module is absent.
- Workforce: the headline numbers. Headcount across all employees, new hires created this month, and leave requests approved with a start date in the current month.
- Click-through to pre-filtered lists. Each tile knows the exact model and domain it counts, so a click opens that same list and form view already filtered. The dashboard is a launch pad into the records, not a dead-end chart.
- Shared OWL component kit. Built from the platform's reusable HrCard and HrStat components in eh_hr_core, with tone styling (good, neutral, warn) and a loading state, so it matches the rest of the EH HR Platform out of the box.
- Models this module adds. None of its own. It registers one client action, one menu under the HR Platform root (visible to the HR Officer group), and one abstract aggregation model that only reads existing platform data.
Honest about the edges
What this does not do, so nothing surprises you.
- This is a single fixed overview, not a report builder. The eleven KPIs, their groups, and their drill-through domains are defined in code and are not configurable from the interface.
- The Today, Pending, and Workforce tiles are not live-streaming. They reflect the moment the board loaded; use the Refresh button to pull current numbers again.
- Overtime, loans, and approval-request tiles count models from modules outside this one's stated dependencies. Without those modules installed they show a dash rather than a zero, by design.
- The dashboard reads and launches only. It posts nothing, changes no records, and adds no fields to existing models; all business logic stays in the platform modules it sits on top of.
- It depends on eh_hr_core, eh_hr_attendance_pro, eh_hr_leave_pro and standard hr. The attendance and leave tiles assume those platform models are present and populated.
Odoo HR dashboard, Odoo 19 Community HR overview, OWL client action dashboard, HR attendance dashboard Odoo, leave approvals queue Odoo, headcount KPI tile, pending approvals worklist, attendance anomalies today, server-side dashboard aggregation, record-rule scoped counts, click-through pre-filtered list, eh_hr_platform module, Odoo 16 17 18 19 HR, self-hosted HR dashboard, new hires this month KPI, overtime loan approval dashboard
Need this fitted to the way you work?
ERP Heritage delivers end to end Odoo work: Odoo Implementation, Customization and Development, Integration, Migration, Consultation, Support and Training. We help teams put this module into production, shape it to their process, and keep it running.
We work with businesses across Australia (Melbourne, Sydney, Brisbane, Perth, Adelaide, Canberra) and the Middle East (Dubai, Abu Dhabi, Riyadh, Jeddah, Doha, Kuwait City, Muscat). Start a conversation at erpheritage.com.au or email info@erpheritage.com.au.
Languages
Available in 19 languages
The interface ships translated out of the box. Switch language in Odoo and the fields, menus, and messages follow.
Please log in to comment on this module