Hi,
I am new on Magento 2 and I am trying to update Product quantity when a user views the product, using an external API. In Magento 1.9 I succeeded in creating a custom observer. In magento 2.4 although I can change the quantity from stock in real time, the saleable quantity changes after the page refresh.
events.xml
<?xml version="1.0" encoding="UTF-8"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="catalog_controller_product_view"> <observer name="mymodule__update_product_observer" instance="HubIT\FarmakonConnect\Observer\UpdateProduct" /> </event> </config>
Observer.php
class UpdateProduct implements ObserverInterface { protected $scopeConfig; protected $getSalableQuantityDataBySku; protected $stockRegistry; public function __construct(ScopeConfigInterface $scopeConfig, GetSalableQuantityDataBySku $getSalableQuantityDataBySku, StockRegistryInterface $stockRegistry) { // Observer initialization code... $this->scopeConfig = $scopeConfig; $this->stockRegistry = $stockRegistry; $this->getSalableQuantityDataBySku = $getSalableQuantityDataBySku; } public function execute(Observer $observer) { $product = $observer->getEvent()->getProduct(); $sku = $product->getSku(); $id = $product->getId(); $qty = $this->productBalance($sku); //Get data from Api $stockItem = $product->getExtensionAttributes()->getStockItem(); $origQty = $stockItem->getQty(); $stockItem->setQty($qty); $stockItem->setIsInStock((bool)$qty); $this->stockRegistry->updateStockItemBySku($sku, $stockItem); echo 'test'.$qty.' '.$origQty.' '.$product->isSaleable().'<br>'; $salable = $this->getSalableQuantityDataBySku->execute($sku); echo json_encode($salable); } }
How can I achieve that?
No one knows how to inform the magento for quantity changes?
Is there any other way to achieve what I want?