Feat: Hiding unused shipping types and removing unused fulfillment types

This commit is contained in:
2026-09-29 00:43:48 +03:00
parent d6c6bf6a1c
commit 359b645c62
7 changed files with 46 additions and 133 deletions
@@ -3,18 +3,14 @@
namespace Modules\Core\Shipping\Contracts;
/**
* Optional contract a shipping rate driver implements to declare whether
* it fulfils via carrier delivery or in-store pickup — e.g.
* Every shipping rate driver this module registers implements this to
* declare whether it fulfils via carrier delivery or in-store pickup —
* Modules\Core\Shipping\Carriers\Acs\AcsRateDriver and BoxNowRateDriver
* are unambiguously carrier-only, so this is a hardcoded fact about the
* driver, not something a merchant should have to configure per row.
*
* table-rate-shipping's own generic drivers (flat-rate, ship-by,
* free-shipping) don't implement this — they're genuinely ambiguous (a
* merchant could configure one for either carrier delivery or store
* pickup), so Modules\Core\Shipping\Support\FulfillmentType::resolve()
* falls back to ShippingMethod.data['fulfillment_type'] (still merchant-
* overridable) only for drivers that don't implement this contract.
* are unambiguously carrier-only, Modules\Core\Shipping\Carriers\
* StorePickup\StorePickupRateDriver unambiguously store-pickup, so this
* is a hardcoded fact about each driver, never something a merchant
* configures per row. See Modules\Core\Shipping\Support\FulfillmentType::
* resolve(), the single source of truth this feeds.
*/
interface DeclaresFulfillmentType
{