![]() 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/old/vendor/magento/module-inventory-sales/Model/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\InventorySales\Model; use Magento\InventorySalesApi\Api\Data\SalesChannelInterface; use Magento\InventorySalesApi\Api\Data\SalesChannelInterfaceFactory; use Magento\InventorySalesApi\Api\Data\SalesEventExtensionFactory; use Magento\InventorySalesApi\Api\Data\SalesEventInterface; use Magento\InventorySalesApi\Api\Data\SalesEventInterfaceFactory; use Magento\InventorySalesApi\Api\PlaceReservationsForSalesEventInterface; use Magento\InventorySalesApi\Model\StockByWebsiteIdResolverInterface; use Magento\Store\Api\WebsiteRepositoryInterface; /** * Append Reservation after Order is placed */ class AppendReservations { /** * @var PlaceReservationsForSalesEventInterface */ private $placeReservationsForSalesEvent; /** * @var WebsiteRepositoryInterface */ private $websiteRepository; /** * @var SalesChannelInterfaceFactory */ private $salesChannelFactory; /** * @var SalesEventInterfaceFactory */ private $salesEventFactory; /** * @var CheckItemsQuantity */ private $checkItemsQuantity; /** * @var StockByWebsiteIdResolverInterface */ private $stockByWebsiteIdResolver; /** * @var SalesEventExtensionFactory; */ private $salesEventExtensionFactory; /** * @param PlaceReservationsForSalesEventInterface $placeReservationsForSalesEvent * @param WebsiteRepositoryInterface $websiteRepository * @param SalesChannelInterfaceFactory $salesChannelFactory * @param SalesEventInterfaceFactory $salesEventFactory * @param CheckItemsQuantity $checkItemsQuantity * @param StockByWebsiteIdResolverInterface $stockByWebsiteIdResolver * @param SalesEventExtensionFactory $salesEventExtensionFactory */ public function __construct( PlaceReservationsForSalesEventInterface $placeReservationsForSalesEvent, WebsiteRepositoryInterface $websiteRepository, SalesChannelInterfaceFactory $salesChannelFactory, SalesEventInterfaceFactory $salesEventFactory, CheckItemsQuantity $checkItemsQuantity, StockByWebsiteIdResolverInterface $stockByWebsiteIdResolver, SalesEventExtensionFactory $salesEventExtensionFactory ) { $this->placeReservationsForSalesEvent = $placeReservationsForSalesEvent; $this->websiteRepository = $websiteRepository; $this->salesChannelFactory = $salesChannelFactory; $this->salesEventFactory = $salesEventFactory; $this->checkItemsQuantity = $checkItemsQuantity; $this->stockByWebsiteIdResolver = $stockByWebsiteIdResolver; $this->salesEventExtensionFactory = $salesEventExtensionFactory; } /** * Create reservations upon a sale event. * * @param int $websiteId * @param array $itemsBySku * @param mixed $order * @param array $itemsToSell * @return array * @throws \Exception */ public function reserve($websiteId, $itemsBySku, $order, $itemsToSell) { $websiteCode = $this->websiteRepository->getById($websiteId)->getCode(); $stockId = (int)$this->stockByWebsiteIdResolver->execute((int)$websiteId)->getStockId(); $this->checkItemsQuantity->execute($itemsBySku, $stockId); /** @var SalesEventExtensionInterface */ $salesEventExtension = $this->salesEventExtensionFactory->create([ 'data' => ['objectIncrementId' => (string)$order->getIncrementId()] ]); /** @var SalesEventInterface $salesEvent */ $salesEvent = $this->salesEventFactory->create([ 'type' => SalesEventInterface::EVENT_ORDER_PLACED, 'objectType' => SalesEventInterface::OBJECT_TYPE_ORDER, 'objectId' => (string)$order->getEntityId() ]); $salesEvent->setExtensionAttributes($salesEventExtension); $salesChannel = $this->salesChannelFactory->create([ 'data' => [ 'type' => SalesChannelInterface::TYPE_WEBSITE, 'code' => $websiteCode ] ]); $this->placeReservationsForSalesEvent->execute($itemsToSell, $salesChannel, $salesEvent); return [$salesChannel, $salesEventExtension]; } }