Out of Stock (OOS) Additional Days Configuration Guide
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
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_CUSTOMis 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β
| Priority | Level | Configuration Location | Overrides |
|---|---|---|---|
| 1 (Highest) | Combination | Product Edit β Combinations Tab | All below |
| 2 | Product | Product Edit β Estimated Delivery Tab | All below |
| 3 | Entity | Module Config β Section 2.3 | Global only |
| 4 (Lowest) | Global | Module Config β Section 2.3 | None |
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β
- Go to Modules β Module Manager
- Search for Estimated Delivery
- Click Configure
- 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)
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)
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
- Select Category from the method dropdown
- Use the category tree to navigate your store structure
- Enter OOS days for each category
- 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
- Select Supplier from the method dropdown
- Choose supplier from the list
- Set OOS days for that supplier
- 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
- Select Manufacturer / Brand from the method dropdown
- Choose manufacturer from the list
- Set OOS days for that brand
- 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β
- Go to Catalog β Products
- Edit the product you want to configure
- 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
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β
- Edit a product with combinations
- Scroll to Set Estimated Delivery settings by combination
- 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 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β
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:
- Configure OOS days at desired level (global/entity/product)
- Find a product with zero stock and sales enabled
- View product page on frontend
- 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:
- Check combination-level settings first (highest priority)
- Verify product-level OOS days (0 = inherit from below)
- Confirm entity-level configuration matches selected method
- 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:
- Go to Section 2.3
- Verify "Select the method" dropdown matches your configuration
- Ensure you're configuring the correct entity type
- 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β
-
Set a Global Default First
- Choose a conservative value (e.g., 7-10 days)
- Ensures all products have a baseline
-
Add Entity-Level Refinement
- Choose ONE entity method (category/supplier/manufacturer)
- Configure only entities that differ from global
-
Customize Exceptions
- Use product-level for outliers
- Use combination-level for variants with unique timing
-
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β
This section provides technical details for developers and system administrators who need to understand the underlying implementation.
Database Fieldsβ
| Table | Field | Description | Data Type |
|---|---|---|---|
ps_ed_prod | oos_add_days | Product-level OOS days | INT |
ps_ed_prod_combi | oos_add_days | Combination-level OOS days | INT |
ps_ed_cat | delay | Category OOS days | VARCHAR (supports ranges) |
ps_ed_supplier | delay | Supplier OOS days | VARCHAR (supports ranges) |
ps_ed_manufacturer | delay | Manufacturer OOS days | VARCHAR (supports ranges) |
Configuration Keysβ
| Configuration | Description | Type | Default |
|---|---|---|---|
ED_OOS | Global OOS additional days | STRING | 0 |
ED_ADD_OOS_DAYS_MODE | Entity method selection | INT | 0 |
ED_IGNORE_OOS_DAYS_CUSTOM | Skip OOS for customizable products | BOOL | false |
ED_DISABLE_OOS | Disable OOS calculations entirely | BOOL | false |
Mode Values:
0= Category1= Supplier2= 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 daysprocessDelayList(): Evaluates hierarchy and returns active valuegetDelaySourceList(): 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:
- Picking Days Configuration - Set preparation time per product/carrier
- Release Date Management - Configure product launch dates
- Restock Date Configuration - Set specific availability dates
- Customization Days - Add time for personalized products
- Special Messages - Display custom text for special date types
π Support & Resourcesβ
- Module Documentation: Full Guide
- Video Tutorials: Watch on YouTube
- Community Forum: Join Discussion
- Support Tickets: Contact Smart Modules
π Summaryβ
Key Takeaways:
- Hierarchy Matters: Combination > Product > Entity > Global
- Zero = Inherit: Setting 0 means "use next priority level"
- One Entity Method: Choose category, supplier, OR manufacturer
- Special Dates Override: Restock/Release dates take precedence over OOS days
- 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