diff --git a/app/code/community/Retailcrm/Retailcrm/Model/Exchange.php b/app/code/community/Retailcrm/Retailcrm/Model/Exchange.php
index 038d667..3939b85 100644
--- a/app/code/community/Retailcrm/Retailcrm/Model/Exchange.php
+++ b/app/code/community/Retailcrm/Retailcrm/Model/Exchange.php
@@ -74,8 +74,8 @@ class Retailcrm_Retailcrm_Model_Exchange
'email' => $order->getCustomerEmail(),
'phone' => $address['telephone'],
'paymentType' => $payments[$order->getPayment()->getMethodInstance()->getCode()],
- 'paymentStatus' => $paymentsStatuses[$order->getStatus()],
- 'status' => $statuses[$order->getStatus()],
+ //'paymentStatus' => $paymentsStatuses[$order->getStatus()],
+ //'status' => $statuses[$order->getStatus()],
'discount' => abs($order->getDiscountAmount()),
'items' => $items,
'delivery' => array(
@@ -88,7 +88,7 @@ class Retailcrm_Retailcrm_Model_Exchange
'street' => $address['street'],
'region' => $address['region'],
'text' => implode(
- ','
+ ',',
array(
$address['postcode'],
$address['country_id'],
@@ -122,32 +122,141 @@ class Retailcrm_Retailcrm_Model_Exchange
}
}
+ /**
+ * Get orders history & modify orders into shop
+ *
+ */
public function ordersHistory()
{
- /*$this->_config = Mage::getStoreConfig('retailcrm');
- $statuses = array_flip(array_filter($this->_config['status']));
- $paymentsStatuses = array_flip(array_filter($this->_config['paymentstatus']));
- $payments = array_filter($this->_config['payment']);
- $shippings = array_filter($this->_config['shipping']);
- */
+ $runTime = $this->getExchangeTime($this->_config['general']['history']);
- $timeMark = date('Y-m-d H:i:s');
- $lastRun = Mage::getStoreConfig('retailcrm/general/history');
+ try {
+ $response = $this->_api->ordersHistory($runTime);
+ if (
+ $response->isSuccessful()
+ &&
+ 200 === $response->getStatusCode()
+ ) {
+ $nowTime = $response->getGeneratedAt();
+ $this->processOrders($response->orders, $nowTime);
+ } else {
+ Mage::log(
+ sprintf(
+ "Orders history error: [HTTP status %s] %s",
+ $response->getStatusCode(),
+ $response->getErrorMsg()
+ )
+ );
- if (!empty($lastRun)) {
- $lastRun = new DateTime(
- date(
- 'Y-m-d H:i:s',
- strtotime('-1 days', strtotime(date('Y-m-d H:i:s')))
- )
- );
- } else {
- $lastRun = new DateTime($lastRun);
+ if (isset($response['errors'])) {
+ Mage::log(implode(' :: ', $response['errors']));
+ }
+ }
+ } catch (Retailcrm_Retailcrm_Model_Exception_CurlException $e) {
+ Mage::log($e->getMessage());
}
+ }
- $history = $client->ordersHistory($lastRun);
- Mage::getModel('core/config')->saveConfig('retailcrm/general/history', $timeMark);
- Mage::log($timeMark, null, 'history.log');
+ /**
+ * @param array $orders
+ */
+ private function processOrders($orders, $time)
+ {
+ if(!empty($orders)) {
+ /*Mage::getModel('core/config')->saveConfig(
+ 'retailcrm/general/history', $time
+ );*/
+
+ foreach ($orders as $order) {
+ if(!empty($order['externalId'])) {
+ $this->doUpdate($order);
+ } else {
+ $this->doCreate($order);
+ }
+ }
+ }
+ }
+
+ /**
+ * @param array $order
+ */
+ private function doCreate($order)
+ {
+ $this->_config = Mage::getStoreConfig('retailcrm');
+ $statuses = array_flip(array_filter($this->_config['status']));
+ $paymentsStatuses = array_filter($this->_config['paymentstatus']);
+ $payments = array_flip(array_filter($this->_config['payment']));
+ $shippings = array_flip(array_filter($this->_config['shipping']));
+
+ // create new order & fix externalId
+
+ Mage::log("Create: ", null, 'history.log');
+ }
+
+ /**
+ * @param array $order
+ */
+ private function doUpdate($order)
+ {
+ $magentoOrder = Mage::getModel('sales/order')->load($order['externalId']);
+
+ if (!empty($order['status'])) {
+ try {
+ $response = $this->_api->statusesList();
+ if (
+ $response->isSuccessful()
+ &&
+ 200 === $response->getStatusCode()
+ ) {
+ $code = $order['status'];
+ $group = $response->statuses[$code]['group'];
+
+ if (in_array($group, array('approval', 'assembling', 'delivery'))) {
+ $magentoOrder->setState(Mage_Sales_Model_Order::STATE_PROCESSING, true);
+ $magentoOrder->save();
+
+ $invoice = $magentoOrder->prepareInvoice()
+ ->setTransactionId($magentoOrder->getId())
+ ->register()
+ ->pay();
+
+ $transaction_save = Mage::getModel('core/resource_transaction')
+ ->addObject($invoice)
+ ->addObject($invoice->getOrder());
+
+ $transaction_save->save();
+ }
+
+ if (in_array($group, array('complete'))) {
+ $itemQty = $magentoOrder->getItemsCollection()->count();
+ Mage::getModel('sales/service_order', $magentoOrder)->prepareShipment($itemQty);
+ $shipment = new Mage_Sales_Model_Order_Shipment_Api();
+ $shipment->create($order['externalId']);
+ }
+
+ if (in_array($group, array('cancel'))) {
+ $magentoOrder->cancel();
+ $magentoOrder->save();
+ }
+
+ Mage::log("Update: " . $order['externalId'], null, 'history.log');
+ } else {
+ Mage::log(
+ sprintf(
+ "Statuses list error: [HTTP status %s] %s",
+ $response->getStatusCode(),
+ $response->getErrorMsg()
+ )
+ );
+
+ if (isset($response['errors'])) {
+ Mage::log(implode(' :: ', $response['errors']));
+ }
+ }
+ } catch (Retailcrm_Retailcrm_Model_Exception_CurlException $e) {
+ Mage::log($e->getMessage());
+ }
+ }
}
/**
@@ -246,4 +355,20 @@ class Retailcrm_Retailcrm_Model_Exchange
? array('success' => true, 'result' => $result)
: array('success' => false, 'result' => $searchResult[0]['id']);
}
+
+ private function getExchangeTime($datetime)
+ {
+ if (empty($datetime)) {
+ $datetime = new DateTime(
+ date(
+ 'Y-m-d H:i:s',
+ strtotime('-1 days', strtotime(date('Y-m-d H:i:s')))
+ )
+ );
+ } else {
+ $datetime = new DateTime($datetime);
+ }
+
+ return $datetime;
+ }
}
diff --git a/app/code/community/Retailcrm/Retailcrm/etc/config.xml b/app/code/community/Retailcrm/Retailcrm/etc/config.xml
index 0f2da6e..ca0af8b 100644
--- a/app/code/community/Retailcrm/Retailcrm/etc/config.xml
+++ b/app/code/community/Retailcrm/Retailcrm/etc/config.xml
@@ -63,7 +63,7 @@ SOFTWARE.
retailcrm/observer::exportCatalog
- */15 * * * *
+ */5 * * * *
retailcrm/observer::importHistory