-
Notifications
You must be signed in to change notification settings - Fork 253
Open
Labels
Area: CatalogComponent: InventoryCatalogIssue: ConfirmedGate 3 Passed. Manual verification of the issue completed. Issue is confirmedGate 3 Passed. Manual verification of the issue completed. Issue is confirmedReported on 2.4.xIndicates original Magento version for the Issue report.Indicates original Magento version for the Issue report.Reproduced on 2.4.xThe issue has been reproduced on latest 2.4-develop branchThe issue has been reproduced on latest 2.4-develop branch
Description
Preconditions (*)
- Adobe Commerce 2.4.7-p4
- Sample data installed
- Some products created via rest API
Steps to reproduce (*)
- Create two new inventory sources
- Create a new inventory stock
- Assign the two new inventory sources to the stock
- Navigate to the products list in the admin panel
- Select all items and choose to "Transfer Inventory to Source"
- Choose to transfer to one of the new inventory sources, and check to unassign from the original source
Expected result (*)
- Inventory should be transferred and a success message should display
Actual result (*)
- Error message is displayed
Warning: Trying to access array offset on value of type null in {path}/vendor/magento/module-inventory-catalog/Model/ResourceModel/BulkInventoryTransfer.php on line 131 - Inventory is not transferred
Investigation
The code from the following method looks off:
| private function transferInventory( |
When $dstSourceItemQty is null, which seems likely to be the case for a brand new inventory source, it is by default set to 0:
$dstSourceItemQty = $dstSourceItem === null ? 0.0 : (float) $dstSourceItem[SourceItemInterface::QUANTITY];
As a result, the first elseif in this conditional passes, which means that it will try to read the status array key from $dstSourceItem, which is null, which causes the error (line 131).
if ($orgSourceItem !== null) {
$status = (int) $orgSourceItem[SourceItemInterface::STATUS];
} elseif ($dstSourceItemQty !== null) {
$status = (int) $dstSourceItem[SourceItemInterface::STATUS];
} else {
$status = (int) SourceItemInterface::STATUS_OUT_OF_STOCK;
}It seems this method is not properly handing the use case of a new inventory source, and if you have products that were created by the API that might not yet have a source item in the database.
Metadata
Metadata
Assignees
Labels
Area: CatalogComponent: InventoryCatalogIssue: ConfirmedGate 3 Passed. Manual verification of the issue completed. Issue is confirmedGate 3 Passed. Manual verification of the issue completed. Issue is confirmedReported on 2.4.xIndicates original Magento version for the Issue report.Indicates original Magento version for the Issue report.Reproduced on 2.4.xThe issue has been reproduced on latest 2.4-develop branchThe issue has been reproduced on latest 2.4-develop branch