Files

64 lines
1.8 KiB
PHP

<?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);
}
}