Magento 2: How to get Total Qty?
-
06-10-2020 - |
Pergunta
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;
}
}
Solução
Try following way:
public function __construct( \Magento\Sales\Api\OrderRepositoryInterface $orderRepository, \Magento\CatalogInventory\Model\Stock\StockItemRepository $stockItemRepository ) { $this->orderRepository = $orderRepository; $this->stockItemRepository =$stockItemRepository; }
And your calculation should be:
$order = $this->orderRepository->get(13); if($order->getEntityId()) { $items = $order->getItems(); foreach ($items as $item) { $stock = $this->stockItemRepository->get($item->getProductId()); $remainingShipQty = $stock->getQty()-$item->getQtyShipped(); } }
[Update]
You need to log data into file. Echo not working for observer.
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(); $remainingShipQty = $stock->getQty() - $item->getQtyShipped(); $this->logger->info($remainingShipQty); } } return $this; } }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a magento.stackexchange