| Current Path : /home/rtorresani/www/vendor/magento/module-checkout/Model/ |
| Current File : //home/rtorresani/www/vendor/magento/module-checkout/Model/TotalsInformationManagement.php |
<?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')
);
}
}
}