RetailOps_Api - Version 1.0.6

Version Notes

Fixes for shipping invoicing/refunds.

Download this release

Release Info

Developer Daniel Norman
Extension RetailOps_Api
Version 1.0.6
Comparing to
See all releases


Code changes from version 1.0.5 to 1.0.6

Files changed (24) hide show
  1. app/code/community/RetailOps/Api/Block/Adminhtml/Sales/Order/View/Tab/Retailops.php +0 -0
  2. app/code/community/RetailOps/Api/Exception.php +0 -0
  3. app/code/community/RetailOps/Api/Helper/Data.php +0 -0
  4. app/code/community/RetailOps/Api/Model/Api.php +0 -0
  5. app/code/community/RetailOps/Api/Model/Catalog/Adapter/Abstract.php +0 -0
  6. app/code/community/RetailOps/Api/Model/Catalog/Adapter/Attribute.php +0 -0
  7. app/code/community/RetailOps/Api/Model/Catalog/Adapter/Bundle.php +0 -0
  8. app/code/community/RetailOps/Api/Model/Catalog/Adapter/Category.php +0 -0
  9. app/code/community/RetailOps/Api/Model/Catalog/Adapter/Configurable.php +0 -0
  10. app/code/community/RetailOps/Api/Model/Catalog/Adapter/Default.php +0 -0
  11. app/code/community/RetailOps/Api/Model/Catalog/Adapter/Downloadable.php +0 -0
  12. app/code/community/RetailOps/Api/Model/Catalog/Adapter/Link.php +0 -0
  13. app/code/community/RetailOps/Api/Model/Catalog/Adapter/Media.php +6 -6
  14. app/code/community/RetailOps/Api/Model/Catalog/Adapter/Media.php.newest~ +0 -0
  15. app/code/community/RetailOps/Api/Model/Catalog/Adapter/Option.php +0 -0
  16. app/code/community/RetailOps/Api/Model/Catalog/Adapter/Tag.php +0 -0
  17. app/code/community/RetailOps/Api/Model/Catalog/Adapter/media_cron.php~ +0 -0
  18. app/code/community/RetailOps/Api/Model/Catalog/Api.php +0 -0
  19. app/code/community/RetailOps/Api/Model/Catalog/Exception.php +0 -0
  20. app/code/community/RetailOps/Api/Model/Shipment/Api.php +94 -23
  21. app/code/community/RetailOps/Api/etc/config.xml +1 -1
  22. app/design/adminhtml/default/default/template/retailops/order/view/tab/retailops.phtml +0 -60
  23. app/etc/modules/RetailOps_Api.xml +0 -0
  24. package.xml +8 -8
app/code/community/RetailOps/Api/Block/Adminhtml/Sales/Order/View/Tab/Retailops.php CHANGED
File without changes
app/code/community/RetailOps/Api/Exception.php CHANGED
File without changes
app/code/community/RetailOps/Api/Helper/Data.php CHANGED
File without changes
app/code/community/RetailOps/Api/Model/Api.php CHANGED
File without changes
app/code/community/RetailOps/Api/Model/Catalog/Adapter/Abstract.php CHANGED
File without changes
app/code/community/RetailOps/Api/Model/Catalog/Adapter/Attribute.php CHANGED
File without changes
app/code/community/RetailOps/Api/Model/Catalog/Adapter/Bundle.php CHANGED
File without changes
app/code/community/RetailOps/Api/Model/Catalog/Adapter/Category.php CHANGED
File without changes
app/code/community/RetailOps/Api/Model/Catalog/Adapter/Configurable.php CHANGED
File without changes
app/code/community/RetailOps/Api/Model/Catalog/Adapter/Default.php CHANGED
File without changes
app/code/community/RetailOps/Api/Model/Catalog/Adapter/Downloadable.php CHANGED
File without changes
app/code/community/RetailOps/Api/Model/Catalog/Adapter/Link.php CHANGED
File without changes
app/code/community/RetailOps/Api/Model/Catalog/Adapter/Media.php CHANGED
@@ -125,7 +125,7 @@ class RetailOps_Api_Model_Catalog_Adapter_Media extends RetailOps_Api_Model_Cata
125
  $ioAdapter->checkAndCreateFolder($tmpDirectory);
126
  $ioAdapter->open(array('path' => $tmpDirectory));
127
  $remoteCopyRetryLimit = 3;
128
- $errorLogPath = '/tmp/retailops_magento_image_error.log';
129
  if (!$item) {
130
  $items = Mage::getModel('retailops_api/catalog_media_item')->getCollection();
131
  $limit = $this->getHelper()->getConfig('media_processing_products_limit');
@@ -183,7 +183,7 @@ class RetailOps_Api_Model_Catalog_Adapter_Media extends RetailOps_Api_Model_Cata
183
  // Possible if multiple scripts have kicked off cron jobs.
184
  $recheck_file = $this->_existingImage($productId, $newImage);
185
  if ($recheck_file) {
186
- file_put_contents($errorLogPath, "$sku: Image added to product before download completed\n", FILE_APPEND);
187
  $file = $recheck_file;
188
  }
189
  else {
@@ -212,7 +212,7 @@ class RetailOps_Api_Model_Catalog_Adapter_Media extends RetailOps_Api_Model_Cata
212
  } catch (Exception $e) {
213
  $message = sprintf("Could not process image %s, error message: %s", $newImage['download_url'], $e->getMessage());
214
  $imageResult[] = $message;
215
- file_put_contents($errorLogPath, "$message\n", FILE_APPEND);
216
  }
217
  }
218
  if ($imageResult) {
@@ -223,7 +223,7 @@ class RetailOps_Api_Model_Catalog_Adapter_Media extends RetailOps_Api_Model_Cata
223
  }
224
  } catch (Exception $e) {
225
  $result[$sku]['general'] = $e->getMessage();
226
- file_put_contents($errorLogPath, "{$e->getMessage()}\n", FILE_APPEND);
227
  }
228
  }
229
 
@@ -349,7 +349,7 @@ class RetailOps_Api_Model_Catalog_Adapter_Media extends RetailOps_Api_Model_Cata
349
  return $existingImage['value'];
350
  }
351
  }
352
-
353
  foreach ($existingImages as $existingImage) {
354
  $fileNameMatch = preg_quote($newImageData['filename_match'], '~');
355
 
@@ -357,7 +357,7 @@ class RetailOps_Api_Model_Catalog_Adapter_Media extends RetailOps_Api_Model_Cata
357
  return $existingImage['value'];
358
  }
359
  }
360
-
361
  return false;
362
  }
363
 
125
  $ioAdapter->checkAndCreateFolder($tmpDirectory);
126
  $ioAdapter->open(array('path' => $tmpDirectory));
127
  $remoteCopyRetryLimit = 3;
128
+ $errorLog = 'retailops_magento_image_error.log';
129
  if (!$item) {
130
  $items = Mage::getModel('retailops_api/catalog_media_item')->getCollection();
131
  $limit = $this->getHelper()->getConfig('media_processing_products_limit');
183
  // Possible if multiple scripts have kicked off cron jobs.
184
  $recheck_file = $this->_existingImage($productId, $newImage);
185
  if ($recheck_file) {
186
+ Mage::log("$sku: Image added to product before download completed\n", Zend_Log::WARN, $errorLog);
187
  $file = $recheck_file;
188
  }
189
  else {
212
  } catch (Exception $e) {
213
  $message = sprintf("Could not process image %s, error message: %s", $newImage['download_url'], $e->getMessage());
214
  $imageResult[] = $message;
215
+ Mage::log($message, Zend_Log::ERR, $errorLog);
216
  }
217
  }
218
  if ($imageResult) {
223
  }
224
  } catch (Exception $e) {
225
  $result[$sku]['general'] = $e->getMessage();
226
+ Mage::log($e->getMessage(), Zend_Log::ERR, $errorLog);
227
  }
228
  }
229
 
349
  return $existingImage['value'];
350
  }
351
  }
352
+
353
  foreach ($existingImages as $existingImage) {
354
  $fileNameMatch = preg_quote($newImageData['filename_match'], '~');
355
 
357
  return $existingImage['value'];
358
  }
359
  }
360
+
361
  return false;
362
  }
363
 
app/code/community/RetailOps/Api/Model/Catalog/Adapter/Media.php.newest~ CHANGED
File without changes
app/code/community/RetailOps/Api/Model/Catalog/Adapter/Option.php CHANGED
File without changes
app/code/community/RetailOps/Api/Model/Catalog/Adapter/Tag.php CHANGED
File without changes
app/code/community/RetailOps/Api/Model/Catalog/Adapter/media_cron.php~ CHANGED
File without changes
app/code/community/RetailOps/Api/Model/Catalog/Api.php CHANGED
File without changes
app/code/community/RetailOps/Api/Model/Catalog/Exception.php CHANGED
File without changes
app/code/community/RetailOps/Api/Model/Shipment/Api.php CHANGED
@@ -229,20 +229,31 @@ class RetailOps_Api_Model_Shipment_Api extends Mage_Sales_Model_Order_Shipment_A
229
 
230
  $invoice = new Varien_Object($invoiceInfo);
231
  $invoice->setData('items_to_invoice', $itemsToInvoice);
232
-
233
- Mage::dispatchEvent(
234
- 'retailops_shipment_invoice_before',
235
- array('record' => $invoice)
 
 
 
236
  );
237
 
 
 
238
  $invoiceResult = $this->_createInvoiceAndCapture(
239
- $order,
240
- $invoice->getItemsToInvoice(),
241
- $invoice->getCapturedOffline(),
242
- $invoice->getComment(),
243
- $invoice->getEmail(),
244
- $invoice->getIncludeComment()
245
- );
 
 
 
 
 
 
246
 
247
  $invoiceResult = array($invoiceResult);
248
  }
@@ -293,13 +304,8 @@ class RetailOps_Api_Model_Shipment_Api extends Mage_Sales_Model_Order_Shipment_A
293
  if (!$order->getId()) {
294
  throw new Exception('Order is not found');
295
  }
296
- Mage::dispatchEvent(
297
- 'retailops_order_close_before',
298
- array('order' => $order)
299
- );
300
  $items = $order->getAllItems();
301
  $itemsToReturn = array();
302
- $itemsToCancel = array();
303
  $itemsToCapture = array();
304
  /** @var $item Mage_Sales_Model_Order_Item */
305
  foreach ($items as $item) {
@@ -324,11 +330,27 @@ class RetailOps_Api_Model_Shipment_Api extends Mage_Sales_Model_Order_Shipment_A
324
  }
325
  }
326
  }
327
- if ($itemsToCapture) {
328
- $result['invoice_result'] = $this->_createInvoiceAndCapture($order, $itemsToCapture, $orderData['captured_offline']);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
329
  }
330
- if ($itemsToReturn) {
331
- $result['creditmemo_result'] = $this->_getCreditMemoApi()->create($order, array('qtys' => $itemsToReturn), $orderData['captured_offline']);
 
332
  }
333
  /**
334
  * Cancel the rest items if any
@@ -339,6 +361,14 @@ class RetailOps_Api_Model_Shipment_Api extends Mage_Sales_Model_Order_Shipment_A
339
  }
340
  $order->save();
341
  $result['status'] = RetailOps_Api_Helper_Data::API_STATUS_SUCCESS;
 
 
 
 
 
 
 
 
342
  }
343
  } catch (Exception $e) {
344
  $result['status'] = RetailOps_Api_Helper_Data::API_STATUS_FAIL;
@@ -360,6 +390,25 @@ class RetailOps_Api_Model_Shipment_Api extends Mage_Sales_Model_Order_Shipment_A
360
  return Mage::getModel('retailops_api/return_api');
361
  }
362
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
363
  /**
364
  * @param Mage_Sales_Model_Order $order
365
  * @param array $itemsQty
@@ -368,18 +417,40 @@ class RetailOps_Api_Model_Shipment_Api extends Mage_Sales_Model_Order_Shipment_A
368
  * @param bool $includeComment
369
  * @return string
370
  */
371
- protected function _createInvoiceAndCapture($order, $itemsQty, $capturedOffline = false, $comment = null, $email = false, $includeComment = false)
372
  {
373
  /** @var $helper RetailOps_Api_Helper_Data */
374
  $helper = Mage::helper('retailops_api');
375
  try {
376
  $itemsQtyFomratted = array();
377
- if ($itemsQty) {
378
  foreach ($order->getAllItems() as $item) {
379
- $itemsQtyFomratted[$item->getId()] = isset($itemsQty[$item->getId()]) ? $itemsQty[$item->getId()] : 0;
 
380
  }
381
  }
382
  $invoice = $order->prepareInvoice($itemsQtyFomratted);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
383
  $invoice->setRequestedCaptureCase($capturedOffline
384
  ? Mage_Sales_Model_Order_Invoice::CAPTURE_OFFLINE : Mage_Sales_Model_Order_Invoice::CAPTURE_ONLINE);
385
  $invoice->register();
229
 
230
  $invoice = new Varien_Object($invoiceInfo);
231
  $invoice->setData('items_to_invoice', $itemsToInvoice);
232
+ $invoiceData = array(
233
+ 'order' => $order,
234
+ 'record' => $invoice,
235
+ 'items_to_invoice' => array(
236
+ 'qtys' => $itemsToInvoice,
237
+ 'shipping_amount' => $this->_fractionalBaseShipping($order, $itemsToInvoice, $isFullyShipped),
238
+ ),
239
  );
240
 
241
+ Mage::dispatchEvent('retailops_shipment_invoice_before', $invoiceData);
242
+
243
  $invoiceResult = $this->_createInvoiceAndCapture(
244
+ $order,
245
+ $invoiceData['items_to_invoice'],
246
+ $invoice->getCapturedOffline(),
247
+ $invoice->getComment(),
248
+ $invoice->getEmail(),
249
+ $invoice->getIncludeComment()
250
+ );
251
+
252
+ Mage::dispatchEvent('retailops_shipment_invoice_after', array(
253
+ 'order' => $order,
254
+ 'invoice' => $invoice,
255
+ 'result' => $invoiceResult,
256
+ ));
257
 
258
  $invoiceResult = array($invoiceResult);
259
  }
304
  if (!$order->getId()) {
305
  throw new Exception('Order is not found');
306
  }
 
 
 
 
307
  $items = $order->getAllItems();
308
  $itemsToReturn = array();
 
309
  $itemsToCapture = array();
310
  /** @var $item Mage_Sales_Model_Order_Item */
311
  foreach ($items as $item) {
330
  }
331
  }
332
  }
333
+ $closeData = array(
334
+ 'order' => $order,
335
+ 'items_to_capture' => array(
336
+ 'qtys' => $itemsToCapture,
337
+ 'shipping_amount' => $this->_fractionalBaseShipping($order, $itemsToCapture),
338
+ ),
339
+ 'items_to_return' => array(
340
+ 'qtys' => $itemsToReturn,
341
+ 'shipping_amount' => $this->_fractionalBaseShipping($order, $itemsToReturn),
342
+ ),
343
+ );
344
+
345
+ Mage::dispatchEvent('retailops_order_close_before', $closeData);
346
+
347
+ if (count($closeData['items_to_capture']['qtys'])) {
348
+ $result['invoice_result'] = $this->_createInvoiceAndCapture(
349
+ $order, $closeData['items_to_capture'], $orderData['captured_offline']);
350
  }
351
+ if (count($closeData['items_to_return']['qtys'])) {
352
+ $result['creditmemo_result'] = $this->_getCreditMemoApi()->create(
353
+ $order, $closeData['items_to_return'], $orderData['captured_offline']);
354
  }
355
  /**
356
  * Cancel the rest items if any
361
  }
362
  $order->save();
363
  $result['status'] = RetailOps_Api_Helper_Data::API_STATUS_SUCCESS;
364
+
365
+ Mage::dispatchEvent(
366
+ 'retailops_order_close_after',
367
+ array(
368
+ 'order' => $order,
369
+ 'result' => $result,
370
+ )
371
+ );
372
  }
373
  } catch (Exception $e) {
374
  $result['status'] = RetailOps_Api_Helper_Data::API_STATUS_FAIL;
390
  return Mage::getModel('retailops_api/return_api');
391
  }
392
 
393
+ protected function _fractionalBaseShipping($order, $qtys = array(), $fullyShipped = false)
394
+ {
395
+ if (!count($qtys) && $fullyShipped) {
396
+ return $order->getBaseShippingAmount();
397
+ }
398
+
399
+ $itemsTotal = 0;
400
+ $qtysTotal = 0;
401
+ $items = $order->getAllItems();
402
+ foreach ($items as $item) {
403
+ $itemsTotal += $item->getBaseRowTotal();
404
+ if (isset($qtys[$item->getId()])) {
405
+ $qtysTotal += $item->getBaseRowTotal() * ($qtys[$item->getId()] / $item->getQtyOrdered());
406
+ }
407
+ }
408
+
409
+ return $order->getBaseShippingAmount() * ($qtysTotal / $itemsTotal);
410
+ }
411
+
412
  /**
413
  * @param Mage_Sales_Model_Order $order
414
  * @param array $itemsQty
417
  * @param bool $includeComment
418
  * @return string
419
  */
420
+ protected function _createInvoiceAndCapture($order, $invoiceData, $capturedOffline = false, $comment = null, $email = false, $includeComment = false)
421
  {
422
  /** @var $helper RetailOps_Api_Helper_Data */
423
  $helper = Mage::helper('retailops_api');
424
  try {
425
  $itemsQtyFomratted = array();
426
+ if ($invoiceData && $invoiceData['qtys']) {
427
  foreach ($order->getAllItems() as $item) {
428
+ $itemsQtyFomratted[$item->getId()]
429
+ = isset($invoiceData['qtys'][$item->getId()]) ? $invoiceData['qtys'][$item->getId()] : 0;
430
  }
431
  }
432
  $invoice = $order->prepareInvoice($itemsQtyFomratted);
433
+
434
+ if (isset($invoiceData['shipping_amount'])) {
435
+ $originalInvoiceShippingAmount = $invoice->getShippingAmount();
436
+ $originalInvoiceBaseShippingAmount = $invoice->getBaseShippingAmount();
437
+
438
+ $shippingPercent = $invoiceData['shipping_amount'] / $order->getBaseShippingAmount();
439
+
440
+ $newInvoiceShippingAmount = $order->getShippingAmount() * $shippingPercent;
441
+ $newInvoiceBaseShippingAmount = $invoiceData['shipping_amount'];
442
+
443
+ $invoice->setShippingAmount(Mage::app()->getStore()->roundPrice($newInvoiceShippingAmount));
444
+ $invoice->setBaseShippingAmount(Mage::app()->getStore()->roundPrice($newInvoiceBaseShippingAmount));
445
+ $invoice->setShippingInclTax(Mage::app()->getStore()->roundPrice($order->getShippingInclTax() * $shippingPercent));
446
+ $invoice->setBaseShippingInclTax(Mage::app()->getStore()->roundPrice($order->getBaseShippingInclTax() * $shippingPercent));
447
+
448
+ $invoice->setGrandTotal(Mage::app()->getStore()->roundPrice(
449
+ $invoice->getGrandTotal() - ($originalInvoiceShippingAmount - $newInvoiceShippingAmount)));
450
+ $invoice->setBaseGrandTotal(Mage::app()->getStore()->roundPrice(
451
+ $invoice->getBaseGrandTotal() - ($originalInvoiceBaseShippingAmount - $newInvoiceBaseShippingAmount)));
452
+ }
453
+
454
  $invoice->setRequestedCaptureCase($capturedOffline
455
  ? Mage_Sales_Model_Order_Invoice::CAPTURE_OFFLINE : Mage_Sales_Model_Order_Invoice::CAPTURE_ONLINE);
456
  $invoice->register();
app/code/community/RetailOps/Api/etc/config.xml CHANGED
@@ -25,7 +25,7 @@ THE SOFTWARE.
25
  <config>
26
  <modules>
27
  <RetailOps_Api>
28
- <version>1.0.4</version>
29
  </RetailOps_Api>
30
  </modules>
31
  <global>
25
  <config>
26
  <modules>
27
  <RetailOps_Api>
28
+ <version>1.0.6</version>
29
  </RetailOps_Api>
30
  </modules>
31
  <global>
app/design/adminhtml/default/default/template/retailops/order/view/tab/retailops.phtml DELETED
@@ -1,60 +0,0 @@
1
- <!--
2
- The MIT License (MIT)
3
-
4
- Copyright (c) 2015 Gud Technologies Incorporated (RetailOps by GüdTech)
5
-
6
- Permission is hereby granted, free of charge, to any person obtaining a copy
7
- of this software and associated documentation files (the "Software"), to deal
8
- in the Software without restriction, including without limitation the rights
9
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
- copies of the Software, and to permit persons to whom the Software is
11
- furnished to do so, subject to the following conditions:
12
-
13
- The above copyright notice and this permission notice shall be included in
14
- all copies or substantial portions of the Software.
15
-
16
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
- THE SOFTWARE.
23
- -->
24
- <div class="entry-edit" id="retops-info">
25
- <div class="entry-edit-head">
26
- <h4><?php echo $this->__('RetailOps'); ?></h4>
27
- </div>
28
- <div class="fieldset fieldset-wide">
29
- <div id="status_form" class="order-history-form">
30
- <span class="field-row">
31
- <label class="normal" for="history_status"><?php echo Mage::helper('sales')->__('Status') ?></label><br/>
32
- <select name="retops[status]" class="select" id="retops_status">
33
- <?php foreach ($this->getStatuses() as $_code=>$_label): ?>
34
- <option value="<?php echo $_code ?>"<?php if($_code==$this->getOrder()->getRetailopsStatus()): ?> selected="selected"<?php endif; ?>><?php echo $_label ?></option>
35
- <?php endforeach; ?>
36
- </select>
37
- </span>
38
- <span class="field-row">
39
- <label class="normal" for="status_comment"><?php echo Mage::helper('sales')->__('Comment') ?></label>
40
- <textarea name="retops[comment]" rows="3" cols="5" style="height:6em; width:99%;" id="retops_comment"><?php echo $this->getOrder()->getRetailopsStatusComment() ?></textarea>
41
- </span>
42
- <div class="f-right">
43
- <?php echo $this->getChildHtml('submit_button') ?>
44
- </div>
45
- <div class="clear"></div>
46
- </div>
47
- </div>
48
- <div class="divider"></div>
49
- <ul class="note-list">
50
- <?php foreach ($this->getRetailOpsStatusHistory() as $_item): ?>
51
- <li>
52
- <strong><?php echo $this->helper('core')->formatDate($_item->getCreatedAt(), 'medium') ?></strong>
53
- <?php echo $this->helper('core')->formatTime($_item->getCreatedAt(), 'medium') ?><span class="separator">|</span><strong><?php echo $_item->getStatus() ?></strong>
54
- <?php if ($_item->getComment()): ?>
55
- <br/><?php echo $this->escapeHtml($_item->getComment(), array('b', 'br', 'strong', 'i', 'u', 'a')) ?>
56
- <?php endif; ?>
57
- </li>
58
- <?php endforeach; ?>
59
- </ul>
60
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/etc/modules/RetailOps_Api.xml CHANGED
File without changes
package.xml CHANGED
@@ -1,9 +1,9 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>RetailOps_Api</name>
4
- <version>1.0.5</version>
5
  <stability>stable</stability>
6
- <license>Massachusetts Institute of Technology License (MITL)</license>
7
  <channel>community</channel>
8
  <extends/>
9
  <summary>Seamless Magento integration with the RetailOps distributed order management platform.</summary>
@@ -16,11 +16,11 @@ The RetailOps extension for Magento allows for a seamless integration with Retai
16
  The functionality provided by the RetailOps extension for Magento includes catalog and inventory data export from RetailOps to Magento, Magento order processing including import into RetailOps, status updates, shipment tracking, item returns and order cancelations.&#xD;
17
  &lt;br /&gt;&lt;br /&gt;&#xD;
18
  For more details or to sign up for a demo, visit: &lt;a href="http://www.retailops.com"&gt;http://www.retailops.com&lt;/a&gt;</description>
19
- <notes>Fix for invoicing of virtual items upon order completion.</notes>
20
- <authors><author><name>Daniel Norman</name><user>RetailOps</user><email>daniel@retailops.com</email></author></authors>
21
- <date>2017-01-12</date>
22
- <time>20:00:17</time>
23
- <contents><target name="mageetc"><dir name="modules"><file name="RetailOps_Api.xml" hash="4efaf09b352f1f122f0af83342bdef07"/></dir></target><target name="magecommunity"><dir name="RetailOps"><dir name="Api"><dir name="Block"><dir name="Adminhtml"><dir name="Sales"><dir name="Order"><dir name="View"><dir name="Tab"><file name="Retailops.php" hash="27e0a91fcf5c0aaac5a545c16574465e"/></dir></dir></dir></dir></dir></dir><file name="Exception.php" hash="921703ce05b3e8d630fc8a36baa25d12"/><dir name="Helper"><file name="Data.php" hash="cb10d1f57ba9b7f96bd77b106c950a83"/></dir><dir name="Model"><file name="Api.php" hash="65e9e16cb8ee9c75c746d689f7f9e03e"/><dir name="Catalog"><dir name="Adapter"><file name="Abstract.php" hash="61a561a95bb40071d4bb7c2e02e63c46"/><file name="Attribute.php" hash="07089e8a1eb33b9f723885284926290e"/><file name="Bundle.php" hash="6777aa2ba12fdec543713cae97d50fe3"/><file name="Category.php" hash="126ffc57043e2291f5e7bb4700e660c5"/><file name="Configurable.php" hash="2a4a8eae9ce4ea9cad420dff14abb391"/><file name="Default.php" hash="c0e88b545e55867213795db1801601a1"/><file name="Downloadable.php" hash="dd2d4cf7650268861175c5cecf6ed1f2"/><file name="Link.php" hash="887104e69a274352867286c194172a8f"/><file name="Media.php" hash="162672b4e087d7088f903a7795303a69"/><file name="Media.php.newest~" hash="ed58402ae92e879ce06b4aa21acea7b5"/><file name="Option.php" hash="d33d2a018f3ba2aa9460ec208df7fb95"/><file name="Tag.php" hash="615eff9ad88ab0c33122cb423f51fa67"/><file name="media_cron.php~" hash="f5277fe4484634b8a8e4b3bcb8771ec8"/></dir><file name="Api.php" hash="b0b25c3897d67bc3bb6967d569a9ebb6"/><file name="Exception.php" hash="9a1ea92e48522ddaaa24e42dde94d0ef"/><dir name="Media"><file name="Item.php" hash="cf68048a5a9284fa2e3a50749b41235d"/></dir><dir name="Pull"><file name="Api.php" hash="b183269002499dfa29ad692904f41949"/></dir><dir name="Push"><file name="Api.php" hash="af7fcd65e4d6db054c0b9879673e18f5"/><dir name="Downloadable"><file name="Validator.php" hash="a2b4eb49b62e212eae06a0f55dfa393e"/></dir></dir></dir><dir name="Inventory"><file name="Api.php" hash="ae5f0249d92b6582e04729a749cb6168"/></dir><file name="Observer.php" hash="7ef2c195010ae4c81b676d3c177e23e5"/><dir name="Order"><file name="Api.php" hash="69beaf68afc724619a7dffbf923f0d08"/><dir name="Status"><file name="History.php" hash="39aae107a2029de67ecb01477508f271"/></dir></dir><dir name="Resource"><file name="Api.php" hash="83f50069a00347b93b0825106f246a5a"/><dir name="Catalog"><dir name="Media"><dir name="Item"><file name="Collection.php" hash="5938f25540bd59e75538eda614637179"/></dir><file name="Item.php" hash="eb3292a63811de285d2f44a6cb0dd630"/></dir></dir><dir name="Order"><dir name="Status"><dir name="History"><file name="Collection.php" hash="7427e972c92a5a435b772779a5548d29"/></dir><file name="History.php" hash="eab86f946bd58e5ab86d1cca21eee435"/></dir></dir></dir><dir name="Return"><file name="Api.php" hash="308188198efbba49e9f8c15938740d45"/></dir><dir name="Shipment"><file name="Api.php" hash="b302f7bd48070184ad274af9b13ec9ad"/></dir><dir name="System"><dir name="Config"><dir name="Source"><dir name="Catalog"><file name="AttributeSet.php" hash="a158e6ee2971b6464a184f6f07d2a5dd"/></dir></dir></dir></dir></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Sales"><file name="OrderController.php" hash="9b620414e2f98a6764f803bdaa7d01d3"/></dir></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="60053ceed8f5e0d8d175331fb239c7f5"/><file name="api.xml" hash="32f6e0212a770054748aefd338bb2c85"/><file name="config.xml" hash="0c914859196cadb162be6777ac664f35"/><file name="system.xml" hash="5840692fb14c6d5d7848753bce79aa53"/></dir><dir name="sql"><dir name="retailops_api_setup"><file name="install-1.0.0.php" hash="3edc90b95f4219c9508be3de6a86dda1"/><file name="upgrade-1.0.0-1.0.1.php" hash="63724e6209e0ef59696ffdd6a14dc738"/><file name="upgrade-1.0.1-1.0.2.php" hash="a5c7795cd35f9af984c729bd3d3cd18a"/><file name="upgrade-1.0.2-1.0.3.php" hash="3987d4fda58f7545469700df599b050a"/><file name="upgrade-1.0.2-1.0.3.php~" hash="a5c7795cd35f9af984c729bd3d3cd18a"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="retailops.xml" hash="8879a617964a66e0e02731e262234637"/></dir><dir name="template"><dir name="retailops"><dir name="order"><dir name="view"><dir name="tab"><file name="retailops.phtml" hash="51d17085f74fb4ad1e09b987d7a0e733"/></dir></dir></dir></dir></dir></dir></dir></dir></target></contents>
24
  <compatible/>
25
- <dependencies><required><php><min>5.4.0</min><max>5.6.0</max></php></required></dependencies>
26
  </package>
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>RetailOps_Api</name>
4
+ <version>1.0.6</version>
5
  <stability>stable</stability>
6
+ <license uri="http://www.opensource.org/licenses/mit-license.php">MIT License</license>
7
  <channel>community</channel>
8
  <extends/>
9
  <summary>Seamless Magento integration with the RetailOps distributed order management platform.</summary>
16
  The functionality provided by the RetailOps extension for Magento includes catalog and inventory data export from RetailOps to Magento, Magento order processing including import into RetailOps, status updates, shipment tracking, item returns and order cancelations.&#xD;
17
  &lt;br /&gt;&lt;br /&gt;&#xD;
18
  For more details or to sign up for a demo, visit: &lt;a href="http://www.retailops.com"&gt;http://www.retailops.com&lt;/a&gt;</description>
19
+ <notes>Fixes for shipping invoicing/refunds.</notes>
20
+ <authors><author><name>Daniel Norman</name><user>RetailOps</user><email>daniel@retailops.com</email></author><author><name>Justin Schell</name><user>justin_gudtech</user><email>justin@gudtech.com</email></author></authors>
21
+ <date>2017-04-14</date>
22
+ <time>01:52:23</time>
23
+ <contents><target name="magecommunity"><dir name="RetailOps"><dir name="Api"><dir name="Block"><dir name="Adminhtml"><dir name="Sales"><dir name="Order"><dir name="View"><dir name="Tab"><file name="Retailops.php" hash="27e0a91fcf5c0aaac5a545c16574465e"/></dir></dir></dir></dir></dir></dir><file name="Exception.php" hash="921703ce05b3e8d630fc8a36baa25d12"/><dir name="Helper"><file name="Data.php" hash="cb10d1f57ba9b7f96bd77b106c950a83"/></dir><dir name="Model"><file name="Api.php" hash="65e9e16cb8ee9c75c746d689f7f9e03e"/><dir name="Catalog"><dir name="Adapter"><file name="Abstract.php" hash="61a561a95bb40071d4bb7c2e02e63c46"/><file name="Attribute.php" hash="07089e8a1eb33b9f723885284926290e"/><file name="Bundle.php" hash="6777aa2ba12fdec543713cae97d50fe3"/><file name="Category.php" hash="126ffc57043e2291f5e7bb4700e660c5"/><file name="Configurable.php" hash="2a4a8eae9ce4ea9cad420dff14abb391"/><file name="Default.php" hash="c0e88b545e55867213795db1801601a1"/><file name="Downloadable.php" hash="dd2d4cf7650268861175c5cecf6ed1f2"/><file name="Link.php" hash="887104e69a274352867286c194172a8f"/><file name="Media.php" hash="28c50679b937142bc259c65f5167c00d"/><file name="Media.php.newest~" hash="ed58402ae92e879ce06b4aa21acea7b5"/><file name="Option.php" hash="d33d2a018f3ba2aa9460ec208df7fb95"/><file name="Tag.php" hash="615eff9ad88ab0c33122cb423f51fa67"/><file name="media_cron.php~" hash="f5277fe4484634b8a8e4b3bcb8771ec8"/></dir><file name="Api.php" hash="b0b25c3897d67bc3bb6967d569a9ebb6"/><file name="Exception.php" hash="9a1ea92e48522ddaaa24e42dde94d0ef"/><dir name="Media"><file name="Item.php" hash="cf68048a5a9284fa2e3a50749b41235d"/></dir><dir name="Pull"><file name="Api.php" hash="b183269002499dfa29ad692904f41949"/></dir><dir name="Push"><file name="Api.php" hash="af7fcd65e4d6db054c0b9879673e18f5"/><dir name="Downloadable"><file name="Validator.php" hash="a2b4eb49b62e212eae06a0f55dfa393e"/></dir></dir></dir><dir name="Inventory"><file name="Api.php" hash="ae5f0249d92b6582e04729a749cb6168"/></dir><file name="Observer.php" hash="7ef2c195010ae4c81b676d3c177e23e5"/><dir name="Order"><file name="Api.php" hash="69beaf68afc724619a7dffbf923f0d08"/><dir name="Status"><file name="History.php" hash="39aae107a2029de67ecb01477508f271"/></dir></dir><dir name="Resource"><file name="Api.php" hash="83f50069a00347b93b0825106f246a5a"/><dir name="Catalog"><dir name="Media"><dir name="Item"><file name="Collection.php" hash="5938f25540bd59e75538eda614637179"/></dir><file name="Item.php" hash="eb3292a63811de285d2f44a6cb0dd630"/></dir></dir><dir name="Order"><dir name="Status"><dir name="History"><file name="Collection.php" hash="7427e972c92a5a435b772779a5548d29"/></dir><file name="History.php" hash="eab86f946bd58e5ab86d1cca21eee435"/></dir></dir></dir><dir name="Return"><file name="Api.php" hash="308188198efbba49e9f8c15938740d45"/></dir><dir name="Shipment"><file name="Api.php" hash="275de6f370914a07e93b0a49114b15ce"/></dir><dir name="System"><dir name="Config"><dir name="Source"><dir name="Catalog"><file name="AttributeSet.php" hash="a158e6ee2971b6464a184f6f07d2a5dd"/></dir></dir></dir></dir></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Sales"><file name="OrderController.php" hash="9b620414e2f98a6764f803bdaa7d01d3"/></dir></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="60053ceed8f5e0d8d175331fb239c7f5"/><file name="api.xml" hash="32f6e0212a770054748aefd338bb2c85"/><file name="config.xml" hash="a6e535441447331fa92597f74110788d"/><file name="system.xml" hash="5840692fb14c6d5d7848753bce79aa53"/></dir><dir name="sql"><dir name="retailops_api_setup"><file name="install-1.0.0.php" hash="3edc90b95f4219c9508be3de6a86dda1"/><file name="upgrade-1.0.0-1.0.1.php" hash="63724e6209e0ef59696ffdd6a14dc738"/><file name="upgrade-1.0.1-1.0.2.php" hash="a5c7795cd35f9af984c729bd3d3cd18a"/><file name="upgrade-1.0.2-1.0.3.php" hash="3987d4fda58f7545469700df599b050a"/><file name="upgrade-1.0.2-1.0.3.php~" hash="a5c7795cd35f9af984c729bd3d3cd18a"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="retailops.xml" hash="8879a617964a66e0e02731e262234637"/></dir><dir name="template"><dir name="retailops"><dir name="order"><dir name="view"><dir name="tab"><file name="retailops.phtml" hash="51d17085f74fb4ad1e09b987d7a0e733"/></dir></dir></dir></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="RetailOps_Api.xml" hash="4efaf09b352f1f122f0af83342bdef07"/></dir></target></contents>
24
  <compatible/>
25
+ <dependencies><required><php><min>5.1.0</min><max>6.0.0</max></php></required></dependencies>
26
  </package>