hr_presence_status
The colored dot next to every employee, green for present, hollow for archived, a plane when on leave, is hr_presence_status. One tiny widget, layered by three modules, with a pill-shaped form variant that is new in Odoo 19.
| Technical name | hr_presence_status |
|---|---|
| Field types | selection (the hr_icon_display field) |
| Views | form (pill variant), list, kanban |
| Form variant | form.hr_presence_status (rounded pill, 19.0) |
| Also registered as | hr_presence_status_private, form.hr_presence_status_private |
| Module | hr, patched by hr_holidays, hr_homeworking and hr_holidays_homeworking |
| Used in core | 6 occurrences across 2 modules, including hr and hr_org_chart, on the employee form, list and kanban |
| Versions | Odoo 20.0, Odoo 19.0, Odoo 18.0, Odoo 17.0 |
| No-code setup | No: presence display is wired into the HR views |
| Alternatives | many2one_avatar_employee, label_selection, badge |
What the Presence Status widget does
What this means for your team
Working examples
The patch stack, and the bug we found in it
Version compatibility
| Version | Status | Notes |
|---|---|---|
| Odoo 20.0 | Partial / changed | Not released. Pill variants deleted, homeworking folded into the base widget, new oi icon set. See below. |
| Odoo 19.0 | Verified | Verified against the shipped source. Adds the form pill variants. |
| Odoo 18.0 | Partial / changed | Base and private widgets only, no pill variants; same dot rendering. |
| Odoo 17.0 | Partial / changed | Present with different selection values (presence_absent_active, presence_to_define) and hollow-icon rule. |
| Odoo 16.0 | Not available | No JavaScript widget at this path; presence display predates the current component. |
Upgrade note. The pill variants (form.hr_presence_status and form.hr_presence_status_private) exist only in 19.0. Coming from 18, form views gain the pill automatically; custom CSS targeting the old small dot in forms may need review. The selection values also changed across versions: 17 used presence_absent_active and presence_to_define, 19 uses presence_out_of_working_hour and presence_archive, so Python extensions of the compute need remapping.
What is changing in Odoo 20
Common problems and fixes
| Symptom | Cause and fix |
|---|---|
| No dot appears on your custom view | The widget renders from a selection field like hr_icon_display; a missing or unloaded field renders nothing. Point the widget at hr_icon_display (or a related field to it) and make sure the record is saved; core hides it on unsaved records. |
| Everyone shows as away even when logged in | Presence is computed from technical signals; on self-hosted setups the IM presence or hr_presence configuration is missing. Check the hr_presence settings (login, IP or email based detection) and that the compute's cron runs. |
| The form shows a pill but your list shows a dot | Intended: Odoo 19 registers a separate form. variant that renders the pill; other views use the base component. Nothing to fix. To force the dot on forms you would have to re-register the base component under the form. name. |
| Holiday colors show on the kanban dot but not on the form pill | The hr_holidays_homeworking bridge passes its pill patch factory uncalled, so the pill color override never applies in 19.0. Apply the one-character fix (call the factory) in a custom module, or accept the cosmetic gap until Odoo patches it. |
| After upgrading, custom presence statuses stopped rendering | The selection values the widget switches on changed between 17 and 19 (presence_out_of_working_hour, presence_archive are current). Remap your compute extension to the current selection values and re-test each color case. |
Presence Status widget vs the alternatives
| Widget | Best for | Key difference |
|---|---|---|
hr_presence_status | Showing whether an employee is present, remote, on leave or archived | Presence semantics with module-layered icons; a pill on forms, a dot everywhere else |
| many2one_avatar_employee | Showing which employee, with their photo | Renders the person; no presence state at all |
| label_selection | Generic colored status labels on any selection field | Maps selection values to Bootstrap labels with no HR dependency |
| badge | Read-only state chips in lists | Decoration-driven colors, works on any field type it supports |
Frequently asked questions
What does the green dot next to an employee mean in Odoo?+
Why does one employee show a plane icon?+
Can I use hr_presence_status on my own model?+
Is the presence dot the same as attendance?+
Why is the status pill on the employee form new?+
How do I change when an employee counts as present?+
Rolling out Odoo HR for a hybrid team?
Presence dots, remote work locations, leave visibility and privacy-correct status labels all depend on wiring hr, hr_homeworking and hr_holidays together properly, and on knowing where the sharp edges are, like the pill patch bug documented above. We implement Odoo HR end to end and make the org's real working model visible in it.
Plan our HR implementation