Skip to Content
Odoo Menu
  • Sign in
  • Try it free
  • Apps
    Finance
    • Accounting
    • Invoicing
    • Expenses
    • Spreadsheet (BI)
    • Documents
    • Sign
    Sales
    • CRM
    • Sales
    • POS Shop
    • POS Restaurant
    • Subscriptions
    • Rental
    Websites
    • Website Builder
    • eCommerce
    • Blog
    • Forum
    • Live Chat
    • eLearning
    Supply Chain
    • Inventory
    • Manufacturing
    • PLM
    • Purchase
    • Maintenance
    • Quality
    Human Resources
    • Employees
    • Recruitment
    • Time Off
    • Appraisals
    • Referrals
    • Fleet
    Marketing
    • Social Marketing
    • Email Marketing
    • SMS Marketing
    • Events
    • Marketing Automation
    • Surveys
    Services
    • Project
    • Timesheets
    • Field Service
    • Helpdesk
    • Planning
    • Appointments
    Productivity
    • Discuss
    • Approvals
    • IoT
    • VoIP
    • Knowledge
    • WhatsApp
    Third party apps Odoo Studio Odoo Cloud Platform
  • Industries
    Retail
    • Book Store
    • Clothing Store
    • Furniture Store
    • Grocery Store
    • Hardware Store
    • Toy Store
    Food & Hospitality
    • Bar and Pub
    • Restaurant
    • Fast Food
    • Guest House
    • Beverage Distributor
    • Hotel
    Real Estate
    • Real Estate Agency
    • Architecture Firm
    • Construction
    • Property Management
    • Gardening
    • Property Owner Association
    Consulting
    • Accounting Firm
    • Odoo Partner
    • Marketing Agency
    • Law firm
    • Talent Acquisition
    • Audit & Certification
    Manufacturing
    • Textile
    • Metal
    • Furnitures
    • Food
    • Brewery
    • Corporate Gifts
    Health & Fitness
    • Sports Club
    • Eyewear Store
    • Fitness Center
    • Wellness Practitioners
    • Pharmacy
    • Hair Salon
    Trades
    • Handyman
    • IT Hardware & Support
    • Solar Energy Systems
    • Shoe Maker
    • Cleaning Services
    • HVAC Services
    Others
    • Nonprofit Organization
    • Environmental Agency
    • Billboard Rental
    • Photography
    • Bike Leasing
    • Software Reseller
    Browse all Industries
  • Community
    Learn
    • Tutorials
    • Documentation
    • Certifications
    • Training
    • Blog
    • Podcast
    Empower Education
    • Education Program
    • Scale Up! Business Game
    • Visit Odoo
    Get the Software
    • Download
    • Compare Editions
    • Releases
    Collaborate
    • Github
    • Forum
    • Events
    • Translations
    • Become a Partner
    • Services for Partners
    • Register your Accounting Firm
    Get Services
    • Find a Partner
    • Find an Accountant
      • Get a Tailored Demo
    • Implementation Services
    • Customer References
    • Support
    • Upgrades
    Github Youtube Twitter Linkedin Instagram Facebook Spotify
    +32 2 290 34 90
    • Get a Tailored Demo
  • Pricing
  • Help
  1. APPS
  2. Leave
  3. EH HR Leave Pro v 17.0
  4. Sales Conditions FAQ

EH HR Leave Pro

by ERP Heritage https://erpheritage.com.au
Odoo
v 17.0 Third Party 26
Download for v 17.0 Deploy on Odoo.sh
Apps purchases are linked to your Odoo account, please sign in or sign up first.
Versions 16.0 17.0 18.0 19.0
You bought this module and need support? Click here!
Availability
Odoo Online
Odoo.sh
On Premise
Odoo Apps Dependencies • Employees (hr)
• Time Off (hr_holidays)
• Discuss (mail)
• Attendances (hr_attendance)
• Calendar (calendar)
Community Apps Dependencies Show
• EH HR Approval Engine
• EH HR Attendance Pro
• EH HR Compatibility
• EH HR Notify Engine
• EH HR Platform Core
• EH HR Policy Engine
• EH HR Workflow Engine
Lines of code 7107
Technical Name eh_hr_leave_pro
LicenseLGPL-3
Websitehttps://erpheritage.com.au
Versions 16.0 17.0 18.0 19.0
ERP Heritage · HR Platform
Leave and absence management for Odoo 17

HR Leave Pro

Event-sourced leave balances, data-driven approval chains, and idempotent accrual that survives a crash and a re-run.

Free · LGPL-3Odoo 17 CommunityAppend-only ledgerv1.0.0
Event-sourced balance ledger
Working-day duration
Public holiday aware
Half-day leave
Data-driven approval chains

Why this module

HR Leave Pro

Truth

The ledger is the balance

Every grant, consume, carryover, expiry, and reversal is an immutable ledger row. The current balance is the SQL sum of those rows, so balances can be rebuilt and replayed for audit. Non-admin writes are refused; corrections happen as reversal rows, never edits.

Safe re-runs

Crons you can run twice

Accrual, carryover, and expiry each write with a deterministic correlation_id protected by a UNIQUE constraint. A cron that crashes mid-run and re-fires does not double-grant. The mobile submit endpoint dedupes the same way via an Idempotency-Key.

Honest days

Only working days count

Duration counts the employee's working weekdays from their resource calendar and skips company public holidays, so a Monday-to-Friday leave over a holiday is not over-charged. Half days are supported on a single day, AM or PM.

Day in the life

From request to balance, the whole path

An employee submits annual leave from their portal or the mobile API. Eligibility runs first: it blocks on insufficient balance, an overlapping request, or a missing certificate, and warns on short notice. On submit the request enters a data-driven workflow and an approval chain routes it to the line manager, then to an HR officer for longer leave, with escalation hours set per step. The person who submitted it cannot approve it. On approval a consume row hits the balance ledger, the request expands into per-day rows that flip attendance to leave, and a native Time Off row is projected so the core calendar and reporting see it. Cancel after approval and a reversal row restores the balance and retracts the projection. Meanwhile the daily accrual cron grants the monthly entitlement, prorated for anyone hired mid-month, capped at the policy ceiling, and the year-boundary sweep forfeits anything above the carryover limit.

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.

Crash mid-accrual

Accrual, grant, carryover, and expiry rows carry deterministic correlation_ids backed by a UNIQUE constraint, so a cron that dies after partial work and re-runs dedupes instead of double-granting.

Double submit

The mobile submit endpoint requires an Idempotency-Key (header or body); a repeat call returns the existing request marked deduped rather than creating a second one.

Leave over a holiday

Duration counts only working weekdays from the employee's resource calendar and excludes company public holidays, so a span covering a weekend or public holiday does not over-consume balance. A weekend-only request is zero days.

Self-approval

The real submitter is captured before the engine elevates to superuser, so a delegated submitter, even an officer, is blocked from approving a request that concerns them.

Tamper attempt

The balance ledger refuses non-admin writes and refuses deletes outside the retention purge; the only way to undo an entry is a compensating reversal row.

Multi-company group

Leave types, public holidays, and the company-aware mixin scope records per company, and record rules grant self, team, and company-wide visibility to employee, manager, and officer respectively.

Manual Time Off edits

Projection only manages rows it created (eh_managed); rows entered directly in core Time Off are never touched, and edits to managed rows write a tamper-evident audit event.

Mid-month hire

The first accrual is prorated to the worked fraction of the hire month, so a 16th-of-a-30-day-month hire earns half the period's grant rather than a full one.

Cap reached

Accrual checks remaining headroom against the policy cap and grants only up to it, and the year-boundary carryover sweep forfeits the excess above the carryover limit with a ledger row.

What is inside

Built to do the job, end to end.

  • Append-only balance ledger. eh.hr.leave.balance.ledger records grant, consume, carryover, expiry, adjustment, and reversal events. Writes are blocked for non-admins, deletes are blocked outside the retention purge, and a UNIQUE correlation_id dedupes re-runs. Balances are summed in SQL with a composite index on employee, type, and date.
  • Data-driven workflow and approval. The state machine (draft, submitted, approved, refused, cancelled) lives in XML, not Python. Approval chains are serial steps with dynamic line-manager resolution, officer groups, and per-step escalation hours, and any leave type can override its chain code.
  • Accrual, carryover, and expiry services. Three daily crons read policy documents through the policy engine: monthly or weekly or yearly accrual with proration and a cap, a year-boundary carryover sweep, and an expiry sweep based on months from grant. Each is period-guarded so off-day runs are no-ops.
  • Working-day duration engine. Duration honours the employee's resource calendar working weekdays and the company public holiday calendar, supports AM or PM half days on a single day, and exposes hourly granularity for leave types that allow it.
  • Native Time Off projection. Approved requests materialise an idempotent hr.leave row keyed to the request so the core calendar and reporting see native data, retracted cleanly on cancellation, with manually created Time Off rows left untouched.
  • Public holiday calendar and mobile API. A single public holiday model, company-scoped with AU state and territory regions, feeds both leave and award interpretation. A JSON API exposes leave types, the balance matrix, eligibility pre-flight, and idempotent submit for mobile clients.

Honest about the edges

What this does not do, so nothing surprises you.

  • Built on the EH HR Platform: it requires eh_hr_core, the workflow, approval, policy, and notification engines, and eh_hr_attendance_pro. It is not a standalone time-off app.
  • Concurrency safety comes from deterministic correlation_ids and database UNIQUE constraints plus the cron runner's own transaction, not from advisory locks or explicit savepoints in this module.
  • Seeded standard policies are sensible defaults (1.75 days per month, cap 30, carryover 5, expiry 12 months from grant); they are data records you are expected to edit per your own rules.
  • Accrual periods are month, week, or year. Other cadences would need a policy and service extension.
  • Public holiday regions are Australian states and territories; other countries use the national region or company-scoped entries.
  • Targets Odoo 17 Community. The codebase carries cross-version shims, but this listing covers the Odoo 17 build.
Search

Odoo 17 leave management, Odoo employee time off, leave accrual engine Odoo, leave approval workflow, annual leave sick leave tracking, half day leave Odoo, leave balance ledger, public holiday calendar Odoo, carryover and expiry rules, multi-company HR leave, leave allocation Odoo 17, mobile leave API, self service leave request, working day leave calculation

Work with ERP Heritage

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.

Build and tailor
Odoo Implementation, Customization and Development, scoped to your workflow.
Connect and move
Odoo Integration and Migration across systems and Odoo versions.
Run and support
Odoo Support and Training so your team stays productive after go live.
Plan and advise
Odoo Consultation and ERP Consulting, from discovery to roadmap.

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.

ArabicChinese (Simplified)Chinese (Traditional)DutchFrenchGermanHindiIndonesianItalianJapaneseKoreanPolishPortuguese (Brazil)RussianSpanishSwedishThaiTurkishVietnamese
ERP Heritage

Production-grade Odoo HR, built to an engineering bar and documented honestly. Support: info@erpheritage.com.au
Developed by Odoo Customisation Services • LinkedIn

v1.0.0 · LGPL-3 · Odoo 17 Community

Please log in to comment on this module

  • The author can leave a single reply to each comment.
  • This section is meant to ask simple questions or leave a rating. Every report of a problem experienced while using the module should be addressed to the author directly (refer to the following point).
  • If you want to start a discussion with the author, please use the developer contact information. They can usually be found in the description.
Community
  • Tutorials
  • Documentation
  • Forum
Open Source
  • Download
  • Github
  • Runbot
  • Translations
Services
  • Odoo.sh Hosting
  • Support
  • Upgrade
  • Custom Developments
  • Education
  • Find an Accountant
  • Find a Partner
  • Become a Partner
About us
  • Our company
  • Brand Assets
  • Contact us
  • Jobs
  • Events
  • Podcast
  • Blog
  • Customers
  • Legal • Privacy
  • Security

Odoo is a suite of open source business apps that cover all your company needs: CRM, eCommerce, accounting, inventory, point of sale, project management, etc.

Odoo's unique value proposition is to be at the same time very easy to use and fully integrated.

Website made with