/** * Create new warehouse data for the product in Magento. * * @param int $prodId * @param int $stockId * @param double $price * @param double $pv * @return StockItemInterface */ public function createWarehouseData($prodId, $stockId, $price, $pv) { /** @var StockItemInterface $result */ $result = $this->_manObj->create(StockItemInterface::class); $result->setProductId($prodId); $result->setStockId($stockId); $result->setIsInStock(true); $result->setManageStock(true); $result = $this->_mageRepoStockItem->save($result); $stockItemId = $result->getItemId(); /* register warehouse price */ $bind = [EntityWarehouseStockItem::ATTR_STOCK_ITEM_REF => $stockItemId, EntityWarehouseStockItem::ATTR_PRICE => $price]; $this->_repoWarehouseEntityStockItem->create($bind); /* register warehouse PV */ $bind = [EntityPvStockItem::ATTR_STOCK_ITEM_REF => $stockItemId, EntityPvStockItem::ATTR_PV => $pv]; $this->_repoPvStockItem->create($bind); return $result; }
/** * Save PV data on sale order save. * * @param Request\Save $req * * @return Response\Save */ public function save(Request\Save $req) { $result = new Response\Save(); $orderId = $req->getSaleOrderId(); $datePaid = $req->getSaleOrderDatePaid(); $items = $req->getOrderItems(); $this->_logger->info("Save PV attributes for sale order #{$orderId}."); $def = $this->_manTrans->begin(); try { /* for all items get PV data by warehouse */ $orderTotal = 0; foreach ($items as $item) { $prodId = $item->getProductId(); $stockId = $item->getStockId(); $itemId = $item->getItemId(); $pv = $this->_repoStockItem->getPvByProductAndStock($prodId, $stockId); $qty = $item->getQuantity(); $total = $pv * $qty; $eItem = new \Praxigento\Pv\Data\Entity\Sale\Item(); $eItem->setSaleItemId($itemId); $eItem->setSubtotal($total); $eItem->setDiscount(0); $eItem->setTotal($total); $this->_repoSaleItem->replace($eItem); $orderTotal += $total; } /* save order data */ $eOrder = new \Praxigento\Pv\Data\Entity\Sale(); $eOrder->setSaleId($orderId); $eOrder->setSubtotal($orderTotal); $eOrder->setDiscount(0); $eOrder->setTotal($orderTotal); $eOrder->setDatePaid($datePaid); $this->_repoSale->replace($eOrder); $this->_manTrans->commit($def); $result->markSucceed(); $this->_logger->info("PV attributes for sale order #{$orderId} are saved."); } finally { $this->_manTrans->end($def); } return $result; }
public function updateWarehousePv($stockItemMageId, $pv) { $bind = [EntityPvStockItem::ATTR_STOCK_ITEM_REF => $stockItemMageId, EntityPvStockItem::ATTR_PV => $pv]; $where = EntityPvStockItem::ATTR_STOCK_ITEM_REF . '=' . (int) $stockItemMageId; $this->_repoPvStockItem->update($bind, $where); }