HR Reminders and Follow-ups
Date-based HR reminders that fire a chatter note on the day they fall due, on a daily cron, audited and company-scoped.
Why this module
HR Reminders and Follow-ups
Does one job well
A date, an optional employee, a category, and a daily cron that posts a chatter note when the reminder is due. No hidden moving parts and nothing that pretends to be a full workflow engine.
Every change is recorded
Because the model rides the EH HR Platform audited mixin, every create, write and unlink writes a before-and-after row to an append-only, hash-chained audit log in eh_hr_core. You can reconstruct exactly when a reminder was raised, edited or closed.
Records stay in their company
Each reminder is owned by one company and defaults to the active one. Cross-company writes are refused, even under sudo, unless an audited override context is set, so a Melbourne reminder never bleeds into a Sydney company.
Day in the life
A renewal that does not slip
An HR officer logs a reminder for a fixed-term contract: title, the employee, category Contract, and the renewal date. Nothing happens until that date. On the morning it falls due, the daily cron searches every reminder that is not done and whose date has arrived, and posts Reminder due on each one to its chatter, where followers see it. The officer opens the list, spots the warning-highlighted row, handles the renewal, and clicks Done, which mutes the row and stamps an audited write. The whole lifecycle, from raised to resolved, is recoverable from the hash-chained audit log.
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.
The cron only ever selects reminders where done is False and the date has passed, so a still-open reminder posts a fresh chatter note each daily run until someone marks it done. Closing it stops the noise immediately.
company_id is required and defaults to the active company. A write that tries to move a reminder into a company the user does not belong to is rejected with an AccessError, and any permitted cross-company elevation is itself written to the audit log.
Create, write and unlink each emit an event to the append-only, hash-chained eh.hr.audit.log. Write events store both the before and after values of the changed fields, so an edited date or a flipped done flag is fully reconstructable.
The is_due computed flag uses the context-aware today, so a reminder is judged due against the user's civil date rather than raw UTC, and it clears the moment the record is marked done.
The employee link is ondelete cascade, so removing an employee removes their attached reminders cleanly rather than leaving orphaned rows, and the unlink is captured in the audit log.
What is inside
Built to do the job, end to end.
- The eh.hr.reminder model. One model with a title, an optional employee, a required reminder date, a category selection, a free-text note, a done flag and a computed is_due flag. Ordered by date, indexed on date and done, with field-level tracking on the meaningful fields so the chatter shows the history.
- The daily fire cron. An ir.cron running once per day in code mode calls _cron_fire, which finds every not-done reminder on or past its date and posts a Reminder due note to each record's chatter, returning the count it touched. Defined Odoo 18 style with no deprecated numbercall.
- Platform mixins. The model inherits eh.hr.audited.mixin and eh.hr.company.aware.mixin from eh_hr_core, plus mail.thread for chatter. That is where the audit logging and strict company scoping come from, rather than being re-implemented per module.
- Views, security and tests. A list that highlights due rows and mutes done ones, a form with a Mark done button and chatter, an Officer-gated menu, and three access rules (Admin and Officer read-write, Employee read-only). A test suite covers the due logic, the done transition and the cron firing.
Honest about the edges
What this does not do, so nothing surprises you.
- The cron posts an in-app chatter note only. It does not send email or SMS and does not schedule an Odoo activity.
- Reminders are single, fixed dates. There is no recurrence, repeat interval or per-reminder lead-time offset built in.
- There is no approval, escalation or assignment workflow. A reminder is raised, fired and marked done, nothing more.
- Notifications reach a reminder's chatter followers. There is no separate per-officer digest or routing rule.
- Requires the EH HR Platform: this module depends on eh_hr_core and eh_hr_compat for its audit and company-scope behaviour and will not install standalone.
- Built and tested for Odoo 18 Community. It is not packaged here for other Odoo versions.
Odoo 18 HR reminder, HR reminder software Odoo, contract renewal reminder Odoo, probation review reminder, employee document expiry reminder, HR follow-up tracker, Odoo HR cron reminder, multi-company HR reminders, audited HR records Odoo, EH HR Platform
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