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 17.0
  4. Sales Conditions FAQ

EH HR Approval Engine

by ERP Heritage
Odoo
v 17.0 Third Party 20
Download for v 17.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

One reusable, multi-step approval engine that any HR record can submit to, with self-approval blocked and every decision on the record.

Free · LGPL-3Odoo 17 CommunityLGPL-3v1.0.0
Multi-step chains as data
Serial, any-of, all-of, conditional
Dynamic manager approvers
Self-approval blocked at 3 layers
Hourly overdue escalation

Why this module

EH HR Approval Engine

Reusable

One engine, every workflow

Instead of re-coding a manager-approval state machine in each module, a record inherits eh.hr.approvable.mixin, declares a chain code, and calls action_submit_for_approval. The engine creates the request, resolves approvers, advances the steps and fires the follow-up transition when the chain closes.

Safe

Self-approval cannot happen

The subject employee, the record owner and the real submitter are all blocked from deciding, even if they hold an approver group. The block is enforced in decide(), re-checked by a model constraint on every create path including sudo, and filtered again in the engine, so it holds however a decision row is produced.

Configurable

Chains are data, not Python

An administrator defines chains, steps, approver groups, dynamic approver rules and per-step escalation hours from the Approval Chains screen. Strategy choices cover serial order, any one approver, all approver groups, or a conditional policy whose no-code DSL decides when a step is satisfied.

Day in the life

A leave request that approves itself, correctly

An employee submits a record for sign-off. The engine opens a pending request against the configured chain, records who submitted it before any privilege escalation, and resolves the first step's approvers from its groups plus the live line or department manager. An authorized approver clicks Approve from the request list; the engine counts only valid, non-subject decisions, advances a serial chain to the next step, and on the final approval fires the record's follow-up transition. If a step sits unactioned past its escalation window, the hourly cron notifies the step approvers and HR admins once, then flags the request so it is not re-notified until it moves on. Every decision, with its approver, comment and timestamp, stays on the request and in its chatter.

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

The subject employee's user, the underlying record's own user_id, and the captured submitter are all excluded from approving. Because the engine opens requests under sudo, the real submitter is persisted in submitted_by before the sudo so create_uid being the superuser cannot be used to slip a self-approval through.

Constraint depth

A model constraint on eh.hr.approval.decision re-validates authorization and the no-self-approval rule on every create, so a direct ORM or sudo create that bypasses decide() still raises ValidationError rather than recording an illegitimate vote.

Multi-company

Global record rules scope chains, steps, requests and decisions to the user's allowed companies; an officer in one company cannot read or directly access another company's requests, verified by a cross-company isolation test.

Escalation idempotency

Each overdue step escalates once. The request carries an escalated flag and timestamp so the hourly cron does not re-notify on every run, and the flag resets to False when the request advances to a new step.

Conditional fail-closed

A conditional chain with no policy_code, or whose policy raises, never auto-advances and stays pending. The unconfigured case is the safe default rather than an accidental approval.

Read isolation by role

Self-service employees see only requests they raised or are the subject of; team managers see only requests about their direct reports plus their own; officers and admins keep the company-wide view, combined through OR-widening rules.

All-of completeness

An all-of step is only satisfied when the union of approver groups voting covers every required approver group on the step, computed from the actual group membership of the users who approved, not just a count.

Rejection handling

A single reject decision closes the request as rejected and attempts the record's refuse transition; if no such transition exists out of the current state the record is left in place and the rejected request stands as the audit record.

What is inside

Built to do the job, end to end.

  • Five models. eh.hr.approvable.mixin (submit-for-approval surface), eh.hr.approval.chain, eh.hr.approval.step, eh.hr.approval.request and eh.hr.approval.decision. The engine itself is both a service for Python callers and an ORM-callable AbstractModel.
  • Four chain strategies. Serial steps in order, parallel any-of (any approver clears the step), parallel all-of (every approver group must approve), and conditional, where an eh.hr.policy DSL expression with the approval count and subject employee in context decides when the step is met.
  • Static and dynamic approvers. Each step lists approver groups and optionally resolves a dynamic approver at runtime: the subject employee's line manager, their department manager, or any HR officer. The authorized set is the union of both.
  • Escalation cron. An hourly ir.cron runs _cron_escalate over pending requests, escalates any step overdue past its escalation_hours to the step approvers and HR admins, posts to chatter, and routes through the notification engine when that module is present.
  • Backend views. Admin Approval Chains form with inline step editing, an Approval Requests list and form under the security menus, and decisions tracked on the request through mail.thread. A pending-approvals inbox component ships in the assets bundle.
  • Security model. Access rights for HR admin, officer and self-service groups plus global per-company rules and role-scoped read rules, so the engine ships locked down rather than wide open.

Honest about the edges

What this does not do, so nothing surprises you.

  • This is an engine and configuration layer. It provides the chains, requests, decisions and the submit-for-approval mixin; the records that submit to it are supplied by the modules that inherit the mixin, not by this module on its own.
  • There is no out-of-office delegation or substitute-approver reassignment feature. The only delegation concept in the code is the guard that prevents a user who submitted a request on someone else's behalf from approving their own submission.
  • Escalation notifies the step approvers and HR admins; it does not auto-approve or auto-skip an overdue step. The request stays pending until an authorized approver acts.
  • The conditional strategy depends on the policy engine. Without a configured eh.hr.policy code, a conditional chain never auto-advances by design.
  • Depends on eh_hr_core and eh_hr_engine_workflow and is intended to run as part of the EH HR Platform rather than as a standalone HR application.
Search

odoo 17 approval workflow, odoo hr approval chain, multi step approval odoo, approval matrix odoo, conditional approval policy, approval escalation cron, self approval prevention, multi company hr approvals, dynamic manager approver, approval audit trail odoo

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 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