In Product we have Qty. Once we Order product & order is completed.
In sales_order_item
table we have qty_backordered
, qty_canceled
, qty_invoiced
, qty_ordered
, qty_refunded
, qty_shipped
Once order is completed majorly we need to check invoiced & shipped qty.
If i have X Product: It's original qty is 100, Ordered qty & shipped to 5. So total remaining qty is 95 out of 100.
How to get 100 using code? So we can get that out of 100 now 95 is remaining.
[UPDATE]
namespace Custom\Module\Observer;
use Magento\Framework\Event\Observer;
use Magento\Framework\Event\ObserverInterface;
use Magento\Framework\App\ObjectManager;
class OrderPlaceAfter implements ObserverInterface {
/** @var \Magento\Framework\Logger\Monolog */
protected $logger;
protected $resources;
protected $orderRepository;
protected $stockItemRepository;
public function __construct(\Psr\Log\LoggerInterface $logger, \Magento\Framework\App\ResourceConnection $resources, \Magento\Sales\Api\OrderRepositoryInterface $orderRepository, \Magento\CatalogInventory\Model\Stock\StockItemRepository $stockItemRepository) {
$this->logger = $logger;
$this->resources = $resources;
$this->orderRepository = $orderRepository;
$this->stockItemRepository = $stockItemRepository;
}
public function execute(Observer $observer) {
$orderId = 110; // My Order Number
$order = $this->orderRepository->get($orderId);
if ($order->getEntityId()) {
$items = $order->getItems();
foreach ($items as $item) {
$stock = $this->stockItemRepository->get($item->getProductId());
echo $stock->getQty().'-'.$item->getQtyShipped();
//echo $remainingShipQty = $stock->getQty() - $item->getQtyShipped();
}
}
exit;
return $this;
}
}
Best Answer
Try following way:
And your calculation should be:
[Update]
You need to log data into file. Echo not working for observer.