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 Workflow Engine v 18.0
  4. Sales Conditions FAQ

EH HR Workflow Engine

by ERP Heritage
Odoo
v 18.0 Third Party 18
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 Compatibility
Lines of code 1092
Technical Name eh_hr_engine_workflow
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 Compatibility
Lines of code 1092
Technical Name eh_hr_engine_workflow
LicenseLGPL-3
Versions 16.0 17.0 18.0 19.0
ERP Heritage · HR Platform
ERP Heritage // HR Platform

EH HR Workflow Engine

State machines declared as data, so any HR record becomes draft to approve to done by composing one mixin, with no Python deploy for new steps.

Free · LGPL-3Odoo 18 CommunityLGPL-3v1.0.0
Declarative state machines
States and transitions as data
One mixin, any model
Group gated transitions
Admin bypass

Why this module

EH HR Workflow Engine

Configuration, not code

New steps ship as data

States and transitions are rows in eh.hr.workflow.definition. Adding a transition, regrouping who may run it, or inserting a new state is a configuration change applied from the Workflows menu, never a Python deploy.

One mixin

Any record becomes workflow driven

A model declares _workflow_code and inherits eh.hr.workflow.mixin. It gains a status field whose options come from the definition, an action_transition entry point, and a state_label, with no per feature state machine to re-implement.

Guarded by design

Transitions enforce who and when

Each transition can be gated to res.groups with an admin bypass, blocked from final states by the is_final marker, and routed through the approval engine when requires_approval is set, with the real submitter captured before the engine sudo.

Day in the life

A correction request moves through its workflow

An officer opens a record that inherits the workflow mixin. The statusbar already shows the definition's initial state because it is set as a field default, so the first transition button is live before the first save. The officer fires submit through action_transition; the engine checks the transition is declared from the current state and that the user holds one of the transition's groups, advances the state, and emits a workflow.transition event that is cross written to the platform audit log. Because the submit transition is marked requires_approval, the engine opens an approval request and records who submitted it, so that person cannot later approve their own request. When the chain approves, the approval engine calls back into the workflow engine service to apply the follow up transition, and a final state then forbids any further moves.

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.

Final state guard

is_final is the authoritative terminal marker. action_transition refuses any move out of a final state, even a transition a misconfigured definition wrongly declares from it, raising a clear UserError rather than silently advancing.

Self approval

On a gated transition the real submitter is captured as submitted_by before the approval engine takes sudo, so the user who fired the transition cannot approve their own request later even if they hold an approver group. The approval engine raises AccessError on a self decision.

Button versus server call

transition_code can arrive positionally from server side callers or via the transition_code context key from view header buttons, which cannot pass positional arguments. The method stays button callable and raises UserError when no code resolves.

Unknown or illegal transition

A transition that is not declared from the record's current state, or a user outside all of the transition's allowed groups, is rejected with a specific UserError naming the code and state, so misconfiguration fails loudly instead of corrupting status.

State write is unconditional

requires_approval opens an approval chain as a side effect that gates the follow up transition, not the current one. The state advance still happens, which avoids records appearing stuck in their pre submit state and repeated approval requests against the same record.

One active definition per code

A unique(code, active) constraint allows only one active definition per workflow code, so the runtime lookup that resolves a model's _workflow_code is unambiguous while inactive prior versions can be retained for history.

Audited and replayable

Every transition emits a structured platform event that the platform cross writes to the append only, SHA-256 hash chained audit log under a Postgres advisory lock, so transition history is ordered, tamper evident, and replayable.

What is inside

Built to do the job, end to end.

  • Models this module adds. eh.hr.workflow.definition, eh.hr.workflow.state, eh.hr.workflow.transition, and the abstract eh.hr.workflow.mixin that consumer models inherit.
  • How states reach the UI. The mixin exposes a Selection status field whose options are resolved dynamically from the definition and ordered as the definition orders its states, so the standard statusbar widget renders the progression with no static selection list.
  • Transition controls. Each transition carries from and to states, an optional res.groups gate with admin bypass, a requires_approval flag with an approval_chain_code, and an optional post_action_method resolved on the record after the transition completes.
  • Service entry point. A registered eh.hr.workflow.engine service exposes apply_transition, the entry point the approval engine calls back into to apply a transition once a chain approves.
  • Admin surface. A Workflows form under HR configuration, restricted to the HR admin group, where states and transitions are edited as inline lists with handle ordering, kind, and final markers.
  • Platform integration. The mixin builds on the platform mixin, so each record carries a correlation id and every transition is emitted as a typed event and written to the shared platform audit trail.

Honest about the edges

What this does not do, so nothing surprises you.

  • This module provides the workflow engine and mixin. It ships no pre built workflow definitions or demo data; states and transitions are authored as configuration or supplied by feature modules that compose the mixin.
  • Approval routing, the approval chains, and escalation crons live in the separate approval engine module. This module only opens a request when requires_approval is set and applies the follow up transition the engine resolves on close.
  • The audit log, hash chaining, advisory lock ordering, and platform event bus are provided by the HR core platform, not by this module. This module emits the events and relies on the platform to persist them.
  • post_action_method must be a zero argument method that already exists on the consumer model. It is resolved by name after the transition and is not sandboxed.
  • There is no graphical workflow designer. Definitions are edited through the standard form with inline state and transition lists.
  • This release targets Odoo 18 Community and depends on eh_hr_core.
Search

odoo 18 hr workflow engine, declarative state machine odoo, odoo workflow as data, configurable approval workflow odoo, odoo hr workflow mixin, group gated transitions odoo, odoo community hr platform, state machine odoo records, odoo approval routing, audited workflow transitions odoo, odoo 18 hr approval, no code workflow steps odoo

ERP Heritage

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

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