123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\InstantPurchase\Model\ShippingMethodChoose;
- use Magento\Quote\Model\Quote\Address;
- use Magento\Quote\Model\Quote\Address\Rate;
- /**
- * Choose cheapest shipping method for defined quote.
- */
- class CheapestMethodDeferredChooser implements DeferredShippingMethodChooserInterface
- {
- const METHOD_CODE = 'cheapest';
- /**
- * @inheritdoc
- */
- public function choose(Address $address)
- {
- $address->setCollectShippingRates(true);
- $address->collectShippingRates();
- $shippingRates = $address->getAllShippingRates();
- if (empty($shippingRates)) {
- return null;
- }
- $cheapestRate = $this->selectCheapestRate($shippingRates);
- return $cheapestRate->getCode();
- }
- /**
- * Selects shipping price with minimal price.
- *
- * @param Rate[] $shippingRates
- * @return Rate
- */
- private function selectCheapestRate(array $shippingRates) : Rate
- {
- $rate = array_shift($shippingRates);
- foreach ($shippingRates as $tmpRate) {
- if ($tmpRate->getPrice() < $rate->getPrice()) {
- $rate = $tmpRate;
- }
- }
- return $rate;
- }
- }
|