Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
PlaceReservationsForSalesEvent.php
Go to the documentation of this file.
1 <?php
6 declare(strict_types=1);
7 
9 
20 
25 {
29  private $reservationBuilder;
30 
34  private $appendReservations;
35 
39  private $getStockBySalesChannel;
40 
44  private $getProductTypesBySkus;
45 
49  private $isSourceItemManagementAllowedForProductType;
50 
54  private $serializer;
55 
59  private $salesEventToArrayConverter;
60 
70  public function __construct(
71  ReservationBuilderInterface $reservationBuilder,
72  AppendReservationsInterface $appendReservations,
73  GetStockBySalesChannelInterface $getStockBySalesChannel,
74  GetProductTypesBySkusInterface $getProductTypesBySkus,
75  IsSourceItemManagementAllowedForProductTypeInterface $isSourceItemManagementAllowedForProductType,
76  SerializerInterface $serializer,
77  SalesEventToArrayConverter $salesEventToArrayConverter
78  ) {
79  $this->reservationBuilder = $reservationBuilder;
80  $this->appendReservations = $appendReservations;
81  $this->getStockBySalesChannel = $getStockBySalesChannel;
82  $this->getProductTypesBySkus = $getProductTypesBySkus;
83  $this->isSourceItemManagementAllowedForProductType = $isSourceItemManagementAllowedForProductType;
84  $this->serializer = $serializer;
85  $this->salesEventToArrayConverter = $salesEventToArrayConverter;
86  }
87 
91  public function execute(array $items, SalesChannelInterface $salesChannel, SalesEventInterface $salesEvent): void
92  {
93  if (empty($items)) {
94  return;
95  }
96 
97  $stockId = $this->getStockBySalesChannel->execute($salesChannel)->getStockId();
98 
99  $skus = [];
101  foreach ($items as $item) {
102  $skus[] = $item->getSku();
103  }
104  $productTypes = $this->getProductTypesBySkus->execute($skus);
105 
106  $reservations = [];
108  foreach ($items as $item) {
109  $currentSku = $item->getSku();
110  $skuNotExistInCatalog = !isset($productTypes[$currentSku]);
111  if ($skuNotExistInCatalog ||
112  $this->isSourceItemManagementAllowedForProductType->execute($productTypes[$currentSku])) {
113  $reservations[] = $this->reservationBuilder
114  ->setSku($item->getSku())
115  ->setQuantity((float)$item->getQuantity())
116  ->setStockId($stockId)
117  ->setMetadata($this->serializer->serialize($this->salesEventToArrayConverter->execute($salesEvent)))
118  ->build();
119  }
120  }
121  $this->appendReservations->execute($reservations);
122  }
123 }
__construct(ReservationBuilderInterface $reservationBuilder, AppendReservationsInterface $appendReservations, GetStockBySalesChannelInterface $getStockBySalesChannel, GetProductTypesBySkusInterface $getProductTypesBySkus, IsSourceItemManagementAllowedForProductTypeInterface $isSourceItemManagementAllowedForProductType, SerializerInterface $serializer, SalesEventToArrayConverter $salesEventToArrayConverter)
foreach($websiteCodes as $websiteCode) $skus
execute(array $items, \Magento\InventorySalesApi\Api\Data\SalesChannelInterface $salesChannel, \Magento\InventorySalesApi\Api\Data\SalesEventInterface $salesEvent)
$items