96 lines
3.8 KiB
Markdown
96 lines
3.8 KiB
Markdown
# hr_holidays_timeoff_analysis
|
|
|
|
Breaks down validated time-off requests into individual day records and provides a pivot table for analyzing leave consumption by employee, leave type, and period.
|
|
|
|
## Features
|
|
|
|
### Time-off day model (`hr.leave.timeoff.day`)
|
|
|
|
One record per actual day of absence, with the following fields:
|
|
|
|
* **Date**: the specific day.
|
|
* **Employee**: the employee on leave.
|
|
* **Leave request**: link to the original `hr.leave` record.
|
|
* **Leave type**: related field from the leave request (e.g. Paid leave, Sick leave).
|
|
* **Duration by day**: the fraction of the day taken off (1.0 for a full day, 0.5 for a half day, or a proportional value for hourly leaves based on `number_of_days_display`).
|
|
|
|
### Calendar resolution
|
|
|
|
The module determines the employee's working calendar using the following priority:
|
|
|
|
1. **Employee calendar planning** (`hr.employee.calendar`): if the `hr_employee_calendar_planning` module is installed, the calendar matching the date range is used. This allows correct handling of employees who switch between full-time and part-time.
|
|
2. **Employee calendar** (`resource_calendar_id`): the calendar set directly on the employee.
|
|
3. **Company calendar**: fallback to the company's default calendar.
|
|
|
|
Only days where the employee is scheduled to work are recorded. Weekends and non-attendance days are skipped.
|
|
|
|
### Public holiday handling
|
|
|
|
Public holidays are excluded from time-off day records. The module converts public holiday dates to the employee's timezone before comparison, ensuring correct results for holidays that span midnight UTC.
|
|
|
|
### Scheduled action (cron)
|
|
|
|
A daily cron job (`cron_manage_timeoff_days`) performs two operations:
|
|
|
|
1. **Create**: Iterates over all validated leaves and creates a `hr.leave.timeoff.day` record for each working day within the leave period (skipping weekends, non-attendance days, and public holidays).
|
|
2. **Delete**: Removes records linked to leaves that are no longer validated (draft, refused) or have been cancelled (`active=False`). Also cleans up orphan records not linked to any leave.
|
|
|
|
### Views
|
|
|
|
* **List view**: Editable list showing date, employee, leave request, leave type, and duration.
|
|
* **Pivot view**: Leave days broken down by month (columns) and employee + leave type (rows) — the primary analysis tool.
|
|
* **Search view**: Date filter defaulting to the current year.
|
|
|
|
The menu entry is located under **Time Off > Reporting > Timeoff Days**, accessible to Time Off managers.
|
|
|
|
### Access rights
|
|
|
|
Read-only access is granted to the Time Off manager group (`hr_holidays.group_hr_holidays_manager`).
|
|
|
|
### Tests
|
|
|
|
The module includes tests covering:
|
|
|
|
* Multi-day leaves spanning two months.
|
|
* Half-day leaves (duration = 0.5).
|
|
* Hourly leaves compared against the employee's calendar.
|
|
* Part-time employee calendars (4-day week).
|
|
* Public holidays falling within a leave period.
|
|
* Unvalidated and deleted leaves (cleanup verification).
|
|
* Cancelled leaves (`active=False`).
|
|
* Employee calendar planning integration (switching calendars mid-period).
|
|
|
|
## Installation
|
|
|
|
This module depends on:
|
|
|
|
* `base` (Odoo core)
|
|
* `hr_holidays` (Odoo core)
|
|
|
|
Optional: install `hr_employee_calendar_planning` to enable per-period calendar resolution.
|
|
|
|
Use the standard Odoo module installation procedure to install `hr_holidays_timeoff_analysis`.
|
|
|
|
## Known issues / Roadmap
|
|
|
|
None yet.
|
|
|
|
## Bug Tracker
|
|
|
|
Bugs are tracked on [our issues website](https://git.elabore.coop/Elabore/elabore-addons/issues). In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed feedback.
|
|
|
|
## Credits
|
|
|
|
### Contributors
|
|
|
|
* [Elabore](mailto:contact@elabore.coop)
|
|
|
|
### Funders
|
|
|
|
The development of this module has been financially supported by:
|
|
* [Elabore](https://elabore.coop)
|
|
|
|
### Maintainer
|
|
|
|
This module is maintained by Elabore.
|