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. Platform
  3. EH HR Approval Engine v 18.0
  4. Sales Conditions FAQ

EH HR Approval Engine

by ERP Heritage
Odoo
v 18.0 Third Party 20
Download for v 18.0 Deploy on Odoo.sh
Apps purchases are linked to your Odoo account, please sign in or sign up first.
Availability
Odoo Online
Odoo.sh
On Premise
Odoo Apps Dependencies • Discuss (mail)
• Employees (hr)
Community Apps Dependencies Show
• EH HR Platform Core
• EH HR Workflow Engine
• EH HR Compatibility
Lines of code 1688
Technical Name eh_hr_engine_approval
LicenseLGPL-3
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 • Discuss (mail)
• Employees (hr)
Community Apps Dependencies Show
• EH HR Platform Core
• EH HR Workflow Engine
• EH HR Compatibility
Lines of code 1688
Technical Name eh_hr_engine_approval
LicenseLGPL-3
Versions 16.0 17.0 18.0 19.0
ERP Heritage · HR Platform
ERP Heritage . HR Platform

EH HR Approval Engine

Reusable multi-step approval chains for any HR record, with self-approval blocked at two layers.

Free · LGPL-3Odoo 18 CommunityLGPL-3v1.0.0
Multi-step approval chains
Serial and parallel strategies
Policy-driven conditional steps
Self-approval blocked twice
Overdue-step escalation

Why this module

EH HR Approval Engine

Reuse

One engine, every record

Any model inherits eh.hr.approvable.mixin and gains submit-for-approval. Chains are rows in eh.hr.approval.chain, not Python re-written per module, so a new approvable document is configuration rather than code.

Integrity

Self-approval cannot slip through

The subject employee, the record owner and the real submitter are barred from deciding, even when they hold an approver group. The block is enforced at the decide call and re-enforced by a constraint on every decision row, including direct ORM and sudo writes.

Control

Scoped per company and per team

Global record rules confine chains, steps, requests and decisions to the user's companies. Self-service employees see only their own requests, team managers only their reports, and officers keep the company-wide view.

Day in the life

A leave request needs two sign-offs

An employee submits a record that inherits the approvable mixin. The engine opens a request against the configured chain and lands it on the first step. The line manager approves from the inbox, the serial chain advances to the next step, and the second approver signs off. The engine closes the request as approved and fires the follow-up transition on the source record. Every decision is written with who, when and any comment. If a step sits untouched past its escalation window, the hourly cron notifies the step approvers and HR admins once, then flags the request so it is not re-nagged on the next run.

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.

Self-approval

A user who is both an officer and the subject of the request is in the authorized set yet still blocked. The guard runs at decide() and again as an @api.constrains on eh.hr.approval.decision, so an officer creating a decision row directly, or a sudo call, is rejected too.

Delegated submitter

Because the engine opens requests under sudo, create_uid is the superuser. The real submitter is captured before the sudo and stored in submitted_by, so a user who raised a request about another employee cannot then approve their own submission, even holding an approver group.

Cron idempotency

Escalation runs hourly but notifies once per step: the request sets an escalated flag and escalated_at after firing, and the flag resets only when the step advances, so approvers are not re-notified every run.

Conditional fail-closed

A conditional chain with no policy_code, or whose policy evaluation raises, never auto-advances and stays pending. The safe default is to wait for a human, not to wave the step through.

All-of coverage

The parallel all-of strategy is satisfied only when the approving users' groups cover every required approver group on the step, computed by set coverage rather than a raw vote count, so one over-privileged approver cannot stand in for the rest.

Cross-company

Global rules confine every approval model to the user's companies. A company B officer cannot search or read a company A request; a direct read raises AccessError.

Missing transition

On close the engine fires the follow-up transition by convention, but if no matching transition exists out of the record's current state it leaves the record untouched and the request state itself stands as the recorded outcome.

What is inside

Built to do the job, end to end.

  • Models it adds. eh.hr.approval.chain, eh.hr.approval.step, eh.hr.approval.request and eh.hr.approval.decision, plus the eh.hr.approvable.mixin that makes a record submittable and the eh.hr.approval.engine ORM-callable surface.
  • Approver resolution. Each step lists static approver groups and an optional dynamic rule that resolves the subject's line manager, department manager or any HR officer at runtime, so chains follow the org chart without hard-coded user IDs.
  • Approval inbox. A backend Owl component lists the user's pending requests across every approvable model and lets them approve or reject with a comment in place, or drill into the source record. Visibility is enforced by the record rules, not by the client.
  • Escalation cron. An hourly ir.cron calls _cron_escalate, which finds pending requests whose current step has been open past its escalation_hours window and notifies the step approvers and HR admins through chatter and the notification engine when present.

Honest about the edges

What this does not do, so nothing surprises you.

  • No delegation or out-of-office routing. Approver resolution is static groups plus line manager, department manager or HR officer; there is no delegate-while-away mechanism in this module.
  • Escalation notifies, it does not reassign. An overdue step alerts the step approvers and HR admins once; it does not auto-advance the request or hand the step to a different approver.
  • The dynamic resolver targets HR org structure (line and department managers, HR officers). Approvals for non-employee records resolve only through static approver groups.
  • Conditional steps depend on the policy engine. A conditional chain needs a valid eh.hr.policy code; without one the step never auto-advances by design.
  • Built for Odoo 18 Community and depends on eh_hr_core and eh_hr_engine_workflow. It is an engine other modules consume, not a standalone end-user app.
Search

Odoo 18 approval workflow, Odoo HR approval chain, multi-step approval Odoo, parallel approval Odoo, conditional approval policy, manager approval Odoo Community, self-approval prevention, approval escalation cron, multi-company approval, approval audit trail, HR approval inbox, Odoo approval engine, reusable approval mixin, department manager approval, ERP Heritage HR

ERP Heritage

Production-grade Odoo accounting, built to an engineering bar and documented honestly. Support: info@erpheritage.com.au
Developed by Odoo Consultant Melbourne

v1.0.0 · LGPL-3 · Odoo 18 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