diff --git a/InventoryCatalog/Model/SourceItemsSaveSynchronization/SetDataToLegacyCatalogInventory.php b/InventoryCatalog/Model/SourceItemsSaveSynchronization/SetDataToLegacyCatalogInventory.php index 21c2275dcf2..cfd120793c3 100644 --- a/InventoryCatalog/Model/SourceItemsSaveSynchronization/SetDataToLegacyCatalogInventory.php +++ b/InventoryCatalog/Model/SourceItemsSaveSynchronization/SetDataToLegacyCatalogInventory.php @@ -47,34 +47,53 @@ public function __construct( */ public function execute(array $sourceItems): void { - $skus = array_map(fn ($sourceItem) => $sourceItem->getSku(), $sourceItems); + $skus = array_map(fn($sourceItem) => $sourceItem->getSku(), $sourceItems); $legacyStockItemsByProductId = []; + + // Fetch legacy stock items for the SKUs foreach ($this->getLegacyStockItems->execute($skus) as $legacyStockItem) { $legacyStockItemsByProductId[$legacyStockItem->getProductId()] = $legacyStockItem; } + foreach ($sourceItems as $sourceItem) { $sku = $sourceItem->getSku(); try { $productId = (int)$this->getProductIdsBySkus->execute([$sku])[$sku]; } catch (NoSuchEntityException $e) { - // Skip synchronization of for not existed product + // Skip synchronization for non-existent product continue; } + $legacyStockItem = $legacyStockItemsByProductId[$productId] ?? null; if (null === $legacyStockItem) { continue; } + + // Update quantity and stock status based on source item $legacyStockItem->setQty((float)$sourceItem->getQuantity()); - $legacyStockItem->setIsInStock((int)$sourceItem->getStatus()); + + // Custom logic: If quantity is 0, set the stock status to 'in stock' or 'out of stock' as per requirements + if ($legacyStockItem->getQty() == 0) { + // Set the product as 'out of stock' or 'in stock' based on your logic + $legacyStockItem->setIsInStock(0); // 'out of stock' + } else { + $legacyStockItem->setIsInStock((int)$sourceItem->getStatus()); + } + + // Check if stock management is enabled and update stock status accordingly if ($legacyStockItem->getManageStock() && !$this->stockStateProvider->verifyStock($legacyStockItem)) { $legacyStockItem->setIsInStock(0); } + + // Execute the update to legacy stock item $this->setDataToLegacyStockItem->execute( (string)$sourceItem->getSku(), (float)$legacyStockItem->getQty(), - (int) $legacyStockItem->getIsInStock() + (int)$legacyStockItem->getIsInStock() ); } + + // Update default stock and salability if needed $affectedSkus = $this->updateDefaultStock->execute($skus); if ($affectedSkus) { $this->productSalabilityChangeProcessor->execute($affectedSkus);