6 declare(strict_types=1);
19 use Magento\InventorySalesApi\Api\Data\ItemToSellInterfaceFactory;
29 private $isSingleSourceMode;
34 private $defaultSourceProvider;
39 private $getItemsToDeductFromShipment;
44 private $sourceDeductionRequestFromShipmentFactory;
49 private $sourceDeductionService;
54 private $itemsToSellFactory;
59 private $placeReservationsForSalesEvent;
76 ItemToSellInterfaceFactory $itemsToSellFactory,
79 $this->isSingleSourceMode = $isSingleSourceMode;
81 $this->getItemsToDeductFromShipment = $getItemsToDeductFromShipment;
82 $this->sourceDeductionRequestFromShipmentFactory = $sourceDeductionRequestFromShipmentFactory;
83 $this->sourceDeductionService = $sourceDeductionService;
84 $this->itemsToSellFactory = $itemsToSellFactory;
85 $this->placeReservationsForSalesEvent = $placeReservationsForSalesEvent;
96 if (
$shipment->getOrigData(
'entity_id')) {
100 if (!empty(
$shipment->getExtensionAttributes())
101 && !empty(
$shipment->getExtensionAttributes()->getSourceCode())) {
103 }
elseif ($this->isSingleSourceMode->execute()) {
104 $sourceCode = $this->defaultSourceProvider->getCode();
107 $shipmentItems = $this->getItemsToDeductFromShipment->execute(
$shipment);
109 if (!empty($shipmentItems)) {
110 $sourceDeductionRequest = $this->sourceDeductionRequestFromShipmentFactory->execute(
115 $this->sourceDeductionService->execute($sourceDeductionRequest);
116 $this->placeCompensatingReservation($sourceDeductionRequest);
125 private function placeCompensatingReservation(SourceDeductionRequestInterface $sourceDeductionRequest): void
128 foreach ($sourceDeductionRequest->getItems() as
$item) {
129 $items[] = $this->itemsToSellFactory->create([
130 'sku' =>
$item->getSku(),
131 'qty' =>
$item->getQty()
134 $this->placeReservationsForSalesEvent->execute(
136 $sourceDeductionRequest->getSalesChannel(),
137 $sourceDeductionRequest->getSalesEvent()
elseif(isset( $params[ 'redirect_parent']))
foreach($order->getItems() as $orderItem) $shipment
__construct(IsSingleSourceModeInterface $isSingleSourceMode, DefaultSourceProviderInterface $defaultSourceProvider, GetItemsToDeductFromShipment $getItemsToDeductFromShipment, SourceDeductionRequestFromShipmentFactory $sourceDeductionRequestFromShipmentFactory, SourceDeductionServiceInterface $sourceDeductionService, ItemToSellInterfaceFactory $itemsToSellFactory, PlaceReservationsForSalesEventInterface $placeReservationsForSalesEvent)
execute(Observer $observer)