1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Checkout\Model;
- /**
- * Class TotalsInformationManagement
- */
- class TotalsInformationManagement implements \Magento\Checkout\Api\TotalsInformationManagementInterface
- {
- /**
- * Cart total repository.
- *
- * @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,
- \Magento\Checkout\Api\Data\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());
- $quote->getShippingAddress()->setCollectShippingRates(true)->setShippingMethod(
- $addressInformation->getShippingCarrierCode() . '_' . $addressInformation->getShippingMethodCode()
- );
- }
- $quote->collectTotals();
- return $this->cartTotalRepository->get($cartId);
- }
- /**
- * @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')
- );
- }
- }
- }
|