/** * Return the last placed order meta data for the customer. * * @return Nosto_Tagging_Model_Meta_Order the order meta data model. */ public function getLastOrder() { $orderId = Mage::getSingleton('checkout/session')->getLastOrderId(); /** @var Mage_Sales_Model_Order $order */ $order = Mage::getModel('sales/order')->load($orderId); $meta = new Nosto_Tagging_Model_Meta_Order(); if ($order instanceof Mage_Sales_Model_Order) { $meta->loadData($order); } return $meta; }
/** * Turns an order object into a JSON structure. * * @param Nosto_Tagging_Model_Meta_Order $order the order object. * @return string the JSON structure. */ protected function getOrderAsJson(Nosto_Tagging_Model_Meta_Order $order) { /** @var NostoHelperDate $dateHelper */ $dateHelper = Nosto::helper('date'); $data = array('order_number' => $order->getOrderNumber(), 'external_order_ref' => $order->getExternalOrderRef(), 'buyer' => array(), 'created_at' => $dateHelper->format($order->getCreatedDate()), 'payment_provider' => $order->getPaymentProvider(), 'purchased_items' => array()); if ($order->getOrderStatus()) { $data['order_status_code'] = $order->getOrderStatus()->getCode(); $data['order_status_label'] = $order->getOrderStatus()->getLabel(); } /** @var NostoHelperPrice $priceHelper */ $priceHelper = Nosto::helper('price'); foreach ($order->getPurchasedItems() as $item) { $data['purchased_items'][] = array('product_id' => $item->getProductId(), 'quantity' => $item->getQuantity(), 'name' => $item->getName(), 'unit_price' => $priceHelper->format($item->getUnitPrice()), 'price_currency_code' => strtoupper($item->getCurrencyCode())); } if ($order->getBuyerInfo()) { if ($order->getBuyerInfo()->getFirstName()) { $data['buyer']['first_name'] = $order->getBuyerInfo()->getFirstName(); } if ($order->getBuyerInfo()->getLastName()) { $data['buyer']['last_name'] = $order->getBuyerInfo()->getLastName(); } if ($order->getBuyerInfo()->getEmail()) { $data['buyer']['email'] = $order->getBuyerInfo()->getEmail(); } } return json_encode($data); }
/** * Exports completed orders from the current store. * Result can be limited by the `limit` and `offset` GET parameters. */ public function orderAction() { if (Mage::helper('nosto_tagging')->isModuleEnabled()) { $pageSize = (int) $this->getRequest()->getParam('limit', 100); $currentOffset = (int) $this->getRequest()->getParam('offset', 0); $currentPage = $currentOffset / $pageSize + 1; $orders = Mage::getModel('sales/order')->getCollection()->addFieldToFilter('store_id', Mage::app()->getStore()->getId())->setPageSize($pageSize)->setCurPage($currentPage); if ($currentPage > $orders->getLastPageNumber()) { $orders = array(); } $collection = new NostoExportOrderCollection(); foreach ($orders as $order) { $meta = new Nosto_Tagging_Model_Meta_Order(); // We don't need special items like shipping cost and discounts. $meta->includeSpecialItems = false; $meta->loadData($order); $collection[] = $meta; } $this->export($collection); } }
/** * Sends an order confirmation API request to Nosto if the order is completed. * * Event 'sales_order_save_commit_after'. * * @param Varien_Event_Observer $observer the event observer. * * @return Nosto_Tagging_Model_Observer */ public function sendOrderConfirmation(Varien_Event_Observer $observer) { if (Mage::helper('nosto_tagging')->isModuleEnabled()) { try { /** @var Mage_Sales_Model_Order $mageOrder */ $mageOrder = $observer->getEvent()->getOrder(); $order = new Nosto_Tagging_Model_Meta_Order(); $order->loadData($mageOrder); /** @var NostoAccount $account */ $account = Mage::helper('nosto_tagging/account')->find($mageOrder->getStore()); $customerId = Mage::helper('nosto_tagging/customer')->getNostoId($mageOrder); if ($account !== null && $account->isConnectedToNosto()) { NostoOrderConfirmation::send($order, $account, $customerId); } } catch (NostoException $e) { Mage::log("\n" . $e->__toString(), Zend_Log::ERR, 'nostotagging.log'); } } return $this; }