| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Attendances (hr_attendance)
• Employees (hr) • Discuss (mail) |
| Community Apps Dependencies | Show |
| Lines of code | 2576 |
| Technical Name |
wt_hrms_attendance |
| License | OPL-1 |
| Website | https://way4tech.com |
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Attendances (hr_attendance)
• Employees (hr) • Discuss (mail) |
| Community Apps Dependencies | Show |
| Lines of code | 2576 |
| Technical Name |
wt_hrms_attendance |
| License | OPL-1 |
| Website | https://way4tech.com |
WT HRMS Attendance — Late, Early, Overtime & Monthly Summary
Adds shift-aware late, early-departure and overtime calculations to hr.attendance, plus a per-employee monthly summary table you can pivot, group, and pin to dashboards.
attendance Odoo · late arrival · early departure · overtime hours · net worked hours · monthly attendance summary · shift schedule integration · payroll attendance · Odoo 19 · Odoo 18 · community edition · enterprise alternative · open hrms · HR software · HR automation · way4tech
Live Preview
A real screenshot from a working WT HRMS install on Odoo 19.
The Problem This Solves
Vanilla hr.attendance stores a check-in and a check-out and stops there. Payroll, ops and HR all need much more.
No "late" or "early" anywhere
Out of the box, Odoo doesn't know what "on time" means — it has no concept of shift start/end vs. actual check-in.
Overtime is invisible
Hours worked above the shift's expected duration are never captured, so payroll has nothing to calculate against and ops can't measure burn-out.
Monthly reports are manual
Producing a "present days / late count / total OT hours" sheet for payroll means exporting CSV and writing pivot formulas every cycle.
The Solution — Shift-Aware, Stored, Pivot-Ready
Six new stored, computed fields on every attendance, plus a dedicated monthly-summary model that any reporting tool can read.
- ✓
is_late&late_minuteson everyhr.attendance - ✓
is_early_departure&early_minutes - ✓
overtime_hours— actual worked hours minus expected shift hours (after break) - ✓
worked_hours_net— gross worked hours minus the configured break time on the shift type - ✓ 5-minute grace window baked in — punching in 4 minutes after start is not late
- ✓ Reads
wt.hrms.shift.scheduleautomatically when the Shifts module is installed; safely no-ops when not - ✓ Monthly Summary model — one row per employee per month, with present days, late count, early-departure count, total worked, total OT and total late minutes
- ✓ One-call generator —
generate_summary(year, month)can be called from a server action or scheduled cron - ✓ Idempotent — running the generator twice for the same month updates rather than duplicates (unique constraint on employee+year+month)
- ✓ Search view with Department and Month group-by built in
- ✓ float_time widget for total worked hours and total OT — renders as HH:MM
- ✓ Multi-company aware — summaries scoped by company
- ✓ Sub-menu under WT HRMS → Attendance with native Check In/Out and Monthly Summary
Step-by-Step User Guide
Install the module
Install WT HRMS Attendance from Apps. Odoo's hr_attendance and wt_hrms_core are pulled automatically.
(Recommended) Install WT HRMS Shifts
For shift-aware late/early/overtime detection, install WT HRMS Shifts as well. It provides the wt.hrms.shift.schedule records that this module reads. Without shifts, attendances still work — the new fields just stay blank.
Capture attendance as usual
Open WT HRMS → Attendance → Check In/Out. Employees punch in/out via the standard kiosk, mobile or biometric integration. New stored fields populate automatically the moment check_out is set.
Generate a monthly summary
From Settings → Technical → Server Actions (or a scheduled cron) call self.env['wt.hrms.attendance.summary'].generate_summary(year, month). It scans all hr.attendance records in that month and writes one summary row per employee with present days, late count, early-departure count, total worked hours, total OT and total late minutes.
Review, group, pivot
Go to WT HRMS → Attendance → Monthly Summary. Group by department, month or employee. Total worked & OT render as HH:MM with the float_time widget.
Feed payroll
When wt_hrms_payroll is installed, payroll rules can read total worked hours, OT hours and late minutes directly off the summary — no CSV import, no manual reconciliation.
Marquee Features
Late Detection
Computes is_late and late_minutes using the day's shift start time with a built-in 5-minute grace.
Early Departure
Compares actual check-out vs. shift end — gives is_early_departure and early_minutes for instant ops triage.
Overtime Hours
Worked hours above expected shift duration (after break) are stamped on each attendance for payroll consumption.
Net Worked Hours
worked_hours_net subtracts the shift's break hours so payroll runs on real productive time, not gross presence.
Monthly Summary Model
Single row per employee per month with seven stored numbers — perfect source for KPIs, payroll and audits.
Idempotent Generator
Re-running the summary for an already-processed month updates rows in place — safe for cron retries.
Group-By Search
Built-in Department and Month group-by filters in the Monthly Summary search view.
Float-Time Display
Total worked & OT use the float_time widget so 8.25 reads as 08:15 in lists and dashboards.
Safe Without Shifts
If wt.hrms.shift.schedule isn't present, the module no-ops cleanly — never raises, never blocks attendance.
Compatibility & Requirements
| Odoo Edition | Community & Enterprise |
| Odoo Version | 19.0 |
| Module Dependencies | hr_attendance (Odoo core) · wt_hrms_core |
| Recommended Companion | wt_hrms_shifts — provides shift schedules used to detect late/early/OT |
| Python Packages | None — uses only Python stdlib + Odoo core |
| External Services | None — runs entirely inside your Odoo instance |
| Security Groups Used | base.group_user (read), hr.group_hr_manager (full write) |
About Waqas Riasat & Way4Tech
We build Odoo modules that fix real business pain — not nice-to-have features. The WT HRMS suite is a Community-only HR + Payroll replacement that we use ourselves and ship with hand-tested upgrade paths.
way4tech.com · info@way4tech.com · WhatsApp +92 315 411 4748
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