Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
All Data Structures Namespaces Files Functions Variables Pages
ProcessRevertProductsSalePlugin.php
Go to the documentation of this file.
1 <?php
6 declare(strict_types=1);
7 
9 
15 use Magento\InventorySalesApi\Api\Data\ItemToSellInterfaceFactory;
17 use Magento\InventorySalesApi\Api\Data\SalesChannelInterfaceFactory;
18 use Magento\InventorySalesApi\Api\Data\SalesEventInterfaceFactory;
21 
26 {
30  private $getSkusByProductIds;
31 
35  private $salesEventFactory;
36 
40  private $salesChannelFactory;
41 
45  private $itemsToSellFactory;
46 
50  private $websiteRepository;
51 
55  private $placeReservationsForSalesEvent;
56 
60  private $isSourceItemManagementAllowedForProductType;
61 
65  private $getProductTypesBySkus;
66 
77  public function __construct(
78  GetSkusByProductIdsInterface $getSkusByProductIds,
79  SalesEventInterfaceFactory $salesEventFactory,
80  SalesChannelInterfaceFactory $salesChannelFactory,
81  ItemToSellInterfaceFactory $itemsToSellFactory,
82  WebsiteRepositoryInterface $websiteRepository,
83  PlaceReservationsForSalesEventInterface $placeReservationsForSalesEvent,
84  IsSourceItemManagementAllowedForProductTypeInterface $isSourceItemManagementAllowedForProductType,
85  GetProductTypesBySkusInterface $getProductTypesBySkus
86  ) {
87  $this->getSkusByProductIds = $getSkusByProductIds;
88  $this->isSourceItemManagementAllowedForProductType = $isSourceItemManagementAllowedForProductType;
89  $this->getProductTypesBySkus = $getProductTypesBySkus;
90  $this->salesEventFactory = $salesEventFactory;
91  $this->salesChannelFactory = $salesChannelFactory;
92  $this->itemsToSellFactory = $itemsToSellFactory;
93  $this->websiteRepository = $websiteRepository;
94  $this->placeReservationsForSalesEvent = $placeReservationsForSalesEvent;
95  }
96 
106  public function aroundRevertProductsSale(
107  StockManagement $subject,
108  callable $proceed,
109  $items,
110  $websiteId = null
111  ): bool {
112  if (empty($items)) {
113  return true;
114  }
115 
116  if (null === $websiteId) {
117  throw new LocalizedException(__('$websiteId parameter is required'));
118  }
119 
120  $websiteCode = $this->websiteRepository->getById((int)$websiteId)->getCode();
121  $salesChannel = $this->salesChannelFactory->create([
122  'data' => [
124  'code' => $websiteCode
125  ]
126  ]);
127 
128  $salesEvent = $this->salesEventFactory->create([
129  'type' => 'revert_products_sale',
130  'objectType' => 'legacy_stock_management_api',
131  'objectId' => 'none'
132  ]);
133 
134  $productSkus = $this->getSkusByProductIds->execute(array_keys($items));
135  $productTypes = $this->getProductTypesBySkus->execute(array_values($productSkus));
136 
137  $itemsToSell = [];
138  foreach ($productSkus as $productId => $sku) {
139  if (true === $this->isSourceItemManagementAllowedForProductType->execute($productTypes[$sku])) {
140  $itemsToSell[] = $this->itemsToSellFactory->create([
141  'sku' => $sku,
142  'qty' => (float)$items[$productId]
143  ]);
144  }
145  }
146 
147  $this->placeReservationsForSalesEvent->execute($itemsToSell, $salesChannel, $salesEvent);
148 
149  return true;
150  }
151 }
__construct(GetSkusByProductIdsInterface $getSkusByProductIds, SalesEventInterfaceFactory $salesEventFactory, SalesChannelInterfaceFactory $salesChannelFactory, ItemToSellInterfaceFactory $itemsToSellFactory, WebsiteRepositoryInterface $websiteRepository, PlaceReservationsForSalesEventInterface $placeReservationsForSalesEvent, IsSourceItemManagementAllowedForProductTypeInterface $isSourceItemManagementAllowedForProductType, GetProductTypesBySkusInterface $getProductTypesBySkus)
__()
Definition: __.php:13
if(!isset($_GET['website_code'])) $websiteCode
Definition: website.php:11
aroundRevertProductsSale(StockManagement $subject, callable $proceed, $items, $websiteId=null)
$items