• Demo
  • Contact us
  • Log in
  • Sign up
  • English (US) Tiếng Việt
ERPOnline
  • Introductions
    • Features Overview
    • Integrated Apps & Modules
  • Pricing
  • Services
    • Odoo Implementation & Consultancy
    • Odoo Training
    • Odoo Customization On-demand
    • Odoo Upgrade Service
  • Solution
    Giải pháp theo nghiệp vụ Quản lý Quan hệ khách hàng Quản lý Bán Hàng/Dịch vụ Quản lý Mua sắm Hoạch định nguồn lực Sản xuất (MRP) Quản lý Nhân sự (HRM) Kế toán TC (Financial Accounting) Kế toán QT (Analytical Accounting) Bán lẻ với POS (Point of Sales) Thương mại điện tử tích hợp
    Giải pháp Chuyên Ngành ERP cho DN sản xuất ERP cho DN Thương mại & Dịch vụ ERP cho Siêu thị, Cửa hàng bán lẻ ERP cho ngành Đóng tàu ERP cho DN Du lịch & Lữ hành ERP cho Trường học ERP cho DN vận tải hành khách
  • Help
    • User Manuals
    • Helpdesk
  • Appointment
  • 0
  • 0
  • Sign in
Contact Us
  1. APPS
  2. OmniApproval™: One platform. Every approval. 17.0
OmniApproval™: One platform. Every approval.
OmniApproval™: One platform. Every approval.

OmniApproval™: One platform. Every approval.

by Viindoo

4.9

$ 123.92 $ 123.92
v 17.0 0
Live Demo Demo Video
Lines of Code 15546
Technical name viin_approval
License OPL-1
Website https://viindoo.com/apps/app/17.0/viin_approval
Read description for
Required Apps Discuss (mail) Employees (hr)
Included Dependencies Approvals Viindoo Base Advanced HR Management Safe Field & Model Selector
Extensions Recruitment Requests/Approvals OmniApproval™ - Employee Contract Approvals OmniApproval™ - Overtime Approvals OmniApproval™ - Timesheet Approvals OmniApproval™ - ECO Approvals OmniApproval™ - Approval by Coaches OmniApproval™ - Recognition & Discipline Approvals (HR) OmniApproval™ - Maintenance Approvals OmniApproval™ - Accounting Approvals OmniApproval™ - Analytic Accounting Approvals Approval Tests OmniApproval™ - Stock Approvals
  • Description
  • Documentation
  • License
Viindoo Logo
Odoo Community
Odoo Enterprise
Viindoo Cloud

OmniApproval™: One platform. Every approval.

Streamline every approval process in your organization - HR, finance, procurement, sales, manufacturing, estimates, projects, operations - with a single configurable engine inside Viindoo/Odoo. No scattered emails. No spreadsheets. No ad-hoc scripts.

OmniApproval™ unifies requests, keeps a tamper-proof audit trail with snapshots & diffs, and empowers consultants & developers with safe inline Python hooks.

OmniApproval Overview

Key Features

A universal, production-ready approval framework for any Viindoo/Odoo model. Configure once, reuse everywhere. Safe by design. Audit-ready by default.

Universal Model Support

Whitelist any business model per Approval Type, blacklist internal/system models, trigger approvals from list/form action menus.

Guided Source Selection

Wizard to select models and records with domains. One approval per record, or one approval for multiple records, or attach to existing approvals.

Safe Field Mapping Engine

Map scalar & relational fields (header/line, nested/trees) with built-in blacklists to avoid unsafe writes and internal fields. No glue code required.

Dynamic Field Toggles

Enable/require amount, partner, employee, period, location, currency, product, reference, address, etc. Views and wizards respect invisible/required consistently.

Snapshot & Diff Audit Trail

Per-approval snapshots & per-record snapshot lines (model + ID). Auto-detect changes, post diffs to approvals and business records. BI-friendly values for compliance & governance.

Inline Python Hooks (Safe)

Before/after confirm, validate, refuse, cancel, reset to draft. Batch-safe APIs, helper context, and preflight opcode checks to block dangerous logic while enabling powerful automation.

Decisions Logged on Business Documents

Approval decisions are written back to the original documents (sales orders, purchase orders, invoices, projects, etc.), so managers see who approved or refused directly where they work.

Approval Buttons in the Right Place

“Get Approved” actions and approval status appear directly on relevant screens. Employees request approvals from the same list and form views they already use, without learning a new app.

Benefits

Right control, less friction

Only send what truly requires approval using domain-driven targeting. No noise for managers, no missing control points for auditors.

Deep integration, zero hacks

Replace scattered custom scripts with a single engine. Clean extension points for custom logic without touching core flows.

Trustworthy audits

100% traceable changes at field level for approvals and related records. Ideal for ISO, SOX-like controls, and enterprise-grade governance.

Context on the original documents

Managers and auditors can review approvals directly on sales orders, purchase orders, invoices, projects, and more – with comments and changes in one place.

Safe lifecycle as data evolves

The engine handles situations where source records are updated or removed, avoids orphaned approvals, and keeps the database clean and explainable over time.

Faster delivery for partners

Implementers and developers reuse the same engine across HR, accounting, sales, purchasing, stock, project, manufacturing, etc - less code, fewer bugs.

  • Features
  • Demo
  • Support
  • Technical Requirement
  • Changes log

One Engine for Every Model

  • Configure which business models each Approval Type applies to.
  • Start with a ready-to-use “General” approval template per company, then refine it instead of building from scratch.
  • Prevent selection of technical and unsafe models.
  • Trigger approvals from list & form views via built-in actions.
OmniApproval Model Selection
Field Mapping Tree

Safe Field Mapping Engine

  • Map scalar & relational fields (many2one, one2many, JSON, etc.).
  • Support header/line mapping, nested child structures.
  • Built-in blacklists for directions and internal fields to avoid data corruption.

Dynamic Fields, Zero XML Duplication

  • Toggle visibility & required state for amounts, partners, employees, locations, etc.
  • Applies consistently on approval forms, lines, and wizards.
  • Perfect for building reusable approval templates across departments.
Dynamic Field Toggles

Snapshot & Diff Audit Trail

  • Capture snapshots at submission/approval with per-record snapshot lines.
  • Detect changes on related orders, invoices, projects, etc. after submission.
  • Post human-readable diff logs to both approvals and business records.
  • Use standard Odoo tools & BI to analyze changes over time.
Snapshot & Diff

Enterprise-grade Reports & Analytics

OmniApproval™ ships with three ready-to-use dashboards that turn approval data into management insights – no custom development required.

Approval Requests Overview

Follow the volume and status of approvals over time by company, period, or type – with normalized amounts and line totals in a single reporting currency.

  • See how many requests are Approved, To Approve, Refused, Cancelled or Done per month.
  • Spot peaks, slow periods, and backlogs across the whole organization.
Approval Requests Overview

Approval Analysis

Compare workload and impact across approval types, products and departments on a unified line-level view – including requests without lines.

  • Understand which approval types and teams generate the most volume and value.
  • Support budgeting and process redesign with hard data instead of anecdotes.
Approval Analysis

Approver Workload & Performance

Track how approvals are distributed across managers and how long they take to decide, with average and median decision time by approver.

  • Identify overloaded approvers and bottlenecks in the decision chain.
  • Measure adherence to internal deadlines and SLA expectations.
Approver Workload

All metrics are stored in structured models, ready for Odoo pivot tables, charts, spreadsheets, or external BI tools – so approval governance becomes measurable, not just configurable.

See Decisions on the Original Documents

  • Each approval or refusal adds a clear note on the related orders, invoices, projects, and other documents.
  • Managers open a sales order or purchase order and immediately see who approved, when, and with which comment.
  • Combined with snapshot & diff, it gives both the decision history and the change history in one place.
  • Reduces back-and-forth emails when investigating disputes or explaining decisions to auditors.
Approval Logs on Business Records
Inline Python Hooks

Inline Python Hooks (Sandboxed)

  • Run code before/after confirm, validate, refuse, cancel, reset.
  • Access safe helpers: env, records, fields, etc.
  • Preflight engine blocks unsafe opcodes and patterns.
  • Raise UserError/ValidationError to enforce policies.

Also Built for Implementers & Developers

  • Use a generic mixin to make any custom model “approval-aware” with related approvals, lines, and source links.
  • Rely on helper methods to discover approvals and related business records instead of writing custom SQL or scattered glue code.
  • Call a dedicated approval data service with caching and invalidation to render badges, smart buttons, and summaries in your own views.
  • Snapshot & diff logic is split between pure diff computation and post-commit logging, keeping transactional behavior predictable.
  • Blacklists for technical, mail, and test models, plus internal fields, help avoid accidental writes to unsafe places.
  • Inline Python hooks re-use the same safety layer, helpers, and preflight checks, so project-specific logic stays maintainable on approval types.

Explore OmniApproval™ in Action

Use our live demo databases to experience universal approvals for sales, purchase, projects, accounting, stock, and more.

OmniApproval™ Video Overview
Watch on YouTube
International Demo (EN) Click to open live demo: https://v17demo-int.viindoo.com
Vietnam Demo (VI) Click to open live demo: https://v17demo-vn.viindoo.com

Documentation & Tutorials

OmniApproval™ ships with self-explained configuration screens. Visit Viindoo Docs for updated guides and implementation best practices. (Link to be updated)

Need help with OmniApproval™?

For questions, implementation support, or custom features, please contact Viindoo.

Pre-Sales & Partnership

sales@viindoo.com

Please include:

  • Your Odoo/Viindoo version (CE/EE).
  • Estimated users, key processes to control.
  • Other Viindoo/Odoo modules in scope.

Technical Support

apps.support@viindoo.com

When reporting an issue, please provide:

  • Order number or app reference.
  • Odoo/Viindoo version & edition.
  • Steps to reproduce and screenshots/logs.

Technical Requirement

Editions: Odoo CE, Odoo EE and Viindoo.
License: OPL-1 (Odoo Proprietary License).

Changes log

17.0.0.1 - Initial Release

  • Introduced universal approval engine for any business model.
  • Added safe field mapping framework with blacklist & tree mapping.
  • Implemented dynamic field toggles and integrated wizards.
  • Delivered snapshot & diff audit trail for approvals and related records.
  • Provided inline Python hooks with preflight security checks.

Works Great With These Modules

OmniApproval™ is designed as the core approval engine. Enhance domain-specific workflows with these plug-and-play adapters (optional, no hard lock-in).

OmniApproval™ - Employee Contract Approvals

Bring OmniApproval™ into HR contracts: hiring, renewals, salary/package changes, and other contract updates, with HR-specific fields controlled by dynamic toggles.

OmniApproval™ - Purchase Approvals

Approval templates for purchase requests & orders, aligned with budgets and vendor policies.

OmniApproval™ - Quote & Order Approvals

Configure approvals for quotations, discounts, credit limits, and strategic deals.

OmniApproval™ - Project & Task Approvals

Approvals for project changes, timesheets, and key milestones.

OmniApproval™ - Accounting Approvals

Journal entries, payments, and financial controls with full traceability.

OmniApproval™ - Stock Approvals

Stock transfers, receipts, and deliveries tied to OmniApproval™ flows.

OmniApproval™ - Analytic Approvals

Control analytic distributions & allocations through approvals, ready for cost analysis.

OmniApproval™ - MRP Approvals

Approvals for manufacturing orders, engineering changes, and production exceptions.

Who Should Use OmniApproval™?

Ideal for organizations that need consistent approval governance across multiple departments, subsidiaries, and business models - without building one-off workflows.

Enterprise & Scale-ups

Multi-entity companies needing standardized approvals with audit-ready logs.

Consulting & Odoo/Viindoo Partners

Deliver approvals faster across projects, without reinventing the wheel each time.

Regulated Industries

Businesses under strict compliance (finance, manufacturing, logistics, healthcare) that require provable, consistent approval trails.

OmniApproval™ (viin_approval)

Installation

  1. Go to Apps.
  2. Search for viin_approval.
  3. Click Activate.

Note

viin_approval is the core engine of OmniApproval™ and must be installed before any vertical approval modules.

Configuration

Approval Types

  1. Navigate to OmniApproval™ - Configuration - Approval Types.
  2. Create or open an approval type.
  3. Set the following fields:
    • Source Model
    • Source Button Label
    • Applicable Records Domain (optional)
    • Before-Approval Required Domain (optional)
    • Field Mapping Strategy: single or multi
    • Has Lines / Lines Required (if line-level approval is needed)

Approvers

  1. Open the Approvers tab.
  2. Configure:
    • Required approvers
    • Sequence
    • Minimum approvals

Field Enablement (Head)

  1. For each toggle field, choose one of:
    • none: hidden
    • optional: shown, optional
    • required: shown, mandatory

Common head toggles include:

  • has_document
  • has_reference
  • has_date
  • has_period
  • has_amount / has_amount2 / has_amount_currency
  • has_quantity / has_quantity_integer
  • has_partner / has_partner_ids
  • has_user_id / has_user_ids
  • has_employee_id / has_employee_ids
  • has_department_id / has_job_id
  • has_product_id / has_product_tmpl_id
  • has_country_id / has_country_state_id
  • has_address_id
  • has_location
  • has_resource_calendar_id
  • has_description / has_description_html
  • has_res_ref
  • has_time_period
  • etc

Field Enablement (Lines)

Line toggle fields follow the same structure, using line_has_... prefixes.

Custom Labels

  1. In the Labels section, set custom labels for enabled fields. These labels override defaults in both the request form and the wizard.

Field Mapping

  1. Open the Field Mappings tab.
  2. Add mapping lines specifying:
    • Source Model
    • Source Field
    • Destination Model (Request or Request Line)
    • Destination Field
    • Optional Child Mappings for nested structures

Mapping Strategy Behavior

Single Strategy

  • One approval request per source record.
  • If line mappings exist, source lines map to request lines.

Multi Strategy

  • One approval request for multiple source records.
  • Each source record becomes one request line.

Allowed mapping field types:

  • Basic stored fields
  • many2one
  • many2many
  • one2many (converted into lines)

Snapshots and Diff

  1. When a request is confirmed, a snapshot is stored:
    • One snapshot for the request head
    • One snapshot per request line
  2. Later changes to the source record are detected and displayed as diffs.

Using OmniApproval™

Creating a Request

  1. Open any supported source record.
  2. Click Get Approved.
  3. The wizard loads mapped values.
  4. Select an approval type.
  5. Confirm to create the request.

Attaching to an Existing Request

(Available only when the approval type uses multi strategy.)

  1. Select multiple source records.
  2. Choose Attach to existing request.
  3. Select the target request.
  4. Confirm.

Inline Python Hooks (Admin Only)

These hooks allow system admins to add controlled automation.

Action Hooks

Executed before or after actions:

  • Confirm -> code_confirm_pre / code_confirm_post
  • Validate -> code_validate_pre / code_validate_post
  • Refuse -> code_refuse_pre / code_refuse_post
  • Cancel -> code_cancel_pre / code_cancel_post
  • Draft -> code_draft_pre / code_draft_post

Available variables:

  • env
  • records (batched approval requests)
  • log (logging helper)

Example:

# Confirm related transfers when approval is validated
pickings = records._get_res_ref_records_map().get('stock.picking')
if pickings:
    pickings.action_confirm()

Inline Onchange Hooks (UI Only)

These run only in web client onchange events, never on backend create/write:

  • code_onchange_request
  • code_onchange_request_line

Example:

# Autofill quantity when product changes
for r in records:
    if r.product_id and not r.quantity:
        r.quantity = 1

Default Code Snippets

Each hook field includes example code which demonstrates:

  • Allowed global variables
  • Safe operation patterns
  • Batch processing via records

Admins should begin with these examples.

Best Practices

  1. Keep mapping rules simple and focused.
  2. Do not map compute-only or non-stored fields.
  3. Use snapshot/diff to track post-approval changes.
  4. Use inline hooks for lightweight automation only.
  5. For complex logic, create a dedicated module.

Summary

viin_approval provides:

  • Configurable approval request structures
  • Head/line field toggles
  • Customizable labels
  • Flexible field mapping
  • Snapshot and diff audit trails
  • Safe inline Python automation

It is the foundation of the OmniApproval™ ecosystem.

This software and associated files (the "Software") may only be used (executed, modified, executed after modifications) if you have purchased a valid license from the authors, typically via Odoo Apps, or if you have received a written agreement from the authors of the Software (see the COPYRIGHT file).

You may develop Odoo modules that use the Software as a library (typically by depending on it, importing it and using its resources), but without copying any source code or material from the Software. You may distribute those modules under the license of your choice, provided that this license is compatible with the terms of the Odoo Proprietary License (For example: LGPL, MIT, or proprietary licenses similar to this one).

It is forbidden to publish, distribute, sublicense, or sell copies of the Software or modified copies of the Software.

The above copyright notice and this permission notice must be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

ERPOnline
Head Office: 6th Floor, Taiyo Building, No.97 Bach Dang, Hong Bang Ward, Haiphong, Vietnam
+84 225 730 9838
Business Code: 0201994665
Authorized by Haiphong Department of Planning and Investment
Logo Sale Noti MOIT
About Us
Information Contact Us Blogs Jobs
Resource
User Documentation Technical Documentation Github Runbot
Policy
Terms of use Privacy Policy Supporting Policies Data Security & Safety Payment Policy APGL V3 License 14 Days Refund ERPOnline Pricing ERPOnline Terms of Service Regulations on Q&A Forum
Service
Course Forum
ERPOnline is a trademark owned by Viindoo Technology Joint Stock Company
English (US) Tiếng Việt
Powered by Viindoo - Create a free website