/** * @param \Praxigento\Odoo\Data\Odoo\Inventory\Product\Warehouse\Lot[] $lots * @param \Magento\CatalogInventory\Api\Data\StockItemInterface $stockItem */ public function processLots($lots, $stockItem) { $qtyTotal = 0; $stockItemId = $stockItem->getItemId(); foreach ($lots as $lot) { $qtyTotal += $this->_subLot->processLot($stockItemId, $lot); } /* update stock item qty */ $stockItem->setQty($qtyTotal); $isInStock = $qtyTotal > 0; $stockItem->setIsInStock($isInStock); $this->_mageRepoStockItem->save($stockItem); /* cleanup extra lots */ $this->_subLot->cleanupLots($stockItemId, $lots); }
/** * @param ProductInterface $product * @param StockItemInterface $stockItem * @throws LocalizedException * @return void */ private function validateStockItem(ProductInterface $product, StockItemInterface $stockItem) { $defaultScopeId = $this->stockConfiguration->getDefaultScopeId(); $defaultStockId = $this->stockRegistry->getStock($defaultScopeId)->getStockId(); $stockId = $stockItem->getStockId(); if ($stockId !== null && $stockId != $defaultStockId) { throw new LocalizedException(__('Invalid stock id: %1. Only default stock with id %2 allowed', $stockId, $defaultStockId)); } $stockItemId = $stockItem->getItemId(); if ($stockItemId !== null && (!is_numeric($stockItemId) || $stockItemId <= 0)) { throw new LocalizedException(__('Invalid stock item id: %1. Should be null or numeric value greater than 0', $stockItemId)); } $defaultStockItemId = $this->stockRegistry->getStockItem($product->getId())->getItemId(); if ($defaultStockItemId && $stockItemId !== null && $defaultStockItemId != $stockItemId) { throw new LocalizedException(__('Invalid stock item id: %1. Assigned stock item id is %2', $stockItemId, $defaultStockItemId)); } }