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. Purchasing
  3. Purchase Replenishment Advanced v 19.0
  4. Sales Conditions FAQ

Purchase Replenishment Advanced

by Grevlin Global Corp. https://www.grevlin.com
Odoo

$ 287.09

v 19.0 Third Party
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)
• Inventory (stock)
• Purchase (purchase)
• Invoicing (account)
Lines of code 1166
Technical Name grev_od_purchase_replenishment_adv
LicenseOPL-1
Websitehttps://www.grevlin.com
You bought this module and need support? Click here!
Availability
Odoo Online
Odoo.sh
On Premise
Odoo Apps Dependencies • Discuss (mail)
• Inventory (stock)
• Purchase (purchase)
• Invoicing (account)
Lines of code 1166
Technical Name grev_od_purchase_replenishment_adv
LicenseOPL-1
Websitehttps://www.grevlin.com
  • Description
  • Documentation
  • License

🔄 Purchase Replenishment Advanced

Dynamic safety stock, moving-average demand, risk scoring, MOQ enforcement, and bulk rule templates — extending Odoo’s native orderpoints without replacing them.

✓ Community & Enterprise ✓ Odoo 19.0 ✓ Multi-Company

Purchase Replenishment Advanced extends Odoo’s native stock.warehouse.orderpoint with demand-aware logic. It computes average daily demand from stock move history, derives dynamic safety stock from three configurable methods, scores every orderpoint as Stockout / Low / Optimal / Overstock, and enforces supplier MOQs — all through the standard Odoo replenishment flow, with zero new picking operations or accounting entries.

🎯 Key Benefits

🚫

Eliminate Stockout Surprises

Real-time risk scoring flags every orderpoint as Stockout, Low, Optimal, or Overstock so your team acts before shelves go empty, not after a customer complains.

📈

Right-Sized Safety Stock

Three calculation methods — Fixed Qty, % of Demand × Lead Time, and Days of Coverage — adapt safety stock to actual demand velocity, not outdated spreadsheet guesses.

⚡

Configure Hundreds in Seconds

Bulk rule templates let a planner stamp safety stock methods, MOQ, and lookback windows across an entire product category and warehouse in a single click.

📊

Measure Forecast Quality

Monthly forecast-vs-actual snapshots surface MAPE-based accuracy scores per orderpoint, so you can tune demand lookback windows based on real performance data.

⚙ Core Features

🔄 Dynamic Safety Stock (3 Methods)

Choose the method that fits each product’s demand pattern:

  • Fixed Qty — constant buffer, simple products
  • % of Demand × Lead Time — scales automatically with velocity
  • Days of Coverage — hold N days of average consumption

Computed values are stored on the orderpoint and sync to product_min_qty via an explicit button action.

📋 Moving-Average Demand Analysis

Computes average daily demand from stock.move done history over a configurable lookback window (default 90 days). Demand is batched per warehouse to avoid N+1 queries across large orderpoint lists.

  • Coverage days computed from qty_on_hand ÷ avg demand
  • Lookback window configurable per orderpoint or rule template
  • Stored as indexed fields for fast dashboard queries

🔴 4-Level Risk Scoring

Every orderpoint is automatically classified on every save:

Stockout Zero stock or coverage < lead time
Low Coverage < lead + safety days
Optimal Within target range
Overstock Qty on hand exceeds product_max_qty

🔧 MOQ Enforcement

Overrides Odoo’s native _get_qty_to_order() via super() to bump the recommended quantity to the minimum order quantity when it falls short. MOQ never creates orders for already-stocked products — it only bumps up when a genuine replenishment is triggered. UoM rounding is preserved throughout.

⚙ Bulk Rule Templates

Rule templates configure safety stock method, MOQ, and demand lookback window for all orderpoints matching a product category and warehouse. A single “Sync to Orderpoints” action stamps settings onto hundreds of records. Templates do not create new orderpoints — a dedicated wizard handles bulk creation of missing ones.

📄 Forecast Accuracy Tracking

Monthly snapshots capture the qty-to-order forecast at period start. A cron job closes open periods by querying actual consumption from stock.move done records and writes a MAPE-based accuracy score. Dashboard KPI surfaces the rolling average across up to 200 closed periods.

💻 OWL Real-Time Dashboard

An ir.actions.client dashboard provides a risk-pipeline banner (Stockout / Low / Optimal / Overstock counts as clickable filters) and an embedded native Odoo replenishment list below it. Right-panel KPIs show To-Order count, auto vs manual trigger split, and rolling forecast accuracy. All data is served by get_dashboard_data() on the server — no client-side aggregation, no polling.

📊 The Risk Pipeline at a Glance

🔴

Stockout Risk

Zero on-hand or coverage below lead time. Immediate attention required.

🟠

Low Stock

Coverage inside lead + safety buffer. Order soon to stay ahead.

✅

Optimal

Inventory within target range. No immediate action needed.

🔵

Overstock

Exceeds max quantity. Review purchasing frequency or MOQ.

👤 Who Is This For?

📦

Inventory Managers

Monitor stock health across all warehouses from one dashboard

📋

Procurement Planners

Build rule templates once, sync to hundreds of orderpoints instantly

🛒

Buyers

MOQ enforcement guarantees supplier minimum quantities are met automatically

📊

Supply Chain Analysts

Forecast accuracy KPI surfaces calibration gaps over time

⚙ Compatibility

✓ Works on Community Edition

Depends only on base, purchase, product, stock, purchase_stock, and mail — all available in Odoo Community 19.0.

✓ Enhanced on Enterprise Edition

When optional Grevlin suite modules are also installed, the dashboard surfaces budget-blocked counts from grev_od_purchase_budget_control. All cross-module lookups use try/except guards to degrade gracefully if optional modules are absent.

📄 Changelog

Version 1.0.0 — Initial Release

  • Dynamic safety stock with three methods (Fixed, % Demand×Lead, Days of Coverage)
  • Moving-average daily demand from stock.move history (configurable lookback)
  • 4-level risk scoring: Stockout / Low / Optimal / Overstock on every orderpoint
  • Stock coverage days computed and stored as indexed field
  • MOQ enforcement via _get_qty_to_order() override — bumps up, never bypasses
  • Bulk rule templates by product / product category / warehouse
  • Bulk orderpoint creation wizard (creates missing orderpoints from a rule template)
  • Forecast accuracy tracking — monthly snapshots with MAPE-based accuracy score
  • OWL dashboard: risk pipeline banner + embedded native replenishment list + KPI footer
  • Multi-company record rules on rule templates and forecast accuracy records
  • Optional integration with grev_od_purchase_budget_control (graceful fallback)

💬 Need Help?

✉

Email Support

odoo@grevlin.com
🌐

Website

www.grevlin.com
🐦

Follow Us

@GrevlinGlobal
✓ 30 Days Free Support Included

Grevlin Global Corp

Professional Odoo Solutions & Business Optimization

Purchase Replenishment Advanced

Advanced replenishment planning for Odoo 19 — dynamic safety stock, moving-average demand, 4-level risk scoring, MOQ enforcement, and bulk rule templates that extend the native stock.warehouse.orderpoint without replacing it.

Compatible with both Odoo Community and Enterprise editions.

Overview

This module adds demand-aware intelligence on top of Odoo's built-in reorder point workflow. Every stock.warehouse.orderpoint gains:

  • Computed average daily demand from stock.move done history
  • Stock coverage in days (qty_on_hand ÷ avg daily demand)
  • Dynamic safety stock via three selectable methods
  • 4-level risk classification: Stockout / Low / Optimal / Overstock
  • Minimum Order Quantity (MOQ) enforcement in the native _get_qty_to_order() chain
  • A back-reference to a rule template that last stamped its settings

A separate model (grev.purchase.replenishment.rule) holds bulk-config templates that can stamp settings onto hundreds of orderpoints in a single action.

A reporting model (grev.purchase.replenishment.forecast) stores monthly forecast-vs-actual snapshots and computes MAPE-based accuracy scores.

An OWL dashboard (ir.actions.client tag replenishment_dashboard) surfaces the risk pipeline and a rolling forecast accuracy KPI.

Configuration

Installation

  1. Install the module from :menuselection:`Settings --> Apps`.
  2. All dependencies are standard Odoo modules: base, purchase, product, stock, purchase_stock, and mail. No additional installation is needed.
  3. Assign users to the appropriate security group (see below).

Note

The module integrates optionally with grev_od_purchase_budget_control. If that module is installed, the dashboard also shows budget-blocked order counts. If it is absent, the integration is silently skipped.

Security Groups

Three privilege tiers are provided under the Purchase Replenishment category:

Group Permissions
Replenishment User Read-only: dashboard, orderpoints, rule templates, forecast accuracy records.
Replenishment Planner Create and edit rule templates; sync templates to orderpoints; manage forecast records. Implies Replenishment User.
Replenishment Manager Full CRUD including delete; run bulk-creation wizard. Implies Replenishment Planner.

Setting Up Rule Templates

Rule templates are managed under :menuselection:`Replenishment --> Configuration --> Rule Templates`.

  1. Click :guilabel:`Create`.
  2. Set :guilabel:`Template Name`, :guilabel:`Warehouse`, and :guilabel:`Company`.
  3. Choose the scope: set either :guilabel:`Product` (single SKU) or :guilabel:`Product Category` (all storable products in that category). At least one of the two is required.
  4. Configure the safety stock and demand parameters (see below).
  5. Click :guilabel:`Save`, then :guilabel:`Sync to Orderpoints` to stamp the settings onto all matching orderpoints in the warehouse.

Important

Syncing overwrites the advanced fields on all matching orderpoints. It does not create new orderpoints — use :guilabel:`Create Missing Orderpoints` (wizard) for that.

Configuring Dynamic Safety Stock

Each orderpoint (and rule template) exposes three methods via :guilabel:`Safety Stock Method`:

Method Computed As
fixed Constant grev_safety_stock_qty — suitable for low-velocity SKUs.
pct avg_daily_demand × lead_days × (grev_safety_stock_pct / 100) — scales with velocity and lead time automatically.
coverage avg_daily_demand × grev_safety_stock_days — holds N days of buffer.

The result is stored in grev_dynamic_safety_stock (indexed). Push it to Odoo's product_min_qty by clicking :guilabel:`Sync Safety Stock` on the orderpoint form (non-fixed methods only).

Usage

Dashboard

Navigate to :menuselection:`Replenishment --> Dashboard` to open the OWL risk pipeline view.

The banner shows four clickable tiles — one per risk level — that filter the embedded native replenishment list below. The right panel displays:

  • To Order — orderpoints with qty_to_order > 0
  • Auto Trigger — orderpoints set to automatic replenishment
  • Manual Trigger — orderpoints requiring manual action
  • Forecast Accuracy — rolling average across the last 200 closed monthly periods

Click any tile to drill into the matching orderpoints. Click again to clear the filter and show all.

Understanding Risk Levels

The grev_risk_level field is recomputed on every save of the orderpoint:

Level Condition
stockout qty_on_hand ≤ 0 or coverage_days < lead_days
low coverage_days < lead_days + safety_days
overstock qty_on_hand > product_max_qty (when product_max_qty > 0)
optimal All other cases

Using Rule Templates

  1. Go to :menuselection:`Replenishment --> Configuration --> Rule Templates`.
  2. Open or create a template. Configure safety stock method, demand lookback, and MOQ.
  3. Click :guilabel:`Sync to Orderpoints`. A notification reports how many orderpoints were updated.
  4. To create missing orderpoints for products that have no reorder rule yet, click :guilabel:`Create Missing Orderpoints` to open the bulk-creation wizard.
  5. To see which orderpoints are currently linked to a template, click :guilabel:`Synced Orderpoints` (smart button on the template form).

Tip

Use one template per product category per warehouse. Templates can be re-applied at any time — repeated syncs are idempotent.

Viewing Forecast Accuracy

Go to :menuselection:`Replenishment --> Reporting --> Forecast Accuracy`.

Each row represents one product × warehouse × month period. Closed periods (past period_end) display the forecast_accuracy percentage. Open periods show the forecasted qty until the cron closes them.

The monthly cron action_close_open_periods (ir.cron) closes all periods whose period_end < today by querying actual outbound done moves and writing actual_qty.

Technical Details

Models

Model Description
stock.warehouse.orderpoint (inherited) Extended with grev_ prefixed fields for safety stock, demand metrics, risk level, MOQ, and rule template back-reference.
grev.purchase.replenishment.rule Bulk-config rule template: scope (product/category + warehouse), safety stock settings, demand lookback, MOQ. Contains action_sync_to_orderpoints().
grev.purchase.replenishment.forecast Monthly forecast accuracy snapshot per orderpoint. Written by cron action_close_open_periods().

Key Fields — stock.warehouse.orderpoint

Field Description
grev_safety_stock_method Selection: fixed / pct / coverage
grev_safety_stock_qty Fixed safety stock quantity (method = fixed)
grev_safety_stock_pct Safety stock percentage (method = pct, default 20 %)
grev_safety_stock_days Safety stock days of coverage (method = coverage, default 7)
grev_demand_lookback_days Historical window for demand average (default 90 days)
grev_dynamic_safety_stock Computed safety stock qty (stored, indexed)
grev_avg_daily_demand Average units consumed per day (stored, indexed)
grev_coverage_days Estimated days of stock remaining (stored, indexed)
grev_min_order_qty MOQ enforced by _get_qty_to_order()
grev_risk_level Computed: stockout / low / optimal / overstock
grev_rule_template_id Many2one to grev.purchase.replenishment.rule (set null on delete)

Key Fields — grev.purchase.replenishment.rule

Field Description
name Template name (unique per warehouse + company)
warehouse_id Target warehouse
company_id Company (multi-company isolation)
product_id Single product scope (optional; takes priority over category)
product_category_id Category scope — applies to all storable products in category
safety_stock_method Same three-option selection as on the orderpoint
min_order_qty MOQ to stamp onto matched orderpoints
last_sync_date Datetime of last successful sync (read-only)
synced_orderpoint_count Computed: count of orderpoints linked to this template

Key Fields — grev.purchase.replenishment.forecast

Field Description
product_id Product (required)
warehouse_id Warehouse (required)
orderpoint_id FK to originating orderpoint (nullable — survives orderpoint deletion)
period_start / period_end Monthly period boundaries
forecasted_qty Replenishment qty captured at period start
actual_qty Actual outbound consumption written by cron after period closes
forecast_accuracy max(0, (1 − |error| / forecasted) × 100) — MAPE-based, stored

MOQ Override

_get_qty_to_order() is overridden on stock.warehouse.orderpoint:

def _get_qty_to_order(self, qty_in_progress_by_orderpoint=None):
    qty = super()._get_qty_to_order(...)
    if self.grev_min_order_qty and qty > 0.0:
        if qty < self.grev_min_order_qty:
            qty = self.grev_min_order_qty
    return qty

super() is always called first. MOQ only bumps up — it never forces an order for a product Odoo already considers adequately stocked. UoM rounding from _get_multiple_rounded_qty() still applies downstream.

Demand Computation

_compute_grev_demand_metrics() batches all orderpoints by (warehouse_id, demand_lookback_days) and issues one _read_group() query per batch against stock.move done records in outbound locations. This avoids N+1 queries when multiple orderpoints are recomputed together.

Scheduled Action

Cron Purpose
Replenishment Forecast — Close Open Periods Monthly. Calls grev.purchase.replenishment.forecast.action_close_open_periods(). Closes all periods whose period_end < today by querying actual outbound consumption and computing forecast_accuracy.

Integration Points

Optional upstream modules (graceful fallback if absent):

  • grev_od_purchase_budget_control — dashboard surfaces budget-blocked order counts when this module is installed.

Downstream modules that may consume this data:

  • grev_od_spend_analytics — replenishment spend analysis
  • grev_od_purchase_ai_assistant — AI-assisted replenishment recommendations

Note

All cross-module lookups use try/except KeyError guards so the module operates correctly as a standalone installation without any other Grevlin modules.

See Also

  • :doc:`../grev_od_purchase_budget_control/doc/index` — Budget Control for spend-limit-aware replenishment
  • :doc:`../grev_od_spend_analytics/doc/index` — Spend Analytics for replenishment KPI reporting
  • :doc:`../grev_od_purchase_ai_assistant/doc/index` — AI Assistant for predictive replenishment optimization
Odoo Proprietary License v1.0

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.

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 or have a question related to your purchase, please use the support page.
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