![]() 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/InventoryCatalog/Model/Product/SourceQuote/ |
<?php /** * Copyright © eComBricks. All rights reserved. * See LICENSE.txt for license details. */ namespace Ecombricks\InventoryCatalog\Model\Product\SourceQuote; /** * Product source quote totals converter */ class TotalsConverter { /** * Totals factory * * @var \Magento\Quote\Api\Data\TotalsInterfaceFactory */ protected $totalsFactory; /** * Data object helper * * @var \Magento\Framework\Api\DataObjectHelper */ protected $dataObjectHelper; /** * Segments converter * * @var \Magento\Quote\Model\Cart\TotalsConverter */ protected $segmentsConverter; /** * Item converter * * @var \Magento\Quote\Model\Cart\Totals\ItemConverter */ protected $itemConverter; /** * Constructor * * @param \Magento\Quote\Api\Data\TotalsInterfaceFactory $totalsFactory * @param \Magento\Framework\Api\DataObjectHelper $dataObjectHelper * @param \Magento\Quote\Model\Cart\TotalsConverter $segmentsConverter * @param \Magento\Quote\Model\Cart\Totals\ItemConverter $itemConverter * @return void */ public function __construct( \Magento\Quote\Api\Data\TotalsInterfaceFactory $totalsFactory, \Magento\Framework\Api\DataObjectHelper $dataObjectHelper, \Magento\Quote\Model\Cart\TotalsConverter $segmentsConverter, \Magento\Quote\Model\Cart\Totals\ItemConverter $itemConverter ) { $this->totalsFactory = $totalsFactory; $this->dataObjectHelper = $dataObjectHelper; $this->segmentsConverter = $segmentsConverter; $this->itemConverter = $itemConverter; } /** * Get address data * * @param \Magento\Quote\Api\Data\AddressInterface $address * @return array */ protected function getAddressData($address) { $data = $address->getData(); unset($data[\Magento\Framework\Api\ExtensibleDataInterface::EXTENSION_ATTRIBUTES_KEY]); return $data; } /** * Get segments * * @param \Magento\Quote\Api\Data\AddressInterface $address * @return \Magento\Quote\Api\Data\TotalSegmentInterface[] */ protected function getSegments($address) { return $this->segmentsConverter->process($address->getTotals()); } /** * Get grand total * * @param \Magento\Quote\Api\Data\TotalsInterface $totals * @return float */ protected function getGrandTotal($totals) { $amount = $totals->getGrandTotal() - $totals->getTaxAmount(); return $amount > 0 ? $amount : 0; } /** * Get items * * @param \Magento\Quote\Api\Data\CartInterface $quote * @return \Magento\Quote\Api\Data\TotalsItemInterface[] */ protected function getItems($quote) { $items = []; foreach ($quote->getAllVisibleItems() as $index => $item) { $items[$index] = $this->itemConverter->modelToDataObject($item); } return $items; } /** * Process * * @param \Magento\Quote\Api\Data\CartInterface $quote * @return \Magento\Quote\Api\Data\TotalsInterface */ public function process($quote) { $totals = $this->totalsFactory->create(); $address = $quote->isVirtual() ? $quote->getBillingAddress() : $quote->getShippingAddress(); $this->dataObjectHelper->populateWithArray($totals, $this->getAddressData($address), \Magento\Quote\Api\Data\TotalsInterface::class); $totals->setTotalSegments($this->getSegments($address)); $totals->setGrandTotal($this->getGrandTotal($totals)); $totals->setItems($this->getItems($quote)); $totals->setItemsQty($quote->getItemsQty()); $totals->setBaseCurrencyCode($quote->getBaseCurrencyCode()); $totals->setQuoteCurrencyCode($quote->getQuoteCurrencyCode()); return $totals; } }