Closed mrobichaud-absolunet closed 3 years ago
After some investigation, the problem comes mainly from this interface that changes with in store pickup.
Magento\InventorySourceSelectionApi\Model\GetSourceItemQtyAvailableInterface
Normally if points to this code
Magento\InventorySourceSelectionApi\Model\GetSourceItemQtyAvailableService
public function execute(SourceItemInterface $sourceItem): float { return $sourceItem->getQuantity(); }
But with the in store pickup module a new class is created and the code is as follow
Magento\InventoryInStorePickupSales\Model\SourceSelection\GetSourceItemQtyAvailableService
public function execute(SourceItemInterface $sourceItem): float
{
/* TODO: create config and check if store pickup is enabled? */
return $sourceItem->getQuantity() - $this->getStorePickupReservedQty($sourceItem);
}
Since this extension disable reservation $this->getStorePickupReservedQty($sourceItem);
isn't really necessary. Our solution was to revert back the preference in a di.xml
<preference for="Magento\InventorySourceSelectionApi\Model\GetSourceItemQtyAvailableInterface" type="Magento\InventorySourceSelectionApi\Model\GetSourceItemQtyAvailableService" />
hi @mrobichaudb, could you provide a few more steps on how to replicate this error? I presume it's only when there are store pick up orders associated with the source item? We are currently trying to ensure this module is viable for Magento 2.4 and are keen to implement a fix for this (potentially the aforementioned di.xml fix) but do not want to lose any non-MSI functionality on the new in-store pickup feature.
@mrobichaud-absolunet we believe this issue is resolved as of https://github.com/AmpersandHQ/magento2-disable-stock-reservation/pull/43
Can you please review and let me know if you have any further issues.
Thanks
An exception occurs if you are connected and there are orders not completed on other customer.
At some point in the stack when this function is called a list of all pending pickup orders are loaded and magento send an exception if you try to load an order that isn't associated to the connected customer. When this happen, since it's in the afterPlace, the order is created but the checkout process never complete and the customer is presented with a "No such entity found for entity_id = ###"
The specific line where it all start (95)
$sourceSelectionResult = $this->getSourceSelectionResultFromOrder->execute($order);
Here's a stack trace of the exception