Open
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:
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
No labels