Swift_Swiftplugin - Version 1.9.1

Version Notes

The product feed will now include prices with (or without) taxes applied, where applicable to their setup.

Product feed will fetch child products of grouped products. Child products fetches information from it's parent and ignores parents that are not saleable.

Order Feed now works out the correct cost of an order by applying the tax specified at time of order. Rather than item's base price.

Download this release

Release Info

Developer Simon Cooper
Extension Swift_Swiftplugin
Version 1.9.1
Comparing to
See all releases


Code changes from version 1.9.0 to 1.9.1

app/code/community/Swift/Swiftplugin/Model/Observer.php CHANGED
@@ -80,7 +80,7 @@ class Swift_SwiftPlugin_Model_Observer
80
  // collect item data and assign them to session
81
  $productData = array();
82
  foreach($items as $item) {
83
- $productData[] = array('product' => $item->getProductId(), 'quantity' => $item->getQty(), 'price' => $item->getPrice());
84
  }
85
  Mage::getSingleton('core/session')->setSwiftProductsList($productData);
86
  }
80
  // collect item data and assign them to session
81
  $productData = array();
82
  foreach($items as $item) {
83
+ $productData[] = array('product' => $item->getProductId(), 'quantity' => $item->getQty(), 'price' => $item->getPriceInclTax());
84
  }
85
  Mage::getSingleton('core/session')->setSwiftProductsList($productData);
86
  }
app/code/community/Swift/Swiftplugin/Model/XmlProduct.php CHANGED
@@ -37,9 +37,8 @@ class Swift_Swiftplugin_Model_XmlProduct {
37
  */
38
  public function generate_xml() {
39
  //limit the data parsed
40
- $productCollection = Mage::getModel('catalog/product')->getCollection()
41
- ->addAttributeToSelect(array('product_id','name','description', 'short_description','price','url_path','image','thumbnail', 'small_image','special_price','sku','special_to_date', 'special_from_date'))
42
- ->addAttributeToFilter('visibility', array('in' => array(Mage_Catalog_Model_Product_Visibility::VISIBILITY_IN_CATALOG, Mage_Catalog_Model_Product_Visibility::VISIBILITY_IN_SEARCH, Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH)))
43
  ->addAttributeToFilter('status', array('in' => Mage::getSingleton('catalog/product_status')->getSaleableStatusIds()))
44
  ->setCurPage($this->offset)
45
  ->setPageSize($this->limit);
@@ -49,30 +48,46 @@ class Swift_Swiftplugin_Model_XmlProduct {
49
 
50
  $today = time();
51
 
52
- if ($this->offset <= $productCollection->getLastPageNumber()) {
 
 
53
 
54
- foreach ($productCollection as $product) {
 
 
55
 
56
- $stock_item = Mage::getModel('cataloginventory/stock_item')->loadByProduct( $product->getId() );
57
 
58
  // check if in stock
59
-
60
  $qty = $stock_item->getData('qty');
61
  $manageStock = $stock_item->getData('manage_stock');
62
  $inStock = $stock_item->getData('is_in_stock');
63
 
64
  if(!($manageStock == 1 && ($qty<1 || $inStock == 0))) {
65
 
 
66
 
 
67
  $tempXml = array();
68
  $method = 'g:id';
69
- $tempXml[] = $xml -> $method(base64_encode($product->getId()));
70
- $tempXml[] = $xml -> title(base64_encode(htmlspecialchars($product->getName(), ENT_QUOTES)));
71
- $tempXml[] = $xml -> description(base64_encode(htmlspecialchars($product->getDescription(), ENT_QUOTES)));
72
- $tempXml[] = $xml -> short_description(base64_encode(htmlspecialchars($product->getShortDescription(), ENT_QUOTES)));
73
-
74
- $parentIds = Mage::getModel('catalog/product_type_grouped')->getParentIdsByChild($product->getId());
75
-
 
 
 
 
 
 
 
 
 
 
 
76
  if (!empty($parentIds)) {
77
 
78
  foreach($parentIds as $parentId) {
@@ -81,40 +96,73 @@ class Swift_Swiftplugin_Model_XmlProduct {
81
  $tempXml[] = $xml -> link(base64_encode($groupPath));
82
  break;
83
  }
84
-
85
  }
86
  else {
87
- $tempXml[] = $xml -> link(base64_encode($product->getProductUrl()));
88
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
89
 
90
- $method = 'g:image_link';
91
- $tempXml[] = $xml -> $method(base64_encode($product->getImage() == 'no_selection' ? '' : Mage::getModel('catalog/product_media_config')->getMediaUrl($product->getImage())));
92
- $method = 'g:small_image_link';
93
- $tempXml[] = $xml -> $method(base64_encode($product->getSmallImage() == 'no_selection' ? '' : Mage::getModel('catalog/product_media_config')->getMediaUrl($product->getSmallImage())));
94
- $method = 'g:additional_image_link';
95
- $tempXml[] = $xml -> $method(base64_encode($product->getThumbnail() == 'no_selection' ? '' : Mage::getModel('catalog/product_media_config')->getMediaUrl($product->getThumbnail())));
 
 
 
 
 
 
96
  $method = 'g:price';
97
- $tempXml[] = $xml -> $method(base64_encode($product->getPrice()));
 
 
 
 
 
 
 
98
  $method = 'g:sale_price';
99
-
100
  $special_price = '';
101
-
102
- if (!is_null($product->getSpecialPrice())) {
 
 
 
 
 
 
 
 
103
 
104
- if($today >= strtotime($product->getSpecialFromDate()) && $today <= strtotime($product->getSpecialToDate()) || $today >= strtotime($product->getSpecialFromDate()) && is_null($product->getSpecialToDate())) {
105
- $special_price = $product->getSpecialPrice();
106
  }
107
 
108
- }
109
 
110
  $tempXml[] = $xml -> $method(base64_encode($special_price));
111
- $categoryId = $product->getCategoryIds();
112
  $categoryId = array_shift($categoryId);
113
  $category = Mage::getModel('catalog/category')->load($categoryId);
114
  $tempXml[] = $xml -> subcategory(base64_encode(is_null($category->getName()) ? '' : htmlspecialchars($category->getName(), ENT_QUOTES)));
115
  $pCategory = Mage::getModel('catalog/category')->load($category->getParentId());
116
  $tempXml[] = $xml -> parentcategory(base64_encode(is_null($pCategory->getName()) ? '' : htmlspecialchars($pCategory->getName(), ENT_QUOTES)));
117
- $tempXml[] = $xml -> sku(base64_encode(is_null($product->getSku()) ? null : htmlspecialchars($product->getSku(), ENT_QUOTES)));
118
  $xmlRow[] = $xml -> product(implode($tempXml));
119
 
120
  }
@@ -126,6 +174,4 @@ class Swift_Swiftplugin_Model_XmlProduct {
126
  echo '<?xml version="1.0" encoding="UTF-8"?>'. "\n" . $xml -> urlset($xml->version(self::SWIFT_XML_PRODUCT_VERSION).$xml -> products(implode($xmlRow)), array('xmlns:g' => "http://base.google.com/ns/1.0"));
127
  die();
128
  }
129
- }
130
-
131
- ?>
37
  */
38
  public function generate_xml() {
39
  //limit the data parsed
40
+ $_productCollection = Mage::getModel('catalog/product')->getCollection()
41
+ ->addAttributeToSelect(array('tax_class_id', 'visibility', 'product_id','name','description', 'short_description','price','url_path','image','thumbnail', 'small_image','special_price','sku','special_to_date', 'special_from_date'))
 
42
  ->addAttributeToFilter('status', array('in' => Mage::getSingleton('catalog/product_status')->getSaleableStatusIds()))
43
  ->setCurPage($this->offset)
44
  ->setPageSize($this->limit);
48
 
49
  $today = time();
50
 
51
+ $_coreHelper = Mage::helper('core');
52
+ $_weeeHelper = Mage::helper('weee');
53
+ $_taxHelper = Mage::helper('tax');
54
 
55
+ if ($this->offset <= $_productCollection->getLastPageNumber()) {
56
+
57
+ foreach ($_productCollection as $_product) {
58
 
59
+ $stock_item = Mage::getModel('cataloginventory/stock_item')->loadByProduct( $_product->getId() );
60
 
61
  // check if in stock
 
62
  $qty = $stock_item->getData('qty');
63
  $manageStock = $stock_item->getData('manage_stock');
64
  $inStock = $stock_item->getData('is_in_stock');
65
 
66
  if(!($manageStock == 1 && ($qty<1 || $inStock == 0))) {
67
 
68
+ $_store = $_product->getStore();
69
 
70
+
71
  $tempXml = array();
72
  $method = 'g:id';
73
+ $tempXml[] = $xml -> $method(base64_encode($_product->getId()));
74
+ $tempXml[] = $xml -> title(base64_encode(htmlspecialchars($_product->getName(), ENT_QUOTES)));
75
+ $tempXml[] = $xml -> description(base64_encode(htmlspecialchars($_product->getDescription(), ENT_QUOTES)));
76
+ $tempXml[] = $xml -> short_description(base64_encode(htmlspecialchars($_product->getShortDescription(), ENT_QUOTES)));
77
+
78
+ // if the product is a grouped product then fetch it's parent
79
+ $parentIds = Mage::getModel('catalog/product_type_grouped')->getParentIdsByChild($_product->getId());
80
+
81
+ // we only want products with visibilty or has a parent, if not we need to skip it
82
+ if ($_product->getVisibility() == Mage_Catalog_Model_Product_Visibility::VISIBILITY_NOT_VISIBLE) {
83
+ if (empty($parentIds)) {
84
+ continue;
85
+ }
86
+ }
87
+
88
+ $groupProduct = null;
89
+
90
+ // get parents and use them for the parent url
91
  if (!empty($parentIds)) {
92
 
93
  foreach($parentIds as $parentId) {
96
  $tempXml[] = $xml -> link(base64_encode($groupPath));
97
  break;
98
  }
99
+
100
  }
101
  else {
102
+ $tempXml[] = $xml -> link(base64_encode($_product->getProductUrl()));
103
  }
104
+
105
+ // if the product does not have an image assigned then we want to use the parent
106
+ if (!empty($parentIds) && ($_product->getImage() == 'no_selection' || $_product->getSmallImage() == 'no_selection' || $_product->getThumbnail() == 'no_selection')) {
107
+
108
+ if (is_null($groupProduct)) {
109
+ continue;
110
+ }
111
+
112
+ // group product
113
+ $method = 'g:image_link';
114
+ $tempXml[] = $xml -> $method(base64_encode($groupProduct->getImage() == 'no_selection' ? '' : Mage::getModel('catalog/product_media_config')->getMediaUrl($groupProduct->getImage())));
115
+ $method = 'g:small_image_link';
116
+ $tempXml[] = $xml -> $method(base64_encode($groupProduct->getSmallImage() == 'no_selection' ? '' : Mage::getModel('catalog/product_media_config')->getMediaUrl($groupProduct->getSmallImage())));
117
+ $method = 'g:additional_image_link';
118
+ $tempXml[] = $xml -> $method(base64_encode($groupProduct->getThumbnail() == 'no_selection' ? '' : Mage::getModel('catalog/product_media_config')->getMediaUrl($groupProduct->getThumbnail())));
119
 
120
+ }
121
+ else {
122
+ // get normal products
123
+ $method = 'g:image_link';
124
+ $tempXml[] = $xml -> $method(base64_encode($_product->getImage() == 'no_selection' ? '' : Mage::getModel('catalog/product_media_config')->getMediaUrl($_product->getImage())));
125
+ $method = 'g:small_image_link';
126
+ $tempXml[] = $xml -> $method(base64_encode($_product->getSmallImage() == 'no_selection' ? '' : Mage::getModel('catalog/product_media_config')->getMediaUrl($_product->getSmallImage())));
127
+ $method = 'g:additional_image_link';
128
+ $tempXml[] = $xml -> $method(base64_encode($_product->getThumbnail() == 'no_selection' ? '' : Mage::getModel('catalog/product_media_config')->getMediaUrl($_product->getThumbnail())));
129
+ }
130
+
131
+ // calculate price, based on final price, tax is calculated, system given chance to diaplay amount with/without tax
132
  $method = 'g:price';
133
+ $_price = $_taxHelper->getPrice($_product, $_product->getFinalPrice());
134
+ if ($_taxHelper->displayPriceIncludingTax() || $_taxHelper->displayBothPrices()) {
135
+ // as magento config specifies displaying display both prices or prices with tax included make sure we check if tax is applied
136
+ $_price = $_taxHelper->getPrice($_product, $_product->getFinalPrice(), true);
137
+ }
138
+
139
+ $tempXml[] = $xml -> $method(base64_encode($_price));
140
+
141
  $method = 'g:sale_price';
 
142
  $special_price = '';
143
+ if (!is_null($_product->getSpecialPrice())) {
144
+
145
+ if($today >= strtotime($_product->getSpecialFromDate()) && $today <= strtotime($_product->getSpecialToDate()) || $today >= strtotime($_product->getSpecialFromDate()) && is_null($_product->getSpecialToDate())) {
146
+
147
+ // calculate price, based on final price, tax is calculated, system given chance to diaplay amount with/without tax
148
+ $special_price = $_taxHelper->getPrice($_product,$_product->getSpecialPrice(), true);
149
+ if ($_taxHelper->displayPriceIncludingTax() || $_taxHelper->displayBothPrices()) {
150
+ // as magento config specifies displaying display both prices or prices with tax included make sure we check if tax is applied
151
+ $special_price = $_taxHelper->getPrice($_product, $_product->getSpecialPrice(), true);
152
+ }
153
 
 
 
154
  }
155
 
156
+ }
157
 
158
  $tempXml[] = $xml -> $method(base64_encode($special_price));
159
+ $categoryId = $_product->getCategoryIds();
160
  $categoryId = array_shift($categoryId);
161
  $category = Mage::getModel('catalog/category')->load($categoryId);
162
  $tempXml[] = $xml -> subcategory(base64_encode(is_null($category->getName()) ? '' : htmlspecialchars($category->getName(), ENT_QUOTES)));
163
  $pCategory = Mage::getModel('catalog/category')->load($category->getParentId());
164
  $tempXml[] = $xml -> parentcategory(base64_encode(is_null($pCategory->getName()) ? '' : htmlspecialchars($pCategory->getName(), ENT_QUOTES)));
165
+ $tempXml[] = $xml -> sku(base64_encode(is_null($_product->getSku()) ? null : htmlspecialchars($_product->getSku(), ENT_QUOTES)));
166
  $xmlRow[] = $xml -> product(implode($tempXml));
167
 
168
  }
174
  echo '<?xml version="1.0" encoding="UTF-8"?>'. "\n" . $xml -> urlset($xml->version(self::SWIFT_XML_PRODUCT_VERSION).$xml -> products(implode($xmlRow)), array('xmlns:g' => "http://base.google.com/ns/1.0"));
175
  die();
176
  }
177
+ }
 
 
app/code/community/Swift/Swiftplugin/controllers/OrdersController.php CHANGED
@@ -50,9 +50,9 @@ class Swift_Swiftplugin_OrdersController extends Mage_Core_Controller_Front_Acti
50
  $products = array();
51
 
52
  foreach($visibleItems as $order_item_key => $orderItem) {
53
- $products[] = array('product' => $orderItem->getId(), 'price' => $orderItem->getPrice(), 'quantity' => $orderItem->getData('qty_ordered'));
54
  }
55
-
56
  $request = new SwiftAPI_Request_PastOrder($domain, $user, $order->getCustomerEmail(), $order->getCustomerFirstname(), $order->getCustomerLastname(), $products, $order->getId(), null, null, $order->getCreatedAt());
57
 
58
  // is curl available
50
  $products = array();
51
 
52
  foreach($visibleItems as $order_item_key => $orderItem) {
53
+ $products[] = array('product' => $orderItem->getId(), 'price' => $orderItem->getPriceInclTax(), 'quantity' => $orderItem->getData('qty_ordered'));
54
  }
55
+
56
  $request = new SwiftAPI_Request_PastOrder($domain, $user, $order->getCustomerEmail(), $order->getCustomerFirstname(), $order->getCustomerLastname(), $products, $order->getId(), null, null, $order->getCreatedAt());
57
 
58
  // is curl available
app/code/community/Swift/Swiftplugin/etc/config.xml CHANGED
@@ -2,7 +2,7 @@
2
  <config>
3
  <modules>
4
  <Swift_Swiftplugin>
5
- <version>1.9.0</version>
6
  </Swift_Swiftplugin>
7
  </modules>
8
  <frontend>
2
  <config>
3
  <modules>
4
  <Swift_Swiftplugin>
5
+ <version>1.9.1</version>
6
  </Swift_Swiftplugin>
7
  </modules>
8
  <frontend>
package.xml CHANGED
@@ -1,7 +1,7 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Swift_Swiftplugin</name>
4
- <version>1.9.0</version>
5
  <stability>stable</stability>
6
  <license uri="http://opensource.org/licenses/LGPL-3.0">LGPL</license>
7
  <channel>community</channel>
@@ -18,11 +18,15 @@ The extension uses background JavaScript calls to collect and store the customer
18
  &lt;p&gt;&#xD;
19
  The extension is easy to set up and uses Magento&#x2019;s built in features to collect information and send emails to the customers. Visit swiftcrm.net for prices and free trails.&#xD;
20
  &lt;/p&gt;</description>
21
- <notes>Added curl support, but with backwards compatability if neccessary.</notes>
 
 
 
 
22
  <authors><author><name>Simon Cooper</name><user>Netready</user><email>simon@netready.biz</email></author></authors>
23
- <date>2017-03-21</date>
24
- <time>15:07:00</time>
25
- <contents><target name="magelib"><dir name="libXML"><file name="xml.php" hash="c20ca4a39971acf4605247712186b9ec"/></dir><dir name="SwiftAPI"><file name="SwiftAPI.php" hash="8bb2f97586dbd62da6fd0d6781b67ae6"/><file name="SwiftAPI_Exception.php" hash="879b899a7961f4de1212b7296ccafb16"/><file name="SwiftAPI_Product.php" hash="063922cccb485d81c6022de5c4e8e044"/><file name="SwiftAPI_Request.php" hash="f072a4c42fe3767d769f8e9f9c824ecd"/><file name="SwiftAPI_Request_Cart.php" hash="f8955c78200ddb0512adb5214fd64bb2"/><file name="SwiftAPI_Request_EmailPackage.php" hash="a23bdf7699540ece514ec5a6f53ecb12"/><file name="SwiftAPI_Request_Home.php" hash="9268da121dd10db50d5c2675afd1c65e"/><file name="SwiftAPI_Request_Order.php" hash="49ff0d4c501b075f11ef94727d729a75"/><file name="SwiftAPI_Request_OrderPackage.php" hash="45ad4af3b24bfab66f96b493c830ceab"/><file name="SwiftAPI_Request_PastOrder.php" hash="90ac5fb44bd1ad61f39d277d268e3575"/><file name="SwiftAPI_Request_Ping.php" hash="e5e13b71682f8230711d5d2f28f9a534"/><file name="SwiftAPI_Request_Product.php" hash="e5fab27bb2dd45946ed8c143a18fe3c4"/><file name="SwiftAPI_Request_SendMail.php" hash="ba04382a3df6b3e179aed5fe3e809de7"/><file name="SwiftAPI_Request_Subscription.php" hash="5545738b941d8ca4dca69b6059a0cce4"/><file name="SwiftAPI_Request_Unsubscribe.php" hash="78aa37cc0ecb98d501674350a4a409c9"/><file name="SwiftAPI_Request_Version.php" hash="21cebd7eb59698bb0aae55bdeaa23660"/><file name="SwiftAPI_Request_ViewMail.php" hash="f0eb0236c7f6e1fa194d8f05f865a7d8"/><dir name="doc"><file name="SwiftAPI-Specification.html" hash="a31d6c9f13198d017f9f50ac787bea23"/><file name="SwiftAPI-Specification_v3.html" hash="17f8207291313730a72286901c61e44f"/></dir><file name="index.php" hash="82886bb98883bd5868ea04c7d8c88ba5"/><file name="php.ini" hash="ef29c923925a1d1bbc8879c22297daa4"/></dir></target><target name="magecommunity"><dir name="Swift"><dir name="Swiftplugin"><dir name="Block"><dir name="Adminhtml"><dir name="Swift"><dir name="Edit"><file name="Form.php" hash="bd80ab8170f7f2286f13ac579e5249d9"/><dir name="Tab"><file name="Form.php" hash="3d15c45cb2205acabc20376f41a9bd5b"/><file name="Instruct.php" hash="9f34075cc9cdfa92b7876c33fda514de"/></dir><file name="Tabs.php" hash="993769f682fad7d28df79ff3acea97cc"/></dir><file name="Edit.php" hash="d93f75dbaaa7266d91e828b3208fbf2d"/></dir></dir><file name="Swiftblock.php" hash="35b83bdbc2f43cd79d8ef4706128e306"/></dir><dir name="Helper"><file name="Data.php" hash="b65fb579c39dc9e49093bb846894b39a"/></dir><dir name="Model"><dir name="Mysql4"><dir name="Swift"><file name="Collection.php" hash="82de0fe56cd875d3e78c8fc690424ee1"/></dir><file name="Swift.php" hash="252d5f2ecb1119804b415758d2db6800"/><dir name="Swiftorders"><file name="Collection.php" hash="a9e75003a18fcedc8badf1ab3ae79719"/></dir><file name="Swiftorders.php" hash="881185eb5fa8af8fe385c1bfaaeb94e0"/></dir><file name="Observer.php" hash="8bb4dd498a57f1166ed1c85a2b8ab0e0"/><file name="Swift.php" hash="1f9e49d4db7f8987cfd8858061fedc6a"/><file name="Swiftorders.php" hash="e3f2d23f00e0ad8309a958a24b613678"/><file name="XmlProduct.php" hash="349444e751c37dae8e1e825ee581861b"/></dir><dir name="controllers"><dir name="Adminhtml"><file name="IndexController.php" hash="5d4cecfaee823681cedabc3a7706b1f1"/></dir><file name="MailController.php" hash="b1126e2aa65b11890dd83e12f8d46056"/><file name="OrdersController.php" hash="36ca421569e18985c94af72f1d09bffc"/><file name="VersionController.php" hash="b9bebb51f946430a2dc7bfc82f96bf36"/><file name="XmlController.php" hash="e78cc03f619a75d43752e8bde42b0798"/></dir><dir name="etc"><file name="config.xml" hash="1a08f77d1ab0416d9571aaf6160d5318"/></dir><dir name="sql"><dir name="swift_setup"><file name="install-1.1.13.php" hash="2447b5645fc36738373678473cec88dc"/><file name="install-1.1.2.php" hash="00832a00c34cb4c997a96330cb28cbfb"/><file name="install-1.7.0.php" hash="13788c22d8b0ad31c68a775f06333d47"/><file name="upgrade-1.1.12-1.7.1.php" hash="979794d8258b7f3840e9699139505823"/><file name="upgrade-1.1.2-1.1.12.php" hash="cbe3c3fa07facb7b720d7dd518acbeca"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="swift.xml" hash="d80a5229e30cf4b76f5a5150ac1c27c3"/></dir><dir name="template"><dir name="swift"><file name="swiftplugin.phtml" hash="d4d25148e09529e457b6436d7655627b"/></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Swift_all.xml" hash="0ae5a788c805a9fc79b402fe7a02e54d"/></dir></target></contents>
26
  <compatible/>
27
  <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php><extension><name>mcrypt</name><min/><max/></extension></required></dependencies>
28
  </package>
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Swift_Swiftplugin</name>
4
+ <version>1.9.1</version>
5
  <stability>stable</stability>
6
  <license uri="http://opensource.org/licenses/LGPL-3.0">LGPL</license>
7
  <channel>community</channel>
18
  &lt;p&gt;&#xD;
19
  The extension is easy to set up and uses Magento&#x2019;s built in features to collect information and send emails to the customers. Visit swiftcrm.net for prices and free trails.&#xD;
20
  &lt;/p&gt;</description>
21
+ <notes>The product feed will now include prices with (or without) taxes applied, where applicable to their setup.&#xD;
22
+ &#xD;
23
+ Product feed will fetch child products of grouped products. Child products fetches information from it's parent and ignores parents that are not saleable.&#xD;
24
+ &#xD;
25
+ Order Feed now works out the correct cost of an order by applying the tax specified at time of order. Rather than item's base price.</notes>
26
  <authors><author><name>Simon Cooper</name><user>Netready</user><email>simon@netready.biz</email></author></authors>
27
+ <date>2017-05-24</date>
28
+ <time>10:08:40</time>
29
+ <contents><target name="magelib"><dir name="libXML"><file name="xml.php" hash="c20ca4a39971acf4605247712186b9ec"/></dir><dir name="SwiftAPI"><file name="SwiftAPI.php" hash="8bb2f97586dbd62da6fd0d6781b67ae6"/><file name="SwiftAPI_Exception.php" hash="879b899a7961f4de1212b7296ccafb16"/><file name="SwiftAPI_Product.php" hash="063922cccb485d81c6022de5c4e8e044"/><file name="SwiftAPI_Request.php" hash="f072a4c42fe3767d769f8e9f9c824ecd"/><file name="SwiftAPI_Request_Cart.php" hash="f8955c78200ddb0512adb5214fd64bb2"/><file name="SwiftAPI_Request_EmailPackage.php" hash="a23bdf7699540ece514ec5a6f53ecb12"/><file name="SwiftAPI_Request_Home.php" hash="9268da121dd10db50d5c2675afd1c65e"/><file name="SwiftAPI_Request_Order.php" hash="49ff0d4c501b075f11ef94727d729a75"/><file name="SwiftAPI_Request_OrderPackage.php" hash="45ad4af3b24bfab66f96b493c830ceab"/><file name="SwiftAPI_Request_PastOrder.php" hash="90ac5fb44bd1ad61f39d277d268e3575"/><file name="SwiftAPI_Request_Ping.php" hash="e5e13b71682f8230711d5d2f28f9a534"/><file name="SwiftAPI_Request_Product.php" hash="e5fab27bb2dd45946ed8c143a18fe3c4"/><file name="SwiftAPI_Request_SendMail.php" hash="ba04382a3df6b3e179aed5fe3e809de7"/><file name="SwiftAPI_Request_Subscription.php" hash="5545738b941d8ca4dca69b6059a0cce4"/><file name="SwiftAPI_Request_Unsubscribe.php" hash="78aa37cc0ecb98d501674350a4a409c9"/><file name="SwiftAPI_Request_Version.php" hash="21cebd7eb59698bb0aae55bdeaa23660"/><file name="SwiftAPI_Request_ViewMail.php" hash="f0eb0236c7f6e1fa194d8f05f865a7d8"/><dir name="doc"><file name="SwiftAPI-Specification.html" hash="a31d6c9f13198d017f9f50ac787bea23"/><file name="SwiftAPI-Specification_v3.html" hash="17f8207291313730a72286901c61e44f"/></dir><file name="index.php" hash="82886bb98883bd5868ea04c7d8c88ba5"/><file name="php.ini" hash="ef29c923925a1d1bbc8879c22297daa4"/></dir></target><target name="magecommunity"><dir name="Swift"><dir name="Swiftplugin"><dir name="Block"><dir name="Adminhtml"><dir name="Swift"><dir name="Edit"><file name="Form.php" hash="bd80ab8170f7f2286f13ac579e5249d9"/><dir name="Tab"><file name="Form.php" hash="3d15c45cb2205acabc20376f41a9bd5b"/><file name="Instruct.php" hash="9f34075cc9cdfa92b7876c33fda514de"/></dir><file name="Tabs.php" hash="993769f682fad7d28df79ff3acea97cc"/></dir><file name="Edit.php" hash="d93f75dbaaa7266d91e828b3208fbf2d"/></dir></dir><file name="Swiftblock.php" hash="35b83bdbc2f43cd79d8ef4706128e306"/></dir><dir name="Helper"><file name="Data.php" hash="b65fb579c39dc9e49093bb846894b39a"/></dir><dir name="Model"><dir name="Mysql4"><dir name="Swift"><file name="Collection.php" hash="82de0fe56cd875d3e78c8fc690424ee1"/></dir><file name="Swift.php" hash="252d5f2ecb1119804b415758d2db6800"/><dir name="Swiftorders"><file name="Collection.php" hash="a9e75003a18fcedc8badf1ab3ae79719"/></dir><file name="Swiftorders.php" hash="881185eb5fa8af8fe385c1bfaaeb94e0"/></dir><file name="Observer.php" hash="54ec7841eed473c1935eb5b84d826244"/><file name="Swift.php" hash="1f9e49d4db7f8987cfd8858061fedc6a"/><file name="Swiftorders.php" hash="e3f2d23f00e0ad8309a958a24b613678"/><file name="XmlProduct.php" hash="7c8cced0d96cc579175844c52d2cc39c"/></dir><dir name="controllers"><dir name="Adminhtml"><file name="IndexController.php" hash="5d4cecfaee823681cedabc3a7706b1f1"/></dir><file name="MailController.php" hash="b1126e2aa65b11890dd83e12f8d46056"/><file name="OrdersController.php" hash="70f9f1803f966f5ab65bd2727fb56958"/><file name="VersionController.php" hash="b9bebb51f946430a2dc7bfc82f96bf36"/><file name="XmlController.php" hash="e78cc03f619a75d43752e8bde42b0798"/></dir><dir name="etc"><file name="config.xml" hash="386ee3398210a7f4c26cb7d7d0c9622a"/></dir><dir name="sql"><dir name="swift_setup"><file name="install-1.1.13.php" hash="2447b5645fc36738373678473cec88dc"/><file name="install-1.1.2.php" hash="00832a00c34cb4c997a96330cb28cbfb"/><file name="install-1.7.0.php" hash="13788c22d8b0ad31c68a775f06333d47"/><file name="upgrade-1.1.12-1.7.1.php" hash="979794d8258b7f3840e9699139505823"/><file name="upgrade-1.1.2-1.1.12.php" hash="cbe3c3fa07facb7b720d7dd518acbeca"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="swift.xml" hash="d80a5229e30cf4b76f5a5150ac1c27c3"/></dir><dir name="template"><dir name="swift"><file name="swiftplugin.phtml" hash="d4d25148e09529e457b6436d7655627b"/></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Swift_all.xml" hash="0ae5a788c805a9fc79b402fe7a02e54d"/></dir></target></contents>
30
  <compatible/>
31
  <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php><extension><name>mcrypt</name><min/><max/></extension></required></dependencies>
32
  </package>