public function shipmentTrackingSave(\Praxigento\Odoo\Api\Data\SaleOrder\Shipment\Tracking $data) { $result = false; /* replicate all data in one transaction */ $def = $this->_manTrans->begin(); try { $orderIdMage = $data->getSaleOrderIdMage(); $trackNumber = $data->getData('shipment/trackingInfo/trackingNumber'); $shippingMethodCode = $data->getData('shipment/trackingInfo/shippingCode'); $this->_shipmentLoader->setOrderId($orderIdMage); /** @var \Magento\Sales\Model\Order\Shipment $shipment */ $shipment = $this->_shipmentLoader->load(); if ($shipment) { $carrierCode = $this->_manBusCodes->getMagCodeForCarrier($shippingMethodCode); $title = $this->_manBusCodes->getTitleForCarrier($shippingMethodCode); $track = $this->_manObj->create(\Magento\Sales\Model\Order\Shipment\Track::class); $track->setNumber($trackNumber); $track->setCarrierCode($carrierCode); $track->setTitle($title); $shipment->addTrack($track); $shipment->register(); $shipment->save(); $order = $shipment->getOrder(); $invoice = $this->_manInvoice->prepareInvoice($order); $invoice->register(); $invoice->save(); $order->save(); $this->_manTrans->commit($def); $result = true; } } catch (\Exception $e) { $msg = 'Product replication from Odoo is failed. Error: ' . $e->getMessage(); $this->_logger->emergency($msg); $traceStr = $e->getTraceAsString(); $this->_logger->emergency($traceStr); throw $e; } finally { // transaction will be rolled back if commit is not done (otherwise - do nothing) $this->_manTrans->end($def); } return $result; }
/** * @param \Magento\Sales\Api\Data\OrderInterface $mageOrder * @return \Praxigento\Odoo\Data\Odoo\SaleOrder\Shipping */ public function getSaleOrderShipping(\Magento\Sales\Api\Data\OrderInterface $mageOrder) { $result = $this->_manObj->create(\Praxigento\Odoo\Data\Odoo\SaleOrder\Shipping::class); /* collect data */ $code = $this->_manBusinessCodes->getBusCodeForShippingMethod($mageOrder); $priceAmount = $mageOrder->getBaseShippingAmount(); $priceAmount = $this->_manFormat->toNumber($priceAmount); $priceDiscount = $mageOrder->getBaseShippingDiscountAmount(); $priceDiscount = $this->_manFormat->toNumber($priceDiscount); $priceTaxAmount = $mageOrder->getBaseShippingTaxAmount(); $priceTaxAmount = $this->_manFormat->toNumber($priceTaxAmount); $priceTaxPercent = $priceTaxAmount / ($priceAmount - $priceDiscount); $priceTaxPercent = $this->_manFormat->toNumber($priceTaxPercent, Cfg::ODOO_API_PERCENT_ROUND); $priceAmountTotal = ($priceAmount - $priceDiscount) * (1 + $priceTaxPercent); $priceAmountTotal = $this->_manFormat->toNumber($priceAmountTotal); /* populate Odoo Data Object */ $result->setCode($code); $result->setPriceAmount($priceAmount); $result->setPriceDiscount($priceDiscount); $result->setPriceTaxPercent($priceTaxPercent); $result->setPriceTaxAmount($priceTaxAmount); $result->setPriceAmountTotal($priceAmountTotal); return $result; }