Spamworldpro Mini Shell
Spamworldpro


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/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //home/corals/Ecombricks/InventoryCatalog/Model/Product/SourceQuoteManagement.php
<?php
/**
 * Copyright © eComBricks. All rights reserved.
 * See LICENSE.txt for license details.
 */
namespace Ecombricks\InventoryCatalog\Model\Product;

/**
 * Product source quote management
 */
class SourceQuoteManagement implements \Ecombricks\InventoryCatalog\Api\Product\SourceQuoteManagementInterface
{
    
    /**
     * Source manager
     * 
     * @var \Ecombricks\Inventory\Model\SourceManagement
     */
    protected $sourceManagement;
    
    /**
     * Source item management
     * 
     * @var \Ecombricks\InventoryInventorySales\Model\SourceItemManagement
     */
    protected $sourceItemManagement;
    
    /**
     * Product repository
     * 
     * @var \Magento\Catalog\Model\ProductRepository
     */
    protected $productRepository;
    
    /**
     * Product source quote object factory
     * 
     * @var \Ecombricks\InventoryCatalog\Api\Data\Product\SourceQuoteInterfaceFactory
     */
    protected $productSourceQuoteObjectFactory;
    
    /**
     * Quote factory
     * 
     * @var \Magento\Quote\Model\QuoteFactory
     */
    protected $quoteFactory;
    
    /**
     * Customer repository
     * 
     * @var \Magento\Customer\Api\CustomerRepositoryInterface
     */
    protected $customerRepository;
    
    /**
     * User context
     * 
     * @var \Magento\Authorization\Model\UserContextInterface
     */
    protected $userContext;
    
    /**
     * Store manager
     * 
     * @var \Magento\Store\Model\StoreManagerInterface
     */
    protected $storeManager;
    
    /**
     * Data object processor
     * 
     * @var \Magento\Framework\Reflection\DataObjectProcessor
     */
    protected $dataObjectProcessor;
    
    /**
     * Shipping rates converter
     * 
     * @var \Ecombricks\InventoryCatalog\Model\Product\SourceQuote\ShippingRatesConverter
     */
    protected $shippingRatesConverter;
    
    /**
     * Totals converter
     * 
     * @var \Ecombricks\InventoryCatalog\Model\Product\SourceQuote\TotalsConverter
     */
    protected $totalsConverter;
    
    /**
     * Constructor
     * 
     * @param \Ecombricks\Inventory\Model\SourceManagement $sourceManagement
     * @param \Ecombricks\InventoryInventorySales\Model\SourceItemManagement $sourceItemManagement
     * @param \Magento\Catalog\Model\ProductRepository $productRepository
     * @param \Ecombricks\InventoryCatalog\Api\Data\Product\SourceQuoteInterfaceFactory $productSourceQuoteObjectFactory
     * @param \Magento\Quote\Model\QuoteFactory $quoteFactory
     * @param \Magento\Customer\Api\CustomerRepositoryInterface $customerRepository
     * @param \Magento\Authorization\Model\UserContextInterface $userContext
     * @param \Magento\Store\Model\StoreManagerInterface $storeManager
     * @param \Magento\Framework\Reflection\DataObjectProcessor $dataObjectProcessor
     * @param \Ecombricks\InventoryCatalog\Model\Product\SourceQuote\ShippingRatesConverter $shippingRatesConverter
     * @param \Ecombricks\InventoryCatalog\Model\Product\SourceQuote\TotalsConverter $totalsConverter
     * @return void
     */
    public function __construct(
        \Ecombricks\Inventory\Model\SourceManagement $sourceManagement,
        \Ecombricks\InventoryInventorySales\Model\SourceItemManagement $sourceItemManagement,
        \Magento\Catalog\Model\ProductRepository $productRepository,
        \Ecombricks\InventoryCatalog\Api\Data\Product\SourceQuoteInterfaceFactory $productSourceQuoteObjectFactory,
        \Magento\Quote\Model\QuoteFactory $quoteFactory,
        \Magento\Customer\Api\CustomerRepositoryInterface $customerRepository,
        \Magento\Authorization\Model\UserContextInterface $userContext,
        \Magento\Store\Model\StoreManagerInterface $storeManager,
        \Magento\Framework\Reflection\DataObjectProcessor $dataObjectProcessor,
        \Ecombricks\InventoryCatalog\Model\Product\SourceQuote\ShippingRatesConverter $shippingRatesConverter,
        \Ecombricks\InventoryCatalog\Model\Product\SourceQuote\TotalsConverter $totalsConverter
    )
    {
        $this->sourceManagement = $sourceManagement;
        $this->sourceItemManagement = $sourceItemManagement;
        $this->productRepository = $productRepository;
        $this->productSourceQuoteObjectFactory = $productSourceQuoteObjectFactory;
        $this->quoteFactory = $quoteFactory;
        $this->customerRepository = $customerRepository;
        $this->userContext = $userContext;
        $this->storeManager = $storeManager;
        $this->dataObjectProcessor = $dataObjectProcessor;
        $this->shippingRatesConverter = $shippingRatesConverter;
        $this->totalsConverter = $totalsConverter;
    }
    
    /**
     * Get store
     * 
     * @return \Magento\Store\Api\Data\StoreInterface
     */
    protected function getStore()
    {
        return $this->storeManager->getStore();
    }
    
    /**
     * Get product
     * 
     * @param string $sku
     * @return \Magento\Catalog\Api\Data\ProductInterface
     */
    protected function getProduct($sku)
    {
        return $this->productRepository->get($sku);
    }
    
    /**
     * Get customer
     * 
     * @return \Magento\Customer\Api\Data\CustomerInterface|null
     */
    protected function getCustomer()
    {
        $customerId = ($this->userContext->getUserType() === \Magento\Authorization\Model\UserContextInterface::USER_TYPE_CUSTOMER) ? 
            $this->userContext->getUserId() : 
            null;
        if (!$customerId) {
            return null;
        }
        return $this->customerRepository->getById($customerId);
    }
    
    /**
     * Get request shipping method
     * 
     * @param array $request
     * @param string $sourceCode
     * @return string|null
     */
    protected function getRequestShippingMethod($request, $sourceCode)
    {
        $shippingMethod = null;
        if (!empty($request['shipping_methods'])) {
            $shippingMethods = $request['shipping_methods'];
            if (!empty($shippingMethods[$sourceCode])) {
                $shippingMethod = $shippingMethods[$sourceCode];
            }
        }
        return $shippingMethod;
    }
    
    /**
     * Get request object
     * 
     * @param array $request
     * @param string $sourceCode
     * @return \Magento\Framework\DataObject
     */
    protected function getRequestObject($request, $sourceCode)
    {
        return new \Magento\Framework\DataObject(array_merge($request, ['source' => $sourceCode]));
    }
    
    /**
     * Get source codes
     * 
     * @param string $sku
     * @param string $sourceCode
     * @param \Magento\Quote\Api\Data\AddressInterface $address
     * @param array $request
     * @return \Magento\Quote\Api\Data\CartInterface[]
     */
    protected function getSourceQuote($sku, $sourceCode, $address, $request)
    {
        $quote = $this->quoteFactory->create();
        $quote->setCurrentSourceCode($sourceCode);
        $quote->setStore($this->getStore());
        $customer = $this->getCustomer();
        if ($customer) {
            $quote->setCustomer($customer);
            $quote->setCustomerIsGuest(0);
        } else {
            $quote->setCustomerIsGuest(1);
        }
        $addressData = $this->dataObjectProcessor->buildOutputDataArray($address, \Magento\Quote\Api\Data\AddressInterface::class);
        $quote->getBillingAddress()->addData($addressData);
        $product = $this->getProduct($sku);
        if (!$product->isVirtual()) {
            $shippingAddress = $quote->getShippingAddress();
            $shippingAddress->addData($addressData);
            $shippingMethod = $this->getRequestShippingMethod($request, $sourceCode);
            if ($shippingMethod) {
                $shippingAddress->setSourceShippingMethod($sourceCode, $shippingMethod);
            }
            $shippingAddress->setCollectShippingRates(true);
        }
        $quoteItem = $quote->addProduct($product, $this->getRequestObject($request, $sourceCode));
        if (is_string($quoteItem)) {
            throw new \Magento\Framework\Exception\LocalizedException(__($quoteItem));
        }
        $quote->collectTotals();
        return $quote;
    }
    
    /**
     * Get source codes
     * 
     * @param string $sku
     * @param \Magento\Quote\Api\Data\AddressInterface $address
     * @param array $request
     * @return \Magento\Quote\Api\Data\CartInterface[]
     */
    protected function getSourceQuotes($sku, $address, $request)
    {
        $quotes = [];
        foreach ($this->sourceItemManagement->getCurrentStockSalableSourceCodes($sku) as $sourceCode) {
            $quotes[$sourceCode] = $this->getSourceQuote($sku, $sourceCode, $address, $request);
        }
        return $quotes;
    }
    
    /**
     * Get source quote shipping method
     * 
     * @param \Magento\Quote\Api\Data\CartInterface $quote
     * @return \Ecombricks\InventoryQuote\Api\Data\ShippingMethodInterface[]
     */
    protected function getSourceQuoteShippingMethod($quote)
    {
        if ($quote->isVirtual()) {
            return null;
        }
        return $quote->getShippingAddress()->getSourceShippingMethod($quote->getCurrentSourceCode());
    }
    
    /**
     * Prepare request
     * 
     * @param mixed $request
     * @return array
     */
    protected function prepareRequest($request)
    {
        if (!is_array($request)) {
            return [];
        }
        return $request;
    }
    
    /**
     * Get list
     * 
     * @param string $sku
     * @param \Magento\Quote\Api\Data\AddressInterface $address
     * @param mixed $request
     * @return \Ecombricks\InventoryCatalog\Api\Data\Product\SourceQuoteInterface[]
     */
    public function getList($sku, $address, $request = [])
    {
        $productSourceQuotes = [];
        $preparedRequest = $this->prepareRequest($request);
        foreach ($this->getSourceQuotes($sku, $address, $preparedRequest) as $quote) {
            $productSourceQuotes[] = $this->productSourceQuoteObjectFactory->create()
                ->setSourceCode($quote->getCurrentSourceCode())
                ->setShippingMethod($this->getSourceQuoteShippingMethod($quote))
                ->setShippingRates($this->shippingRatesConverter->process($quote))
                ->setTotals($this->totalsConverter->process($quote));
        }
        if (empty($productSourceQuotes)) {
            throw new \Magento\Framework\Exception\LocalizedException(__('No product quotes found.'));
        }
        return $productSourceQuotes;
    }
    
}

Spamworldpro Mini