![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/magento/module-checkout/Model/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Checkout\Model; use Magento\Checkout\Api\Data\TotalsInformationInterface; /** * Class for management of totals information. */ class TotalsInformationManagement implements \Magento\Checkout\Api\TotalsInformationManagementInterface { /** * @var \Magento\Quote\Api\CartTotalRepositoryInterface */ protected $cartTotalRepository; /** * Quote repository. * * @var \Magento\Quote\Api\CartRepositoryInterface */ protected $cartRepository; /** * @param \Magento\Quote\Api\CartRepositoryInterface $cartRepository * @param \Magento\Quote\Api\CartTotalRepositoryInterface $cartTotalRepository * @codeCoverageIgnore */ public function __construct( \Magento\Quote\Api\CartRepositoryInterface $cartRepository, \Magento\Quote\Api\CartTotalRepositoryInterface $cartTotalRepository ) { $this->cartRepository = $cartRepository; $this->cartTotalRepository = $cartTotalRepository; } /** * @inheritDoc */ public function calculate( $cartId, TotalsInformationInterface $addressInformation ) { /** @var \Magento\Quote\Model\Quote $quote */ $quote = $this->cartRepository->get($cartId); $this->validateQuote($quote); if ($quote->getIsVirtual()) { $quote->setBillingAddress($addressInformation->getAddress()); } else { $quote->setShippingAddress($addressInformation->getAddress()); if ($addressInformation->getShippingCarrierCode() && $addressInformation->getShippingMethodCode()) { $shippingMethod = implode( '_', [$addressInformation->getShippingCarrierCode(), $addressInformation->getShippingMethodCode()] ); $quoteShippingAddress = $quote->getShippingAddress(); if ($quoteShippingAddress->getShippingMethod() && $quoteShippingAddress->getShippingMethod() !== $shippingMethod ) { $quoteShippingAddress->setShippingAmount(0); $quoteShippingAddress->setBaseShippingAmount(0); } $quoteShippingAddress->setCollectShippingRates(true) ->setShippingMethod($shippingMethod); } } $quote->collectTotals(); return $this->cartTotalRepository->get($cartId); } /** * Check if quote have items. * * @param \Magento\Quote\Model\Quote $quote * @throws \Magento\Framework\Exception\LocalizedException * @return void */ protected function validateQuote(\Magento\Quote\Model\Quote $quote) { if ($quote->getItemsCount() === 0) { throw new \Magento\Framework\Exception\LocalizedException( __('Totals calculation is not applicable to empty cart') ); } } }