public function orderSave(Replicate\Request\OrderSave $req) { $result = new Response\OrderSave(); /** @var \Magento\Sales\Api\Data\OrderInterface $mageOrder */ $mageOrder = $req->getSaleOrder(); $orderIdMage = $mageOrder->getEntityId(); /** @var $registeredOrder */ $registeredOrder = $this->_repoEntitySaleOrder->getById($orderIdMage); if ($orderIdMage && !$registeredOrder) { $odooOrder = $this->_subCollector->getSaleOrder($mageOrder); $def = $this->_manTrans->begin(); try { /* save order into Odoo repo */ $resp = $this->_repoOdooSaleOrder->save($odooOrder); $result->setOdooResponse($resp); if ($resp instanceof \Praxigento\Odoo\Data\Odoo\SaleOrder\Response) { $mageId = $mageOrder->getEntityId(); $odooId = $resp->getIdOdoo(); /* mark order as replicated */ $registry = new \Praxigento\Odoo\Data\Entity\SaleOrder(); $registry->setMageRef($mageId); $registry->setOdooRef($odooId); $this->_repoEntitySaleOrder->create($registry); /* finalize transaction */ $this->_manTrans->commit($def); $result->markSucceed(); } } finally { // transaction will be rolled back if commit is not done (otherwise - do nothing) $this->_manTrans->end($def); } } return $result; }
/** * Select orders to be pushed into Odoo (in case of "on event" push was failed). */ public function getOrdersToReplicate() { $result = []; $orders = $this->_repoSaleOrder->getIdsToSaveToOdoo(); foreach ($orders as $data) { $id = $data[Cfg::E_SALE_ORDER_A_ENTITY_ID]; $order = $this->_repoMageSalesOrder->get($id); $result[$id] = $order; } return $result; }