Skip to main content

Out of Stock (OOS) Additional Days Configuration Guide

Terminology

Throughout this guide, we'll use OOS as shorthand for Out of Stock. This refers to products that have no available inventory but are still allowed to be sold (also known as backorder products).

πŸ“‹ Introduction​

When your store allows customers to purchase products that are temporarily out of stock, you need to add extra time to your delivery estimates to account for restocking. The Estimated Delivery module provides a sophisticated system to configure these additional days at multiple levels, from global defaults to individual product combinations.

What You'll Learn​

  • How the OOS days hierarchy system works
  • Configuring global OOS delay settings
  • Setting entity-specific delays (category, supplier, manufacturer)
  • Product and combination-level customization
  • Advanced range configuration (Beta)
  • Real-world use cases and best practices

🎯 Understanding the OOS Days System​

When OOS Days Apply​

Additional OOS days are added to delivery calculations only when:

βœ… Product has zero stock available
βœ… Store allows sales without stock (backorder enabled)
βœ… Product is not excluded from Estimated Delivery
βœ… Product has no specific availability date set
βœ… Product has no release date set

Important Exceptions

OOS days are NOT applied when:

  • Product has a defined restock date (Available Date)
  • Product has a release date (upcoming launch)
  • Product has undefined delivery enabled
  • Configuration ED_IGNORE_OOS_DAYS_CUSTOM is enabled AND product is customizable

πŸ“Š Priority Hierarchy System​

The module uses a cascading priority system where more specific settings override general ones. The system evaluates in this order:

Priority Levels​

PriorityLevelConfiguration LocationOverrides
1 (Highest)CombinationProduct Edit β†’ Combinations TabAll below
2ProductProduct Edit β†’ Estimated Delivery TabAll below
3EntityModule Config β†’ Section 2.3Global only
4 (Lowest)GlobalModule Config β†’ Section 2.3None
Zero Value Behavior

Setting a value to 0 (zero) means "ignore this level and check the next priority level." It does NOT mean "no additional days" β€” it means "defer to lower priority setting."


🌍 Global OOS Configuration​

Accessing Global Settings​

  1. Go to Modules β†’ Module Manager
  2. Search for Estimated Delivery
  3. Click Configure
  4. In the left sidebar, click 2.3 Additional delivery days for products Out of Stock

Configuring the Global Delay​

In the Global setting section, you'll find:

Field: Extra delay for products Out of Stock
Input: Number of days or range (e.g., 3 or 3-6)

Example values:
- Single value: 5 (adds 5 days)
- Range: 3-7 (adds minimum 3, maximum 7 days)
Range Support (Beta)

The range format (e.g., 3-6) allows you to define both minimum and maximum delivery times. This creates a delivery window like "Estimated delivery: January 15-19" instead of a single date.

Current Status: Range input is stable but marked as Beta for priority support. Roadmap indicates full range support across all date modifiers in version 4.

When to Use Global Settings​

Use global OOS days when:

  • Most products have similar restocking times
  • You want a simple, store-wide default
  • You're just starting configuration (set global first, then customize)

🏒 Entity-Level OOS Configuration​

Entity-level settings allow you to group products by their business characteristics and apply specific OOS delays.

Selecting the Entity Method​

In Section 2.3, under Additional delivery days by category, brand or supplier:

Field: Select the method
Options:

  • Category (Mode 0)
  • Supplier (Mode 1)
  • Manufacturer / Brand (Mode 2)
Single Method Only

You can only select ONE entity method at a time. This setting applies store-wide and affects all products. Choose the method that best matches your business workflow.

Configuration by Entity Type​

Option A: By Category​

Best for: Stores where restocking time varies by product type

Access: Section 2.3 β†’ Category tree

  1. Select Category from the method dropdown
  2. Use the category tree to navigate your store structure
  3. Enter OOS days for each category
  4. Products use their default category for lookups

Example Use Case:

Electronics (7 days) - complex supply chain
Clothing (3 days) - local warehouse
Perishables (0 days - disabled) - no backorders allowed

Technical Note: Uses id_category_default from product data
Database Field: ed_cat.delay


Option B: By Supplier​

Best for: Dropshipping stores or businesses with multiple suppliers

Access: Section 2.3 β†’ Supplier selection

  1. Select Supplier from the method dropdown
  2. Choose supplier from the list
  3. Set OOS days for that supplier
  4. All products from this supplier inherit these settings

Example Use Case:

Local Supplier A (2 days) - fast restock
International Supplier B (14 days) - overseas shipping
Dropship Partner C (7 days) - order-on-demand

Technical Note: Uses id_supplier from product data
Database Field: ed_supplier.delay


Option C: By Manufacturer/Brand​

Best for: Brand-focused stores where manufacturers control restocking

Access: Section 2.3 β†’ Manufacturer selection

  1. Select Manufacturer / Brand from the method dropdown
  2. Choose manufacturer from the list
  3. Set OOS days for that brand
  4. All products from this manufacturer use these settings

Example Use Case:

Premium Brand X (10 days) - made-to-order items
Fast Fashion Brand Y (5 days) - frequent restocking
Local Artisan Z (21 days) - handmade products

Technical Note: Uses id_manufacturer from product data
Database Field: ed_manufacturer.delay


πŸ“¦ Product-Level OOS Configuration​

Product-level settings override all entity and global configurations.

Accessing Product Settings​

  1. Go to Catalog β†’ Products
  2. Edit the product you want to configure
  3. Scroll to the Estimated Delivery section (or click the module tab if available)

Configuring Product OOS Days​

Field: Out of stock additional days
Input: Number of days (integer)

Behavior:

  • Value > 0: Uses this value (overrides entity and global)
  • Value = 0: Ignores product setting, checks entity level
  • Empty: Same as 0
Override Information

The interface shows: "This setting overrides all configurations made globally on the module configuration page."

This means product-level OOS days take precedence over global and entity settings.

When to Use Product-Level Settings​

Set product-specific OOS days when:

  • Individual products have unique restocking schedules
  • You're testing different delivery times
  • Specific items require special handling
  • Supplier relationships vary per product

🎨 Combination-Level OOS Configuration​

For products with combinations (size, color, etc.), you can set OOS days per combination.

Accessing Combination Settings​

  1. Edit a product with combinations
  2. Scroll to Set Estimated Delivery settings by combination
  3. Find the OOS Days column in the combinations table

Configuring Combination OOS Days​

Each combination row has:

  • Picking Days: Preparation time
  • OOS Days: Out of stock additional time
  • Customization Days: Extra time for personalization
  • Restock Date: Specific availability date
  • Release Date: Product launch date

OOS Days Behavior:

  • Value > 0: Uses combination-specific OOS days
  • Value = 0: Falls back to product-level settings
Combination Priority

Combination settings have the highest priority in the entire hierarchy. Use this for variants with significantly different restocking times (e.g., rare sizes, special colors).

Real-World Example​

Product: T-Shirt
Standard OOS: 5 days

Combinations:

Size S, Color Red β†’ 5 days (uses product default)
Size M, Color Blue β†’ 0 (uses product default)
Size XXL, Color Black β†’ 14 days (rare size, longer restock)

Technical Note: Uses id_product_attribute for lookups
Database Field: ed_prod_combi.oos_add_days


πŸ’Ό Real-World Use Cases​

Use Case 1: Weekly Supplier Restocking​

Scenario: Electronics store with weekly supplier deliveries

Configuration:

  • Global OOS: 7 days (one week default)
  • Supplier "TechDistributor": 3 days (faster restock)
  • Product "Gaming Monitor XL": 14 days (special order item)

Result: Most products show 7-day delay, items from TechDistributor show 3 days, and the special monitor always shows 14 days regardless of supplier.


Use Case 2: Handmade Products with Variations​

Scenario: Artisan shop selling custom jewelry

Configuration:

  • Global OOS: 10 days (average production time)
  • Manufacturer "LocalArtisan": 21 days (handmade items)
  • Product "Custom Ring" β†’ Combination "Gold": 30 days (rare material)

Result: Standard silver rings show 21 days, gold variants show 30 days due to combination-level override.


Use Case 3: Dropshipping with Multiple Regions​

Scenario: International dropshipping store

Configuration:

  • Global OOS: 10 days (safety buffer)
  • Category "US Products": 5 days (domestic)
  • Category "EU Products": 7 days (cross-border)
  • Category "Asia Products": 21 days (international shipping)

Result: Delivery estimates automatically adjust based on product origin.


Use Case 4: Seasonal Inventory Management​

Scenario: Fashion store with seasonal collections

Configuration:

  • Global OOS: 7 days (default)
  • Category "Winter Collection": 3 days (in-season, frequent restock)
  • Category "Summer Collection": 14 days (off-season, rare restock)
  • Product-specific: Override individual bestsellers to 1 day

Result: Dynamic delivery times reflecting actual inventory patterns.


βš™οΈ Advanced Configuration​

Range-Based Delivery Windows​

Beta Feature

Range input is currently available only for global OOS settings in Section 2.3. Support for ranges in entity, product, and combination levels is planned for version 4.

Input Format: min-max (e.g., 3-7)

How It Works:

  • Creates a delivery date range instead of single date
  • Minimum value: earliest possible delivery
  • Maximum value: latest expected delivery
  • Display example: "Delivery between January 15-22"

When to Use Ranges:

  • Variable supplier lead times
  • Uncertain restocking schedules
  • Buffer for external factors (customs, weather)
  • Setting customer expectations with flexibility

Example Configuration:

Global OOS: 5-10 days
Result: "Delivery estimated between Jan 20-25"

Ignoring OOS Days for Customizable Products​

Configuration: Advanced Options β†’ ED_IGNORE_OOS_DAYS_CUSTOM

When enabled, OOS days are not applied if the product:

  • Has customization fields (text, file upload, etc.)
  • Is marked as customizable in PrestaShop

Use Case: Customized products already have long production times via "Customization Days" setting, and you don't want to stack OOS delays on top.


Special Date Interactions​

Restock Date (Available Date)​

If a product has a specific restock date configured:

  • OOS days are ignored completely
  • The module uses the exact date instead
  • Useful for planned inventory arrivals

Configure: Product Edit β†’ Restock Date field (in combination settings)

See Also: Restock Date Configuration Guide (link to separate guide)


Release Date​

If a product has a release date (upcoming launch):

  • OOS days are ignored completely
  • The module uses the release date as earliest delivery
  • Perfect for pre-orders and product launches

Configure: Product Edit β†’ Release Date field (in combination settings)

See Also: Release Date Configuration Guide (link to separate guide)


Undefined Delivery​

Products marked with undefined delivery:

  • Skip all date calculations including OOS days
  • Show custom message instead of date
  • Use for products with unpredictable availability

Configure: Section 2.6 β†’ Undefined OOS Delivery Dates (by Supplier)

See Also: Undefined Delivery Guide (link to separate guide)


πŸ” Troubleshooting & Validation​

Verifying Your Configuration​

Test Workflow:

  1. Configure OOS days at desired level (global/entity/product)
  2. Find a product with zero stock and sales enabled
  3. View product page on frontend
  4. Check that delivery date includes additional OOS days

Expected Behavior:

  • In-stock products: Base delivery time only
  • OOS products: Base time + OOS additional days

Common Issues​

Issue 1: OOS Days Not Applied​

Symptoms: Delivery date doesn't change for OOS products

Checklist:

  • Product has zero stock (quantity = 0)
  • PrestaShop allows sales without stock (product settings)
  • Product is not excluded from Estimated Delivery (Product Edit β†’ ED section)
  • Product has no restock date or release date set
  • Entity method (category/supplier/manufacturer) is correctly selected
  • Product's entity (category/supplier/manufacturer) has OOS days configured

Issue 2: Wrong OOS Days Value Used​

Symptoms: Delivery shows unexpected number of additional days

Diagnosis:

  1. Check combination-level settings first (highest priority)
  2. Verify product-level OOS days (0 = inherit from below)
  3. Confirm entity-level configuration matches selected method
  4. Review global OOS days as final fallback

Remember: First non-zero value in hierarchy wins.


Issue 3: Category/Supplier/Manufacturer Settings Ignored​

Symptoms: Entity-level configuration has no effect

Solution:

  1. Go to Section 2.3
  2. Verify "Select the method" dropdown matches your configuration
  3. Ensure you're configuring the correct entity type
  4. Remember: Only ONE entity method can be active at a time

Debug Mode​

For advanced troubleshooting, enable debug mode:

Access: Module Configuration β†’ Advanced Options β†’ Debug Mode

This displays internal calculation data on the frontend, showing:

  • Which OOS value is being used
  • Priority level that provided the value
  • Complete calculation breakdown

πŸ“š Best Practices​

Starting Your Configuration​

  1. Set a Global Default First

    • Choose a conservative value (e.g., 7-10 days)
    • Ensures all products have a baseline
  2. Add Entity-Level Refinement

    • Choose ONE entity method (category/supplier/manufacturer)
    • Configure only entities that differ from global
  3. Customize Exceptions

    • Use product-level for outliers
    • Use combination-level for variants with unique timing
  4. Test Thoroughly

    • Verify calculations on frontend
    • Check multiple product types
    • Test with and without stock

Performance Considerations​

  • Cache System: Module caches OOS day lookups for performance
  • Database Queries: Hierarchy minimizes database calls
  • Multi-shop: Configure per shop for regional differences

Maintenance & Updates​

Regular Review:

  • Audit OOS day accuracy quarterly
  • Update based on actual supplier performance
  • Adjust for seasonal variations

Documentation:

  • Keep internal notes on why specific products have custom OOS days
  • Document entity method choice reasoning
  • Track changes over time

πŸ”§ Technical Reference​

For Developers

This section provides technical details for developers and system administrators who need to understand the underlying implementation.

Database Fields​

TableFieldDescriptionData Type
ps_ed_prodoos_add_daysProduct-level OOS daysINT
ps_ed_prod_combioos_add_daysCombination-level OOS daysINT
ps_ed_catdelayCategory OOS daysVARCHAR (supports ranges)
ps_ed_supplierdelaySupplier OOS daysVARCHAR (supports ranges)
ps_ed_manufacturerdelayManufacturer OOS daysVARCHAR (supports ranges)

Configuration Keys​

ConfigurationDescriptionTypeDefault
ED_OOSGlobal OOS additional daysSTRING0
ED_ADD_OOS_DAYS_MODEEntity method selectionINT0
ED_IGNORE_OOS_DAYS_CUSTOMSkip OOS for customizable productsBOOLfalse
ED_DISABLE_OOSDisable OOS calculations entirelyBOOLfalse

Mode Values:

  • 0 = Category
  • 1 = Supplier
  • 2 = Manufacturer

PHP Class References​

DeliveryProduct Class​

Property: $oos_add_days
Type: mixed (int or range string)
Purpose: Stores calculated OOS days for current product/combination

Key Methods:

  • getProductAdditionalDays(): Retrieves and caches OOS days
  • processDelayList(): Evaluates hierarchy and returns active value
  • getDelaySourceList(): Returns ordered list of methods to check

EDelivery Class​

Method: processPicking()
Purpose: Applies OOS days to shipping date calculation

Logic:

if ($this->dp->isOOS 
&& !$this->dp->is_undefined_delivery
&& !$ignore_oos_days_custom
&& !$this->dp->is_release
&& !$this->dp->is_available) {
$this->addToTotalDays($total_add_days, $this->dp->oos_add_days);
}

SQL Query Examples​

Get Product OOS Days:

SELECT oos_add_days 
FROM ps_ed_prod
WHERE id_product = 123
AND id_shop = 1;

Get Category OOS Days:

SELECT delay AS oos_add_days 
FROM ps_ed_cat
WHERE id_category = 45
AND id_shop = 1;

Get All Combinations with Custom OOS:

SELECT p.id_product, p.name, pc.id_product_attribute, pc.oos_add_days
FROM ps_ed_prod_combi pc
INNER JOIN ps_product_lang p ON pc.id_product = p.id_product
WHERE pc.oos_add_days > 0
AND p.id_shop = 1;

Hierarchy Evaluation Flow​

The module follows this evaluation pattern:

// Pseudo-code representation
$sources = [
'getGlobalOOS', // Priority 4 (lowest)
'getCatOOS', // Priority 3 (if mode = 0)
'getSupplierOOS', // Priority 3 (if mode = 1)
'getManufacturerOOS', // Priority 3 (if mode = 2)
'getProductAdditional', // Priority 2
'getCombiAdditional' // Priority 1 (highest)
];

foreach ($sources as $method) {
$value = $this->$method();
if ($value !== false && $value > 0) {
return $value; // First non-zero wins
}
}

πŸŽ“ Next Steps​

Now that you understand OOS day configuration, explore related features:


πŸ“ž Support & Resources​


πŸ“ Summary​

Key Takeaways:

  1. Hierarchy Matters: Combination > Product > Entity > Global
  2. Zero = Inherit: Setting 0 means "use next priority level"
  3. One Entity Method: Choose category, supplier, OR manufacturer
  4. Special Dates Override: Restock/Release dates take precedence over OOS days
  5. Range Support: Beta feature available for global settings, full support coming in v4

Quick Reference:

Global Settings β†’ Section 2.3
Entity Settings β†’ Section 2.3 (after selecting method)
Product Settings β†’ Catalog β†’ Products β†’ Edit β†’ Estimated Delivery tab
Combination Settings β†’ Product Edit β†’ Combinations section

Last updated: 2024 | Module Version: 3.9.14+ | Compatible with PrestaShop 1.6-8.x