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;
    }
}
Foi útil?

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
scroll top