/** * 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; }