Skip to content

Commit 5110af0

Browse files
committed
Merge remote-tracking branch 'origin/ACP2E-4142' into PR_2025_09_08_muntianu
2 parents 161930a + ea83260 commit 5110af0

File tree

2 files changed

+76
-6
lines changed
  • app/code/Magento/CatalogImportExport/Model/Import
  • dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/ProductTest

2 files changed

+76
-6
lines changed

app/code/Magento/CatalogImportExport/Model/Import/Product.php

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3404,6 +3404,7 @@ private function formatStockDataForRow(array $rowData): array
34043404

34053405
$stockItemDo = $this->stockRegistry->getStockItem($row['product_id'], $row['website_id']);
34063406
$existStockData = $stockItemDo->getData();
3407+
$isInStockOld = (bool) ($existStockData['is_in_stock'] ?? $this->defaultStockData['is_in_stock']);
34073408

34083409
$row = array_merge(
34093410
$this->defaultStockData,
@@ -3414,14 +3415,35 @@ private function formatStockDataForRow(array $rowData): array
34143415

34153416
if ($this->stockConfiguration->isQty($this->skuProcessor->getNewSku($sku)['type_id'])) {
34163417
$stockItemDo->setData($row);
3417-
$row['is_in_stock'] = $this->stockStateProvider->verifyStock($stockItemDo)
3418-
? (int) $row['is_in_stock']
3419-
: 0;
3418+
$isInStock = $this->stockStateProvider->verifyStock($stockItemDo);
3419+
/**
3420+
* This following logic originates from
3421+
* @see \Magento\CatalogInventory\Model\Stock\StockItemRepository::updateStockStatus
3422+
* It is important to keep it for consistency
3423+
*/
3424+
if ($stockItemDo->getManageStock()) {
3425+
if (!$isInStock) {
3426+
if ($stockItemDo->getIsInStock() === true) {
3427+
$stockItemDo->setIsInStock(false);
3428+
$stockItemDo->setStockStatusChangedAuto(1);
3429+
}
3430+
} else {
3431+
if ($stockItemDo->getIsInStock() !== $isInStockOld) {
3432+
$stockItemDo->setStockStatusChangedAuto(0);
3433+
}
3434+
if ($stockItemDo->getIsInStock() === false && $stockItemDo->getStockStatusChangedAuto()) {
3435+
$stockItemDo->setIsInStock(true);
3436+
}
3437+
}
3438+
} else {
3439+
$stockItemDo->setStockStatusChangedAuto(0);
3440+
}
3441+
$row['is_in_stock'] = (int) $stockItemDo->getIsInStock();
3442+
$row['stock_status_changed_auto'] = (int) $stockItemDo->getStockStatusChangedAuto();
34203443
if ($this->stockStateProvider->verifyNotification($stockItemDo)) {
34213444
$date = $this->dateTimeFactory->create('now', new \DateTimeZone('UTC'));
34223445
$row['low_stock_date'] = $date->format(DateTime::DATETIME_PHP_FORMAT);
34233446
}
3424-
$row['stock_status_changed_auto'] = (int)!$this->stockStateProvider->verifyStock($stockItemDo);
34253447
} else {
34263448
$row['qty'] = 0;
34273449
}

dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/ProductTest/ProductStockTest.php

Lines changed: 50 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,21 @@
11
<?php
22
/**
3-
* Copyright © Magento, Inc. All rights reserved.
4-
* See COPYING.txt for license details.
3+
* Copyright 2021 Adobe
4+
* All Rights Reserved.
55
*/
66
declare(strict_types=1);
77

88
namespace Magento\CatalogImportExport\Model\Import\ProductTest;
99

10+
use Magento\Catalog\Test\Fixture\Product as ProductFixture;
1011
use Magento\CatalogImportExport\Model\Import\ProductTestBase;
1112
use Magento\CatalogInventory\Model\Stock;
1213
use Magento\CatalogInventory\Model\StockRegistry;
1314
use Magento\CatalogInventory\Model\StockRegistryStorage;
1415
use Magento\Framework\App\Filesystem\DirectoryList;
16+
use Magento\ImportExport\Test\Fixture\CsvFile as CsvFileFixture;
17+
use Magento\TestFramework\Fixture\DataFixture;
18+
use Magento\TestFramework\Fixture\DataFixtureStorageManager;
1519

1620
/**
1721
* Integration test for \Magento\CatalogImportExport\Model\Import\Product class.
@@ -43,6 +47,50 @@ protected function setUp(): void
4347
$this->stockRegistry = $this->objectManager->get(StockRegistry::class);
4448
}
4549

50+
#[
51+
DataFixture(
52+
ProductFixture::class,
53+
[
54+
'extension_attributes' => [
55+
'stock_item' => [
56+
'use_config_manage_stock' => true,
57+
'qty' => 100,
58+
'is_qty_decimal' => false,
59+
'is_in_stock' => true,
60+
'min_qty' => 200
61+
]
62+
],
63+
],
64+
'product'
65+
),
66+
DataFixture(
67+
CsvFileFixture::class,
68+
[
69+
'rows' => [
70+
['sku', 'store_view_code', 'out_of_stock_qty'],
71+
['$product.sku$', '', '1'],
72+
]
73+
],
74+
'file'
75+
),
76+
]
77+
78+
public function testImportProductAutoStockStatusAdjustment(): void
79+
{
80+
$fixtures = DataFixtureStorageManager::getStorage();
81+
$id = $fixtures->get('product')->getId();
82+
$pathToFile = $fixtures->get('file')->getAbsolutePath();
83+
$stockItem = $this->stockRegistry->getStockItem($id, 1);
84+
$this->assertFalse($stockItem->getIsInStock());
85+
86+
$import = $this->createImportModel($pathToFile);
87+
$this->assertErrorsCount(0, $import->validateData());
88+
$import->importData();
89+
90+
$stockItem = $this->stockRegistry->getStockItem($id, 1);
91+
$this->assertTrue($stockItem->getIsInStock());
92+
}
93+
4694
/**
4795
* Test if stock item quantity properly saved after import
4896
*

0 commit comments

Comments
 (0)