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. Accounting
  3. Approval Workflow v 19.0
  4. Sales Conditions FAQ

Approval Workflow

by ERP Heritage https://www.erpheritage.com.au/
Odoo
v 19.0 Third Party 97
Download for v 19.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 • Discuss (mail)
• Invoicing (account)
Community Apps Dependencies Show
Accounting Suite Base
Lines of code 5733
Technical Name eh_account_approval
LicenseLGPL-3
Websitehttps://www.erpheritage.com.au/
Versions 16.0 17.0 18.0 19.0
ERP Heritage · Accounting Suite
ODOO 19 . COMMUNITY EDITION

Approval Workflow

Block account.move posting until every required approver in an amount-banded, ordered chain has signed off.

Free · LGPL-3FREE . LGPL-3ODOO 19 . COMMUNITYv19.0.1.1.7
Amount bands
Post gate
Atomic steps
Audit log
SLA escalation

Why this module

Approval Workflow

01 / CONTROL

Posting is the enforcement point

The gate sits on the account.move post pipeline, before sequence numbering and reconciliation fire. Until the chain reaches approved, the move cannot post, and the block names the exact policy, pending group, and step that stopped it. No half-posted, gap-numbered moves slip through.

02 / INTEGRITY

Concurrency and audit, not just a status field

Two approvers clicking at once cannot both advance a step: an atomic compare-and-set with a stale-step guard lets one win and hands the other a clean retry. Every transition lands on an append-only log where only the comment is writable and deletion is refused at the model level.

03 / DEPTH

A tested SLA engine, not a checkbox

Per-rule SLA hours compute a due time and an on-track, at-risk, or breached state. An hourly cron sends a pre-deadline reminder and escalates a breached request exactly once to a configured group, with per-record error isolation so one bad rule cannot stall the batch. The full lifecycle is covered by tests.

Day in the life

A vendor bill clears the chain, then someone edits it after approval. What happens?

A bill arrives for ninety thousand. The amount-band policy routes it through three ordered steps: manager, then director, then CFO. Each approver sees a To-Do activity land in their personal inbox as their step comes up, and any member of the responsible group can sign off to advance. Two managers happen to approve in the same second; the atomic step pointer lets one through and quietly hands the other a retry, so the chain never double-advances. With all three signatures in, posting is allowed and the move posts cleanly. Later an AP clerk opens the still-draft move and bumps a line, pushing the total past the configured material threshold. Because the change clears both the percentage and the absolute floor, the approved request silently resets to step zero and a chatter note records why, so the next post attempt is blocked until the chain re-signs. Meanwhile a separate request has sat unsigned past its SLA window: the hourly sweep marks it breached, posts a reminder, and escalates it once to the configured group, never storming it on the next pass.

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.

POST GATE . ORDER

The post-time gate runs before upstream posting, so sequence numbering and reconciliation side effects only fire after approval. You never get a half-posted, gap-numbered move that approval later has to unwind.

CONCURRENCY

Two approvers in the same group clicking approve at the same instant cannot both advance the step. A raw SQL compare-and-set with a stale-step guard lets one win and gives the other a clean retry, and the race is covered by a regression test.

STEP ORDER

Step order is pinned to an explicit sequence column, not the approver group's primary key. Creating or deleting unrelated security groups never silently reorders an in-flight approval chain.

RE-APPROVAL . THRESHOLD

The re-approval threshold has both a percentage and an optional absolute floor, so a large-percentage but tiny-absolute change can be exempted from re-signing while a genuinely material change still rolls the request back to step zero.

RE-APPROVAL . WRITE

Re-approval is enforced on a plain write, not just on edit-and-post. Editing a watched field on a draft move that already had an approved request silently resets the request and posts a chatter note, so the next post attempt blocks.

ESCALATION . IDEMPOTENT

A breached request is escalated exactly once. A last-escalated guard stops the hourly cron from storming the escalation group on every pass.

CRON . RESILIENCE

The SLA sweep wraps each request in its own try/except, so one bad rule (a deleted group, a missing field) logs a warning instead of aborting the whole batch.

What is inside

Built to do the job, end to end.

  • Amount-band approval policies. One policy per company and document type, with ordered rules. An amount band selects the single approver group for that step, and first-match rule routing picks the band that applies.
  • Ordered single-group steps. Each step is bound to exactly one approver group; any member can sign off to advance. Steps run in the policy's sequence order, pinned to an explicit sequence column so unrelated group changes never reorder a live chain.
  • Atomic state machine. Advancing the current step uses a raw SQL UPDATE with a stale-step guard, so concurrent approvers cannot both advance the same step. One wins, the other retries cleanly.
  • Block posting until approved. A matching policy blocks the account.move post pipeline until the request reaches approved, with an error that names the policy, the pending group, and the step. The gate runs before upstream posting.
  • Re-approval on material change. A material amount change after full approval rolls the request back to step zero. The threshold is a percentage with an optional absolute floor, configurable per policy; the watched edit fields are a fixed set.
  • Append-only approval log. Every transition (submitted, approved, rejected, withdrawn, restarted, reset, escalated, completed) lands as a row with actor, timestamp, and comment. Only the comment is writable and deletion is refused at the model level.
  • SLA and escalation engine. Per-rule SLA hours compute a due time and an on-track, at-risk, or breached state. An hourly cron sends a pre-deadline reminder and performs one-shot auto-escalation to a configured group, with per-record error isolation.
  • Reject, withdraw, restart. Any approver in the pending group can reject (terminal). The requester or an accounting manager can withdraw the whole request. Withdrawn or rejected requests restart from step zero.
  • Activity-driven notifications. Each new step schedules a To-Do activity on the members of the responsible group, surfaced in their personal activity inbox and kanban.

Honest about the edges

What this does not do, so nothing surprises you.

  • Each step is bound to exactly one approver group. There is no per-step un-approve and no delegation or substitution; withdraw cancels the whole request rather than rolling back a single signature.
  • Re-approval on material change is keyed on the amount delta only. A partner change that leaves the total unchanged does not reset the request, and the set of watched edit fields (lines, amounts, currency, partner) is fixed in code, not admin-configurable.
  • Re-approval fires only after the request is fully approved. A material edit made while approval is still in progress does not reset or rewind partial signatures, and edits during partial approval are not gated.
  • An approver group with zero members is not separately guarded: a step whose group is empty schedules no activity and simply cannot advance, with no explicit message.
  • Step activities notify only the first several members of a group, so very large approver groups will not raise an activity for the trailing members. There is no separation-of-duties constraint, so the same user can prepare and approve unless your group membership prevents it.
  • Notifications are activity-driven (To-Do items), not email. Shipped email templates and SLA chatter posts are not wired into the step-advance path.
Search

odoo 19 approval workflow, vendor bill approval, multi-step approval accounting, journal entry approval, approval matrix by amount, odoo community spend authorization, invoice approval hierarchy, approval SLA escalation odoo, block posting until approved, audit log approval odoo

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 accounting, built to an engineering bar and documented honestly. Support: info@erpheritage.com.au
Developed by Odoo Customisation Services • LinkedIn

v19.0.1.1.7 · LGPL-3 · Odoo 19 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