Auto-toggle supplier active flags based on stock, then reprice products from
the first-active supplier's cost × markup. For Magento 2 stores with
multi-supplier products and dynamic supplier-driven pricing.
You sell the same product through multiple suppliers in priority order:
S1 = Onlyda (your manufacturer; cheap; only ships from your own stock)
S2 = Auto Remote (drop-ship; more expensive; ships when Onlyda is out)
S3 = Remkeys (drop-ship fallback)
This module makes that workflow automatic:
- Auto-toggle: when Onlyda stock hits 0, flip S1's
activeflag off. The product now fulfills from S2 = Auto Remote. - Reprice: with S2 now first-active, recompute the customer-facing price
as
S2.cost × (1 + S2.markup / 100). Apply your configured rounding + anchor strategy. Write topriceand/orspecial_priceper your output target. - Audit: every flip + reprice is logged to
etechflow_supplier_autoflow_logso finance can trace why a price changed. - NDE integration: if you also run
etechflow/module-next-day-eligibility, the module synchronously triggers NDE's evaluator after every change.next_day_eligiblestays in sync with the active supplier — no event-bus relay required.
No supplier names, no attribute codes, no markup percentages are hardcoded.
All configuration lives in
Stores → Configuration → eTechFlow → Supplier Autoflow.
One slot per line, in priority order (top = highest priority):
S1|s1_active|s1|s1_cost|s1_markup
S2|s2_active|s2|s2_cost|s2_markup
S3|s3_active|s3|s3_cost|s3_markup
Format: label|active_attr|name_attr|cost_attr|markup_attr[|stock_source_or_qty_attr].
Name-based, not slot-position-based. Lists which supplier names get the auto-toggle behaviour:
Onlyda
OurOwnWarehouse
Other slots (drop-ship suppliers) stay manual-only. The merchant decides when to disable them.
Pick from: magento_qty, msi_default, msi_per_slot, per_slot_qty_attr,
disabled. MSI modes soft-detected — module installs and works on non-MSI
builds.
price— write to regular price only.special_price— write to special price only.special_price_with_anchor(recommended) — write computed value tospecial_price, writeprice = special_price × anchor_multiplier. Renders strikethrough on storefront + sale-pricing on Google Shopping.
2dp, 5p, 10p, 99p_ending, or none.
When every slot is inactive (all suppliers out): set product to out-of-stock, disable it entirely, or leave unchanged with a warning.
- Legacy stock event observer —
cataloginventory_stock_item_save_after. - MSI source-items plugin —
Magento\InventoryApi\Api\SourceItemsSaveInterface, soft-detected so non-MSI installs skip it cleanly. - Product-save observer — re-runs the pricing engine when a merchant manually flips a slot's active flag or changes cost/markup.
- Hourly cron — belt-and-braces safety net for any propagation hole.
- CLI —
bin/magento etechflow:autoflow:resync [--sku=...]for manual full-catalogue evaluation. - FPC tag invalidation —
cat_p_<id>clean after every price write, so customers see fresh HTML without a manualcache:flush.
When stock comes back (Onlyda restocked), the previously auto-toggled slot flips back to active and the product reprices from THAT slot's current cost — handles supplier cost changes on restock.
Configurable on/off — some merchants want one-way toggles only.
Every event writes to etechflow_supplier_autoflow_log with:
- Product ID + SKU
- Event type:
auto_toggle/reprice/no_active_supplier/error - Trigger source:
stock_save/msi_source_items_save/product_save/cron/cli_resync - Before/after active slot
- Before/after price + special_price
- Human-readable message
Read via the admin grid (v0.1.1+ — coming next) or directly via SQL.
etechflow/module-next-day-eligibility— when installed, Autoflow's active-flag changes automatically trigger NDE's eligibility recompute. Recommended together for stores running dynamic next-day rules.
v0.1.0 — initial release. Engine complete; admin audit-log grid lands in v0.1.1.