Next Day Shipping Eligibility for Magento 2
etechflow/module-next-day-eligibility
Removes next-day and express shipping methods from checkout when cart items are out of stock or flagged as backorder, keeping delivery promises accurate through an automatic stock observer.
Build Tests
Code Quality
Tested on Magento 2.4.9
Recent Test History
Each release is tested against the latest Magento version at that time.
Top Contributors
View LeaderboardLooking for Contributors
Composer installation fails. Your contribution could help the entire Magento community!
Share This Module's Status
README
Loaded from GitHubNext Day Shipping Eligibility for Magento 2
Comprehensive stock-aware shipping restrictions in one module.
Two independent rules, one admin section, one license:
- Next-day eligibility (auto-managed) โ removes configured next-day shipping methods from checkout when any cart item is out of stock or otherwise ineligible. Eligibility is auto-maintained by a stock observer; nothing for the merchant to flip per product.
- Backorder express restriction (opt-in, v1.1.0+) โ removes any express methods you list when the cart contains backorder items (out of stock with backorders enabled, or partially short). Useful for merchants who explicitly flag pre-order / made-to-order products and don't want them sold with express delivery.
Both rules raise a single dismissible checkout banner with merchant-customisable wording. Both respect the Drop-Ship Eligible exemption.
Stock-aware. Drop-ship aware. Hyvรค compatible. Works with Magento Open Source and Adobe Commerce.
What's new
The version-by-version history lives in CHANGELOG.md. Highlights of the most recent releases:
- v1.4.0 โ New per-product
Force Standard Shipping Onlyflag. Tick it on the product edit page (under eTechFlow Shipping) to hard-disable next-day shipping for that product regardless of stock state. For bulky / hazmat / fragile / made-to-order items. Ships with a CLI verification command:bin/magento etechflow:nde:verify --sku=<sku>runs an end-to-end check that the observer + evaluator pipeline is wired correctly. - v1.3.0 โ Module status banner at the top of admin config (shows whether the module is actually active), PDP badge visibility toggle, drop-ship grid filter, inline tooltips on every field.
- v1.2.0 โ Shipping method fields are now multi-select dropdowns auto-populated from your active shipping methods โ merchants no longer need to know technical codes.
- v1.1.0 โ Absorbed the deprecated
ETechFlow_BackorderShippingRestrictormodule's features as an opt-in "Backorder Express Restriction" toggle. The bundle is now 2 modules (NDE + BackorderEtaDisplay).
What it solves
Merchants who advertise next-day delivery hit the same problem from two directions:
| Scenario | Without the module | With the module |
|---|---|---|
| Customer picks "Next Day" on an out-of-stock item | Order ships a week late, refund + 1-star review | Next-day automatically hidden at checkout; banner explains why |
| Customer picks "Express" on a pre-order / backorder item | Same problem โ supplier ETA is two weeks, customer paid ยฃ15 for next-day | Express methods automatically hidden when the toggle is enabled |
| Drop-shipped products with zero local stock | Marked out of stock, no Add to Cart button | Stay eligible โ supplier ships direct, backorders auto-enabled |
| Customer asks "where is my order?" | Volume support tickets | Banner sets the expectation at checkout |
Requirements
| Magento | Open Source 2.4.4+ OR Adobe Commerce 2.4.4+ |
| PHP | 8.1, 8.2, 8.3, or 8.4 |
| Compatible themes | Luma (default) + Hyvรค |
Installation
Option A โ Composer (recommended)
composer require etechflow/module-next-day-eligibility:^1.1
bin/magento module:enable ETechFlow_NextDayEligibility
bin/magento setup:upgrade
bin/magento setup:di:compile
bin/magento cache:flush
Option B โ Manual (from zip)
-
Unzip
etechflow-module-next-day-eligibility-1.1.0.zipinto:<magento-root>/app/code/ETechFlow/NextDayEligibility/The directory MUST be named
ETechFlow(capital E, capital T, capital F) โ case-sensitive on Linux servers. -
Enable and set up:
bin/magento module:enable ETechFlow_NextDayEligibility bin/magento setup:upgrade bin/magento setup:di:compile bin/magento cache:flush -
Verify:
bin/magento module:status | grep NextDayEligibility
After install โ quick setup
Open the admin and go to Stores โ Configuration โ eTechFlow โ Next Day Eligibility.
Step 1 โ License
License โ License Key: paste the key from your purchase email and save.
Don't have a key yet? Dev/staging hosts are free. Any URL matching
localhost,*.test,*.local,staging.*,dev.*,*.magento.cloud, ngrok tunnels, or RFC 1918 IPs runs at full features without a key. For non-standard dev domains, set License โ Production Environment = No instead.
Step 2 โ Enable the module
General Settings โ Enable Module = Yes โ save.
Step 3 โ Pick your next-day shipping methods
General Settings โ Next Day Shipping Methods is a multi-select dropdown. The list is auto-populated from your store's currently active shipping methods (the same list shown under Stores โ Configuration โ Sales โ Shipping Methods). Tick the methods you want removed for ineligible carts โ typically just your paid next-day or express options. Hold Ctrl/Cmd to select multiple. Save.
โ ๏ธ Important โ keep at least one fallback method unticked. Don't tick every option. The intended pattern is to tick only your paid express / next-day methods so a standard or free option always stays available for ineligible carts. If you accidentally select everything, a safety net returns the original rates and logs a warning to
var/log/system.logto prevent a stuck checkout โ but that's a guardrail, not a config strategy. Seedocs/USER_GUIDE.md"Configuration trap" for the typical UK setups.
That's the core feature done. Browse to a product detail page โ you'll see the green "Next Day Eligible" / grey "Standard Delivery Only" badge under the price.
Step 4 โ (optional) Enable Backorder Express Restriction
If you also want to block express shipping on backorder items:
Backorder Express Restriction:
- Set Restrict Express Methods on Backorder = Yes
- Express Methods to Restrict on Backorder โ same multi-select pattern as the next-day field above, but stored independently. Tick whichever methods should disappear when a backorder item is in the cart. Can overlap with or differ from your next-day selection.
- Leave Skip Drop-Ship Products = Yes (default) so drop-ship products bypass this rule.
Step 5 โ (optional) Customise the checkout banner
Checkout Notice:
- Show Notice at Checkout = Yes (default)
- Notice Style โ warning (amber), info (blue), or error (red)
- Notice Title โ bold heading, e.g. "Next day delivery unavailable"
- Notice Message โ body copy, e.g. "One or more items in your cart is not eligible for next day delivery."
All four fields can be overridden per store view for multi-brand setups.
Step 6 โ (optional) Hide or simplify the product-page badge
General Settings โ Show Badge on Product Page:
- Both (default) โ green "Next Day Eligible" + grey "Standard Delivery Only" badges
- Eligible only โ show the green badge, hide the grey one (recommended if you don't want to draw negative attention to ineligible products)
- Never โ no PDP badge at all; the shipping restriction at checkout still works
Per-product overrides (v1.4.0+)
Two checkboxes on the product edit page (under the eTechFlow Shipping attribute group) let you override the auto-calculation per product:
| Attribute | What it does | When to use |
|---|---|---|
| Drop-Ship Eligible | Always eligible regardless of local stock โ supplier ships direct | Products fulfilled by a same-day-shipping supplier |
| Force Standard Shipping Only (new in v1.4.0) | Always ineligible regardless of stock โ only standard shipping shown at checkout | Bulky / hazmat / fragile / made-to-order / promotional items |
Precedence inside the eligibility evaluator:
Force Standard Shipping Only = Yesโ always ineligible (merchant override wins)Drop-Ship Eligible = Yesโ always eligible- Otherwise: stock check (
qty > 0 AND in stockโ eligible)
Both flags work as Magento mass-action targets โ see "Tips" below.
Tips for managing the catalogue
Bulk-flag drop-ship products. In Catalog โ Products, filter the grid (now filterable by Drop-Ship Eligible โ new in v1.3.0), tick the products, and use Actions โ Update Attributes โ Drop-Ship Eligible = Yes. Magento applies it to every selected product in one click.
Bulk-flag force-standard-only products. Same workflow with the new attribute: filter by Force Standard Shipping Only = No, narrow further (e.g. by category = "Furniture" or by weight), tick all, Actions โ Update Attributes โ Force Standard Shipping Only = Yes. Useful for one-pass classification of your bulky-item or hazmat catalog.
Bulk imports. If you're using a CSV import or custom script to load thousands of products, set $product->setData('_etechflow_skip_eligibility', true) before each save to bypass the per-product observer. Then batch-evaluate after the import completes via \ETechFlow\NextDayEligibility\Model\EligibilityEvaluator::evaluateById(...). See docs/USER_GUIDE.md "Bulk imports โ the escape hatch" for the full pattern.
Module status banner. At the top of the NDE admin config section is a coloured banner showing whether the module is active, idle, or has a licence problem. Read it first if anything seems off โ most "I configured it but nothing happens" cases are answered by that banner.
Documentation
| File | Read when |
|---|---|
README.md (this file) |
First โ overview + install + quick setup |
docs/USER_GUIDE.md |
Full reference: every admin field, every scenario, troubleshooting, known limitations |
CHANGELOG.md |
What changed in each version |
LICENSE.txt |
Licence terms |
Support
- Email: support@etechflow.com โ typically responds within one business day
- Website: https://etechflow.com
License
Proprietary โ see LICENSE.txt. Licensed per Magento installation, with unlimited dev/staging environments under the same business entity.
To change your production domain (e.g. site migration), email support@etechflow.com with your old + new domain and order number. New key issued same business day.
This content is fetched directly from the module's GitHub repository. We are not the authors of this content and take no responsibility for its accuracy, completeness, or any consequences arising from its use.