Skip to content

Commit d3f8508

Browse files
Merge pull request #19 from magmodules/1.4.0
1.4.0
2 parents d07ed17 + a33100b commit d3f8508

File tree

8 files changed

+180
-38
lines changed

8 files changed

+180
-38
lines changed

app/code/community/Magmodules/Channableapi/Helper/Data.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ class Magmodules_Channableapi_Helper_Data extends Mage_Core_Helper_Abstract
3131
const XPATH_ITEM_RESULT = 'channable_api/item/result';
3232
const XPATH_WHITELISTED = 'channable_api/general/whitelisted_ips';
3333
const XPATH_CRON_FREQUENCY = 'channable_api/crons/frequency';
34+
const XPATH_USE_CUSTOM_STATUS = 'channable_api/order/use_custom_status';
35+
const XPATH_CUSTOM_STATUS = 'channable_api/order/custom_status';
3436

3537
/**
3638
* @return mixed
@@ -536,6 +538,22 @@ public function getBackendUrl($path, $params = array())
536538
return $helper->getUrl($path, $params);
537539
}
538540

541+
/**
542+
* @param null $storeId
543+
*
544+
* @return mixed
545+
*/
546+
public function getProcessingStatus($storeId = null)
547+
{
548+
$useCustomStatus = Mage::getStoreConfig(self::XPATH_USE_CUSTOM_STATUS, $storeId);
549+
if (!$useCustomStatus) {
550+
return null;
551+
}
552+
553+
return Mage::getStoreConfig(self::XPATH_CUSTOM_STATUS, $storeId);
554+
}
555+
556+
539557
/**
540558
* @param $type
541559
* @param $msg

app/code/community/Magmodules/Channableapi/Model/Items.php

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ public function invalidateProduct($productId, $type, $reason = null)
130130

131131
$log = Mage::getStoreConfig('channable_api/debug/log');
132132
foreach ($items->load() as $item) {
133-
$item->setNeedsUpdate('1')->setUpdatedAt(now())->save();
133+
$item->setNeedsUpdate('1')->setUpdatedAt(now())->setStatus('In Que')->setResult('')->save();
134134
if ($log) {
135135
$message = 'Scheduled for item update';
136136
if ($reason) {
@@ -366,7 +366,7 @@ public function postData($postData, $config)
366366
'Item Update',
367367
'API Call',
368368
$productsIds,
369-
json_encode($postData),
369+
json_encode($post),
370370
'',
371371
$results['status']
372372
);
@@ -416,8 +416,14 @@ public function updateData($postResult)
416416
}
417417

418418
foreach ($postData as $key => $data) {
419-
if(!isset($data['status'])) {
420-
$data['call_result'] = 'No result and/or error in post data';
419+
if (!isset($data['status'])) {
420+
421+
if (isset($itemsResult['message'])) {
422+
$data['call_result'] = $itemsResult['message'];
423+
} else {
424+
$data['call_result'] = 'Empty return data, please check webhook url or project settings.';
425+
}
426+
421427
$data['status'] = 'Error';
422428
$data['needs_update'] = 1;
423429
$data['last_call'] = Mage::getModel('core/date')->gmtDate('Y-m-d H:i:s');
@@ -447,8 +453,11 @@ public function updateData($postResult)
447453
*/
448454
public function cleanItemStore($storeId)
449455
{
450-
$table = Mage::getSingleton('core/resource')->getTableName('channable_items');
451-
$where = 'store_id = ' . $storeId . ' AND created_at < ' . strtotime("-2 days");
452-
Mage::getSingleton('core/resource')->getConnection('core_write')->delete($table, $where);
456+
/** @var Mage_Core_Model_Resource $resource */
457+
$resource = Mage::getSingleton('core/resource');
458+
$itemTable = $resource->getTableName('channable_items');
459+
460+
$where = "store_id = " . $storeId . " AND created_at < " . strtotime("-2 days");
461+
$resource->getConnection('core_write')->delete($itemTable, $where);
453462
}
454463
}

app/code/community/Magmodules/Channableapi/Model/Observer.php

Lines changed: 37 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -32,31 +32,40 @@ public function shopitemApi()
3232
}
3333

3434
try {
35+
/** @var Magmodules_Channableapi_Model_Items $itemModel */
36+
$itemModel = Mage::getModel('channableapi/items');
3537
$stores = Mage::helper('channableapi')->getEnabledItemStores();
3638
foreach ($stores as $storeId) {
3739
$timeStart = microtime(true);
40+
/** @var Mage_Core_Model_App_Emulation $appEmulation */
3841
$appEmulation = Mage::getSingleton('core/app_emulation');
3942
$initialEnvironmentInfo = $appEmulation->startEnvironmentEmulation($storeId);
40-
if ($result = Mage::getModel('channableapi/items')->runUpdate($storeId)) {
43+
if ($result = $itemModel->runUpdate($storeId)) {
4144
if ($result['status'] == 'success') {
42-
$html = $result['status'] . ' - Updates: ' . $result['updates'] . '<br/>';
43-
$html .= '<small>Date: ' . $result['date'] . ' - ';
44-
$html .= 'Time: ' . number_format((microtime(true) - $timeStart), 4) . '</small>';
45+
$html = sprintf(
46+
'%s - Updates: %s <br/><small>Date: %s - Time %s</small>',
47+
$result['status'],
48+
$result['updates'],
49+
$result['date'],
50+
number_format((microtime(true) - $timeStart))
51+
);
52+
4553
} else {
46-
$html = $result['status'] . '<br/><small>Date: ' . $result['date'] . ' - ';
47-
$html .= 'Time: ' . number_format((microtime(true) - $timeStart), 4) . '</small>';
54+
$html = sprintf(
55+
'%s<br/><small>Date: %s - Time %s</small>',
56+
$result['status'],
57+
$result['date'],
58+
number_format((microtime(true) - $timeStart))
59+
);
4860
}
49-
50-
$config = new Mage_Core_Model_Config();
61+
/** @var Mage_Core_Model_Config $config */
62+
$config = Mage::getModel('core/config');
5163
$config->saveConfig('channable_api/item/result', $html, 'stores', $storeId);
5264
}
53-
5465
$appEmulation->stopEnvironmentEmulation($initialEnvironmentInfo);
5566
}
5667
} catch (\Exception $e) {
57-
/** @var Magmodules_Channableapi_Model_Items $model */
58-
$model = Mage::getModel('channableapi/items');
59-
$model->addTolog('catalog_product_save_before', $e->getMessage(), 2);
68+
$itemModel->addTolog('catalog_product_save_before', $e->getMessage(), 2);
6069
}
6170
}
6271

@@ -72,18 +81,18 @@ public function catalog_product_save_before(Varien_Event_Observer $observer)
7281
return $this;
7382
}
7483

75-
/** @var Magmodules_Channableapi_Model_Items $model */
76-
$model = Mage::getModel('channableapi/items');
84+
/** @var Magmodules_Channableapi_Model_Items $itemModel */
85+
$itemModel = Mage::getModel('channableapi/items');
7786
$type = 'Product Edit';
7887

7988
try {
8089
/** @var Mage_Catalog_Model_Product $product */
8190
$product = $observer->getProduct();
8291
if ($product->hasDataChanges()) {
83-
$model->invalidateProduct($product->getId(), $type);
92+
$itemModel->invalidateProduct($product->getId(), $type);
8493
}
8594
} catch (\Exception $e) {
86-
$model->addTolog('catalog_product_save_before', $e->getMessage(), 2);
95+
$itemModel->addTolog('catalog_product_save_before', $e->getMessage(), 2);
8796
}
8897

8998
return $this;
@@ -101,17 +110,17 @@ public function cataloginventory_stock_item_save_after(Varien_Event_Observer $ob
101110
return $this;
102111
}
103112

104-
/** @var Magmodules_Channableapi_Model_Items $model */
105-
$model = Mage::getModel('channableapi/items');
113+
/** @var Magmodules_Channableapi_Model_Items $itemModel */
114+
$itemModel = Mage::getModel('channableapi/items');
106115
$type = 'Inventory Change';
107116

108117
try {
109118
$item = $observer->getEvent()->getItem();
110119
if ($item->getStockStatusChangedAuto() || ($item->getQtyCorrection() != 0)) {
111-
$model->invalidateProduct($item->getProductId(), $type);
120+
$itemModel->invalidateProduct($item->getProductId(), $type);
112121
}
113122
} catch (\Exception $e) {
114-
$model->addTolog('cataloginventory_stock_item_save_after', $e->getMessage(), 2);
123+
$itemModel->addTolog('cataloginventory_stock_item_save_after', $e->getMessage(), 2);
115124
}
116125

117126
return $this;
@@ -129,18 +138,18 @@ public function sales_model_service_quote_submit_before(Varien_Event_Observer $o
129138
return $this;
130139
}
131140

132-
/** @var Magmodules_Channableapi_Model_Items $model */
133-
$model = Mage::getModel('channableapi/items');
141+
/** @var Magmodules_Channableapi_Model_Items $itemModel */
142+
$itemModel = Mage::getModel('channableapi/items');
134143

135144
try {
136145
$type = 'Sales Order';
137146
$reason = 'Item Ordered';
138147
$quote = $observer->getEvent()->getQuote();
139148
foreach ($quote->getAllItems() as $item) {
140-
$model->invalidateProduct($item->getProductId(), $type, $reason);
149+
$itemModel->invalidateProduct($item->getProductId(), $type, $reason);
141150
}
142151
} catch (\Exception $e) {
143-
$model->addTolog('sales_model_service_quote_submit_before', $e->getMessage(), 2);
152+
$itemModel->addTolog('sales_model_service_quote_submit_before', $e->getMessage(), 2);
144153
}
145154

146155
return $this;
@@ -156,6 +165,9 @@ public function cleanItems()
156165
return $this;
157166
}
158167

168+
/** @var Magmodules_Channableapi_Model_Items $itemModel */
169+
$itemModel = Mage::getModel('channableapi/items');
170+
159171
try {
160172
$stores = Mage::helper('channableapi')->getEnabledItemStores();
161173
if ($stores) {
@@ -172,9 +184,7 @@ public function cleanItems()
172184
Mage::getSingleton('core/resource')->getConnection('core_read')->delete($debug, $where);
173185
}
174186
} catch (Exception $e) {
175-
/** @var Magmodules_Channableapi_Model_Items $model */
176-
$model = Mage::getModel('channableapi/items');
177-
$model->addTolog('cleanItems', $e->getMessage(), 2);
187+
$itemModel->addTolog('cleanItems', $e->getMessage(), 2);
178188
}
179189
}
180190

app/code/community/Magmodules/Channableapi/Model/Order.php

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,11 @@ public function importOrder($order, $storeId)
159159

160160
Mage::getModel('core/resource_transaction')->addObject($invoice)->addObject($invoice->getOrder())->save();
161161
$_order->setState(Mage_Sales_Model_Order::STATE_PROCESSING, true);
162+
163+
if ($status = Mage::helper('channableapi')->getProcessingStatus($storeId)) {
164+
$_order->setStatus($status);
165+
}
166+
162167
$_order->save();
163168
} catch (Exception $e) {
164169
$this->addToLog('importOrder', $e->getMessage(), 2);
@@ -662,4 +667,46 @@ public function getTracking($order)
662667
return false;
663668
}
664669
}
670+
671+
/**
672+
* @param $timespan
673+
*
674+
* @return array
675+
*/
676+
public function getShipments($timespan)
677+
{
678+
$response = array();
679+
$expression = sprintf('- %s hours', $timespan);
680+
$gmtDate = Mage::getModel('core/date')->gmtDate('Y-m-d H:i:s');
681+
$date = date('Y-m-d H:i:s', strtotime($expression, strtotime($gmtDate)));
682+
683+
$shipments = Mage::getResourceModel('sales/order_shipment_collection')
684+
->addFieldToFilter('main_table.created_at', array('from' => $date))
685+
->join(
686+
array('order' => 'sales/order'),
687+
'main_table.order_id=order.entity_id',
688+
array(
689+
'order_increment_id' => 'order.increment_id',
690+
'channable_id' => 'order.channable_id',
691+
'status' => 'order.status'
692+
)
693+
)
694+
->addFieldToFilter('channable_id', array('gt' => 0));
695+
696+
foreach ($shipments as $shipment) {
697+
$data['id'] = $shipment->getOrderIncrementId();
698+
$data['status'] = $shipment->getStatus();
699+
$data['date'] = Mage::getModel('core/date')->date('Y-m-d H:i:s', $shipment->getCreatedAt());
700+
foreach ($shipment->getAllTracks() as $tracknum) {
701+
$data['fulfillment']['tracking_code'][] = $tracknum->getNumber();
702+
$data['fulfillment']['title'][] = $tracknum->getTitle();
703+
$data['fulfillment']['carrier_code'][] = $tracknum->getCarrierCode();
704+
}
705+
706+
$response[] = $data;
707+
unset($data);
708+
}
709+
710+
return $response;
711+
}
665712
}

app/code/community/Magmodules/Channableapi/controllers/OrderController.php

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,37 @@ public function getAction()
111111
}
112112
}
113113

114+
/**
115+
* Shipments Action
116+
*/
117+
public function shipmentsAction()
118+
{
119+
$enabled = $this->helper->getEnabled();
120+
$token = $this->helper->getToken();
121+
$code = $this->getRequest()->getParam('code');
122+
123+
if ($enabled && $token && $code) {
124+
if ($code == $token) {
125+
$timespan = intval($this->getRequest()->getParam('timespan'));
126+
if ($timespan >= 1 && $timespan <= 336) {
127+
$response = $this->orderModel->getShipments($timespan);
128+
} else {
129+
$response = $this->helper->jsonResponse('Invalid timespan, supported range: 1-336');
130+
}
131+
} else {
132+
$response = $this->helper->jsonResponse('Unknown Token');
133+
}
134+
} else {
135+
$response = $this->helper->jsonResponse('Extension not enabled!');
136+
}
137+
138+
$this->getResponse()
139+
->clearHeaders()
140+
->setHeader('Content-type', 'application/json', true)
141+
->setHeader('Cache-control', 'no-cache', true)
142+
->setBody(json_encode($response));
143+
}
144+
114145
/**
115146
* Webhook Action
116147
*/

app/code/community/Magmodules/Channableapi/etc/config.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
<config>
2121
<modules>
2222
<Magmodules_Channableapi>
23-
<version>1.3.1</version>
23+
<version>1.4.0</version>
2424
</Magmodules_Channableapi>
2525
</modules>
2626
<global>

app/code/community/Magmodules/Channableapi/etc/system.xml

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -194,11 +194,38 @@
194194
<show_in_store>1</show_in_store>
195195
<comment><![CDATA[Enable if you want to automatically create an invoice on the order import and set the order state to <b>Processing</b> (default invoice order state) instead of <b>Pending</b>.]]></comment>
196196
</invoice_order>
197+
<use_custom_status translate="label">
198+
<label>Use non-default order status</label>
199+
<frontend_type>select</frontend_type>
200+
<source_model>adminhtml/system_config_source_yesno</source_model>
201+
<sort_order>44</sort_order>
202+
<show_in_default>0</show_in_default>
203+
<show_in_website>0</show_in_website>
204+
<show_in_store>1</show_in_store>
205+
<comment><![CDATA[Choose if you want to update the status of the order with a non-default order status.]]></comment>
206+
<depends>
207+
<invoice_order>1</invoice_order>
208+
</depends>
209+
</use_custom_status>
210+
<custom_status translate="label">
211+
<label>Status Processing</label>
212+
<frontend_type>select</frontend_type>
213+
<source_model>adminhtml/system_config_source_order_status_processing</source_model>
214+
<sort_order>45</sort_order>
215+
<show_in_default>0</show_in_default>
216+
<show_in_website>0</show_in_website>
217+
<show_in_store>1</show_in_store>
218+
<comment><![CDATA[Choose if you want to update the status of the order with a non-default order status.]]></comment>
219+
<depends>
220+
<invoice_order>1</invoice_order>
221+
<use_custom_status>1</use_custom_status>
222+
</depends>
223+
</custom_status>
197224
<channel_orderid translate="label">
198225
<label>Use channel Order ID</label>
199226
<frontend_type>select</frontend_type>
200227
<source_model>adminhtml/system_config_source_yesno</source_model>
201-
<sort_order>44</sort_order>
228+
<sort_order>46</sort_order>
202229
<show_in_default>0</show_in_default>
203230
<show_in_website>0</show_in_website>
204231
<show_in_store>1</show_in_store>
@@ -207,7 +234,7 @@
207234
<orderid_prefix translate="label">
208235
<label>Order ID Prefix</label>
209236
<frontend_type>text</frontend_type>
210-
<sort_order>45</sort_order>
237+
<sort_order>37</sort_order>
211238
<show_in_default>0</show_in_default>
212239
<show_in_website>0</show_in_website>
213240
<show_in_store>1</show_in_store>

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "magmodules/magento1-channable-api",
33
"type": "magento-module",
44
"description": "Magento 1 Channable integration",
5-
"version": "v1.3.1",
5+
"version": "v1.4.0",
66
"keywords": [
77
"magento"
88
],

0 commit comments

Comments
 (0)