![]() 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/Ecombricks/InventoryCheckout/Plugin/Model/ |
<?php /** * Copyright © eComBricks. All rights reserved. * See COPYING.txt for license details. */ namespace Ecombricks\InventoryCheckout\Plugin\Model; /** * Totals information management plugin */ class TotalsInformationManagement { /** * Cart repository * * @var \Magento\Quote\Api\CartRepositoryInterface */ protected $cartRepository; /** * Cart total repository * * @var \Magento\Quote\Api\CartTotalRepositoryInterface */ protected $cartTotalRepository; /** * Joint data * * @var \Ecombricks\InventoryQuote\Data\JointData */ protected $jointData; /** * Shipping method full code * * @var \Ecombricks\InventoryQuote\Data\ShippingMethodFullCode */ protected $shippingMethodFullCode; /** * Constructor * * @param \Magento\Quote\Api\CartRepositoryInterface $cartRepository * @param \Magento\Quote\Api\CartTotalRepositoryInterface $cartTotalRepository * @param \Ecombricks\InventoryQuote\Data\JointData $jointData * @param \Ecombricks\InventoryQuote\Data\ShippingMethodFullCode $shippingMethodFullCode * @return void */ public function __construct( \Magento\Quote\Api\CartRepositoryInterface $cartRepository, \Magento\Quote\Api\CartTotalRepositoryInterface $cartTotalRepository, \Ecombricks\InventoryQuote\Data\JointData $jointData, \Ecombricks\InventoryQuote\Data\ShippingMethodFullCode $shippingMethodFullCode ) { $this->cartRepository = $cartRepository; $this->cartTotalRepository = $cartTotalRepository; $this->jointData = $jointData; $this->shippingMethodFullCode = $shippingMethodFullCode; } /** * Get totals information shipping methods * * @param \Magento\Checkout\Api\Data\TotalsInformationInterface $addressInformation * @return array */ public function getTotalsInformationShippingMethods(\Magento\Checkout\Api\Data\TotalsInformationInterface $addressInformation) { $shippingMethods = []; $shippingCarrierCodes = $this->jointData->parse($addressInformation->getShippingCarrierCode()); $shippingMethodCodes = $this->jointData->parse($addressInformation->getShippingMethodCode()); foreach ($shippingCarrierCodes as $sourceCode => $shippingCarrierCode) { if (empty($shippingMethodCodes[$sourceCode])) { continue; } $shippingMethods[$sourceCode] = $this->shippingMethodFullCode->generate($shippingCarrierCode, $shippingMethodCodes[$sourceCode]); } return $shippingMethods; } /** * Calculate * * @param integer $cartId * @param \Magento\Checkout\Api\Data\TotalsInformationInterface $addressInformation * @return \Magento\Quote\Api\Data\TotalsInterface */ public function calculate($cartId, \Magento\Checkout\Api\Data\TotalsInformationInterface $addressInformation) { $quote = $this->cartRepository->get($cartId); if ($quote->getItemsCount() === 0) { throw new \Magento\Framework\Exception\LocalizedException( __('Totals calculation is not applicable to empty cart') ); } if ($quote->getIsVirtual()) { $quote->setBillingAddress($addressInformation->getAddress()); } else { $quote->setShippingAddress($addressInformation->getAddress()); $shippingAddress = $quote->getShippingAddress(); $shippingAddress->setCollectShippingRates(true); $shippingAddress->setShippingMethod($this->getTotalsInformationShippingMethods($addressInformation)); } $quote->collectTotals(); return $this->cartTotalRepository->get($cartId); } /** * Around calculate * * @param \Magento\Checkout\Model\TotalsInformationManagement $subject * @param \Closure $proceed * @param integer $cartId * @param \Magento\Checkout\Api\Data\TotalsInformationInterface $addressInformation * @return \Magento\Quote\Api\Data\TotalsInterface */ public function aroundCalculate( \Magento\Checkout\Model\TotalsInformationManagement $subject, \Closure $proceed, $cartId, \Magento\Checkout\Api\Data\TotalsInformationInterface $addressInformation ) { return $this->calculate($cartId, $addressInformation); } }