123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\InstantPurchase\Model\ShippingMethodChoose;
- use Magento\Customer\Model\Address;
- use Magento\Quote\Api\Data\ShippingMethodInterfaceFactory;
- /**
- * Creates special shipping method to choose cheapest shipping method after quote creation.
- */
- class CheapestMethodChooser implements ShippingMethodChooserInterface
- {
- /**
- * @var ShippingMethodInterfaceFactory
- */
- private $shippingMethodFactory;
- /**
- * @var CarrierFinder
- */
- private $carrierFinder;
- /**
- * CheapestMethodChooser constructor.
- * @param ShippingMethodInterfaceFactory $shippingMethodFactory
- * @param CarrierFinder $carrierFinder
- */
- public function __construct(
- ShippingMethodInterfaceFactory $shippingMethodFactory,
- CarrierFinder $carrierFinder
- ) {
- $this->shippingMethodFactory = $shippingMethodFactory;
- $this->carrierFinder = $carrierFinder;
- }
- /**
- * @inheritdoc
- */
- public function choose(Address $address)
- {
- $shippingMethod = $this->shippingMethodFactory->create()
- ->setCarrierCode(DeferredShippingMethodChooserInterface::CARRIER)
- ->setMethodCode(CheapestMethodDeferredChooser::METHOD_CODE)
- ->setMethodTitle(__('Cheapest price'))
- ->setAvailable($this->areShippingMethodsAvailable($address));
- return $shippingMethod;
- }
- /**
- * Checks if any shipping method available.
- *
- * @param Address $address
- * @return bool
- */
- private function areShippingMethodsAvailable(Address $address): bool
- {
- $carriersForAddress = $this->carrierFinder->getCarriersForCustomerAddress($address);
- return !empty($carriersForAddress);
- }
- }
|