Version Notes
Notes
Download this release
Release Info
Developer | Bobby Burden |
Extension | iparcel_carthandoff |
Version | 1.5.0 |
Comparing to | |
See all releases |
Code changes from version 1.4.2 to 1.5.0
- app/code/community/Iparcel/All/Helper/Api.php +4 -4
- app/code/community/Iparcel/All/Helper/Data.php +1 -1
- app/code/community/Iparcel/All/Model/Carrier/Iparcel.php +1 -1
- app/code/community/Iparcel/All/Model/Catalog/Product/Observer.php +25 -11
- app/code/community/Iparcel/All/Model/Observer.php +11 -1
- app/code/community/Iparcel/All/controllers/Adminhtml/Iparcel/Sync/AjaxController.php +30 -103
- app/code/community/Iparcel/All/controllers/Adminhtml/Iparcel/SyncController.php +0 -18
- app/code/community/Iparcel/All/controllers/AjaxController.php +3 -1
- app/code/community/Iparcel/All/sql/iparcel_setup/mysql4-upgrade-1.1.0-1.1.1.php +7 -4
- app/code/community/Iparcel/CartHandoff/.DS_Store +0 -0
- app/code/community/Iparcel/CartHandoff/Helper/Api.php +248 -56
- app/code/community/Iparcel/CartHandoff/Model/Observer.php +24 -0
- app/code/community/Iparcel/CartHandoff/controllers/Adminhtml/Ipcarthandoff/Checkitems/CacheController.php +2 -4
- app/code/community/Iparcel/CartHandoff/controllers/HandoffController.php +0 -1
- app/code/community/Iparcel/CartHandoff/etc/config.xml +11 -2
- app/code/community/Iparcel/CartHandoff/etc/system.xml +9 -1
- app/design/adminhtml/default/default/layout/iparcel.xml +0 -11
- app/design/adminhtml/default/default/template/iparcel/sync/ajax/catalog.phtml +3 -1
- app/design/adminhtml/default/default/template/iparcel/sync/ajax/checkitems.phtml +0 -21
- js/iparcel/adminhtml/sync.js +72 -73
- js/iparcel/cart-buttons.js +17 -6
- package.xml +4 -4
app/code/community/Iparcel/All/Helper/Api.php
CHANGED
@@ -74,7 +74,7 @@ class Iparcel_All_Helper_Api
|
|
74 |
|
75 |
/**
|
76 |
* Finds the value of attribute matching the extension's configuration
|
77 |
-
*
|
78 |
* @param Mage_Catalog_Model_Product $product
|
79 |
* @param string $code Attribute code
|
80 |
* @return string
|
@@ -747,7 +747,7 @@ class Iparcel_All_Helper_Api
|
|
747 |
/**
|
748 |
* Accepts a Magento quote or order, then returns an address formatted for
|
749 |
* the API
|
750 |
-
*
|
751 |
* @param object $object Object to extract address information from
|
752 |
* @param bool $request If provided, this shipping rate request is used
|
753 |
* @return array Address information formatted for API requests
|
@@ -825,12 +825,12 @@ class Iparcel_All_Helper_Api
|
|
825 |
// Find the price of the product
|
826 |
$itemPrice = (float) $item->getCalculationPrice();
|
827 |
// if no price and item has parent (is configurable)
|
828 |
-
if (
|
829 |
// get parent price
|
830 |
$itemPrice = (float)$this->_getProductAttribute($parent->getProduct(), 'final_price') ?: (float)$this->_getProductAttribute($parent->getProduct(), 'price');
|
831 |
}
|
832 |
// if still no price
|
833 |
-
if (
|
834 |
// get product price
|
835 |
$itemPrice = (float)$this->_getProductAttribute($itemProduct, 'price');
|
836 |
}
|
74 |
|
75 |
/**
|
76 |
* Finds the value of attribute matching the extension's configuration
|
77 |
+
*
|
78 |
* @param Mage_Catalog_Model_Product $product
|
79 |
* @param string $code Attribute code
|
80 |
* @return string
|
747 |
/**
|
748 |
* Accepts a Magento quote or order, then returns an address formatted for
|
749 |
* the API
|
750 |
+
*
|
751 |
* @param object $object Object to extract address information from
|
752 |
* @param bool $request If provided, this shipping rate request is used
|
753 |
* @return array Address information formatted for API requests
|
825 |
// Find the price of the product
|
826 |
$itemPrice = (float) $item->getCalculationPrice();
|
827 |
// if no price and item has parent (is configurable)
|
828 |
+
if (is_null($itemPrice) && ($parent = $item->getParentItem())) {
|
829 |
// get parent price
|
830 |
$itemPrice = (float)$this->_getProductAttribute($parent->getProduct(), 'final_price') ?: (float)$this->_getProductAttribute($parent->getProduct(), 'price');
|
831 |
}
|
832 |
// if still no price
|
833 |
+
if (is_null($itemPrice)) {
|
834 |
// get product price
|
835 |
$itemPrice = (float)$this->_getProductAttribute($itemProduct, 'price');
|
836 |
}
|
app/code/community/Iparcel/All/Helper/Data.php
CHANGED
@@ -101,7 +101,7 @@ class Iparcel_All_Helper_Data extends Mage_Core_Helper_Abstract
|
|
101 |
|
102 |
if (is_null($carrier) || $carrier == false) {
|
103 |
$method = $order->getShippingMethod();
|
104 |
-
if (preg_match('/^
|
105 |
return true;
|
106 |
}
|
107 |
return false;
|
101 |
|
102 |
if (is_null($carrier) || $carrier == false) {
|
103 |
$method = $order->getShippingMethod();
|
104 |
+
if (preg_match('/^' . $iparcelCarrier->getCarrierCode() . '.*/', $method)) {
|
105 |
return true;
|
106 |
}
|
107 |
return false;
|
app/code/community/Iparcel/All/Model/Carrier/Iparcel.php
CHANGED
@@ -33,7 +33,7 @@ class Iparcel_All_Model_Carrier_Iparcel extends Iparcel_All_Model_Carrier_Abstra
|
|
33 |
/** @var boolean $internationalOrder */
|
34 |
$internationalOrder = Mage::helper('iparcel')->getIsInternational($request);
|
35 |
if ($internationalOrder && Mage::getStoreConfig('carriers/iparcel/active')) {
|
36 |
-
/** @var array $
|
37 |
$iparcelTaxAndDuty = array();
|
38 |
/** @var Mage_Shipping_Model_Rate_Result $result*/
|
39 |
$result = Mage::getModel('shipping/rate_result');
|
33 |
/** @var boolean $internationalOrder */
|
34 |
$internationalOrder = Mage::helper('iparcel')->getIsInternational($request);
|
35 |
if ($internationalOrder && Mage::getStoreConfig('carriers/iparcel/active')) {
|
36 |
+
/** @var array $iparcelTaxAndDuty Tax & Duty totals */
|
37 |
$iparcelTaxAndDuty = array();
|
38 |
/** @var Mage_Shipping_Model_Rate_Result $result*/
|
39 |
$result = Mage::getModel('shipping/rate_result');
|
app/code/community/Iparcel/All/Model/Catalog/Product/Observer.php
CHANGED
@@ -23,12 +23,19 @@ class Iparcel_All_Model_Catalog_Product_Observer
|
|
23 |
*/
|
24 |
public function product_save($observer)
|
25 |
{
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
|
|
|
|
|
|
|
|
|
|
31 |
}
|
|
|
|
|
32 |
}
|
33 |
|
34 |
/**
|
@@ -56,12 +63,19 @@ class Iparcel_All_Model_Catalog_Product_Observer
|
|
56 |
*/
|
57 |
public function product_delete($observer)
|
58 |
{
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
|
|
|
|
|
|
|
|
|
|
65 |
}
|
|
|
|
|
66 |
}
|
67 |
}
|
23 |
*/
|
24 |
public function product_save($observer)
|
25 |
{
|
26 |
+
try {
|
27 |
+
if ($this->_isEnabled()) {
|
28 |
+
$product = $observer->getProduct();
|
29 |
+
$productCollection = new Varien_Data_Collection();
|
30 |
+
$productCollection->addItem($product);
|
31 |
+
Mage::helper('iparcel/api')->submitCatalog($productCollection);
|
32 |
+
}
|
33 |
+
} catch (Exception $e) {
|
34 |
+
Mage::log('Unable to sync SKU: ' . $product->getSku() . ' to i-parcel catalog.');
|
35 |
+
Mage::log($e->getMessage());
|
36 |
}
|
37 |
+
|
38 |
+
return $this;
|
39 |
}
|
40 |
|
41 |
/**
|
63 |
*/
|
64 |
public function product_delete($observer)
|
65 |
{
|
66 |
+
try {
|
67 |
+
if ($this->_isEnabled()) {
|
68 |
+
$product = $observer->getProduct();
|
69 |
+
$product->setIsDeleted(true);
|
70 |
+
$productCollection = new Varien_Data_Collection();
|
71 |
+
$productCollection->addItem($product);
|
72 |
+
Mage::helper('iparcel/api')->submitCatalog($productCollection);
|
73 |
+
}
|
74 |
+
} catch (Exception $e) {
|
75 |
+
Mage::log('Unable to delete SKU: ' . $product->getSku() . ' from i-parcel catalog.');
|
76 |
+
Mage::log($e->getMessage());
|
77 |
}
|
78 |
+
|
79 |
+
return $this;
|
80 |
}
|
81 |
}
|
app/code/community/Iparcel/All/Model/Observer.php
CHANGED
@@ -41,6 +41,11 @@ class Iparcel_All_Model_Observer
|
|
41 |
*/
|
42 |
public function shipment_save_after($observer)
|
43 |
{
|
|
|
|
|
|
|
|
|
|
|
44 |
// if autotrack is enabled then order can be tracked when shipped
|
45 |
if (Mage::getStoreConfigFlag('carriers/iparcel/autotrack')) {
|
46 |
// If we are splitting shipments, skip automatic submission.
|
@@ -109,6 +114,11 @@ class Iparcel_All_Model_Observer
|
|
109 |
*/
|
110 |
public function order_place_after($observer)
|
111 |
{
|
|
|
|
|
|
|
|
|
|
|
112 |
/** @var Mage_Sales_Model_Order $order */
|
113 |
$order = $observer->getOrder();
|
114 |
|
@@ -119,7 +129,7 @@ class Iparcel_All_Model_Observer
|
|
119 |
if (!$order->getQuote()) {
|
120 |
return;
|
121 |
}
|
122 |
-
|
123 |
$iparcelCarrierCode = Mage::getModel('iparcel/payment_iparcel')->getCode();
|
124 |
|
125 |
// if it's i-parcel shipping method
|
41 |
*/
|
42 |
public function shipment_save_after($observer)
|
43 |
{
|
44 |
+
// Do not automatically trigger SubmitParcel with CartHandoff
|
45 |
+
if (Mage::helper('iparcel')->isCartHandoffInstalled()) {
|
46 |
+
return true;
|
47 |
+
}
|
48 |
+
|
49 |
// if autotrack is enabled then order can be tracked when shipped
|
50 |
if (Mage::getStoreConfigFlag('carriers/iparcel/autotrack')) {
|
51 |
// If we are splitting shipments, skip automatic submission.
|
114 |
*/
|
115 |
public function order_place_after($observer)
|
116 |
{
|
117 |
+
// Do not automatically create shipments with CartHandoff
|
118 |
+
if (Mage::helper('iparcel')->isCartHandoffInstalled()) {
|
119 |
+
return true;
|
120 |
+
}
|
121 |
+
|
122 |
/** @var Mage_Sales_Model_Order $order */
|
123 |
$order = $observer->getOrder();
|
124 |
|
129 |
if (!$order->getQuote()) {
|
130 |
return;
|
131 |
}
|
132 |
+
|
133 |
$iparcelCarrierCode = Mage::getModel('iparcel/payment_iparcel')->getCode();
|
134 |
|
135 |
// if it's i-parcel shipping method
|
app/code/community/Iparcel/All/controllers/Adminhtml/Iparcel/Sync/AjaxController.php
CHANGED
@@ -9,51 +9,45 @@
|
|
9 |
class Iparcel_All_Adminhtml_Iparcel_Sync_AjaxController extends Mage_Adminhtml_Controller_Action
|
10 |
{
|
11 |
/**
|
12 |
-
* Response for init
|
13 |
*
|
14 |
-
* @return
|
15 |
*/
|
16 |
-
protected function
|
17 |
{
|
18 |
$step = Mage::getStoreConfig('catalog_mapping/upload/step');
|
19 |
-
|
20 |
-
|
|
|
|
|
|
|
|
|
21 |
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
* @alias _initResponse
|
26 |
-
* @return array
|
27 |
-
*/
|
28 |
-
protected function _initCatalogResponse()
|
29 |
-
{
|
30 |
-
return $this->_initResponse();
|
31 |
-
}
|
32 |
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
*/
|
39 |
-
protected function _initCheckitemsResponse()
|
40 |
-
{
|
41 |
-
return $this->_initResponse();
|
42 |
}
|
43 |
|
44 |
/**
|
45 |
-
* Response for uploadCatalog
|
46 |
*
|
47 |
-
* @
|
48 |
-
* @return array
|
49 |
*/
|
50 |
-
protected function
|
51 |
{
|
|
|
|
|
52 |
$page = $params['page'];
|
53 |
$step = $params['step'];
|
54 |
|
55 |
$offset = Mage::getStoreConfig('catalog_mapping/upload/offset');
|
56 |
-
$page += floor($offset
|
57 |
|
58 |
$productCollection = Mage::getModel('catalog/product')
|
59 |
->getCollection()
|
@@ -64,64 +58,22 @@ class Iparcel_All_Adminhtml_Iparcel_Sync_AjaxController extends Mage_Adminhtml_C
|
|
64 |
$n = Mage::helper('iparcel/api')->submitCatalog($productCollection);
|
65 |
|
66 |
if ($n != -1) {
|
67 |
-
|
68 |
-
'page'=>$page,
|
69 |
-
'step'=>$step,
|
70 |
-
'uploaded'=>$n
|
71 |
-
);
|
72 |
-
} else {
|
73 |
-
return array(
|
74 |
-
'error'=>'1'
|
75 |
-
);
|
76 |
-
}
|
77 |
-
}
|
78 |
-
|
79 |
-
/**
|
80 |
-
* Response for _uploadCheckitems querry
|
81 |
-
*
|
82 |
-
* @param array $params
|
83 |
-
* @return array
|
84 |
-
*/
|
85 |
-
protected function _uploadCheckitemsResponse($params)
|
86 |
-
{
|
87 |
-
$page = $params['page'];
|
88 |
-
$step = $params['step'];
|
89 |
-
|
90 |
-
$productCollection = Mage::getModel('catalog/product')
|
91 |
-
->getCollection()
|
92 |
-
->setPageSize($step)
|
93 |
-
->setCurPage($page);
|
94 |
-
/* var $productCollection Mage_Catalog_Model_Resource_Product_Collection */
|
95 |
-
|
96 |
-
$n = Mage::helper('iparcel/api')->checkItems($productCollection);
|
97 |
-
|
98 |
-
if ($n != -1) {
|
99 |
-
return array(
|
100 |
'page' => $page,
|
101 |
'step' => $step,
|
102 |
'uploaded' => $n
|
103 |
);
|
104 |
} else {
|
105 |
-
|
106 |
'error' => '1'
|
107 |
);
|
108 |
}
|
109 |
-
}
|
110 |
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
$params = $this->getRequest()->getParams();
|
117 |
-
$params['type'] = '_'.$params['type'].'CatalogResponse';
|
118 |
-
if (method_exists($this, $params['type'])) {
|
119 |
-
$_response = $this->$params['type']($params);
|
120 |
-
$this->getResponse()
|
121 |
-
->setHeader('Content-type', 'application/json', true)
|
122 |
-
->setBody(json_encode($_response));
|
123 |
-
return;
|
124 |
-
}
|
125 |
}
|
126 |
|
127 |
/**
|
@@ -132,29 +84,4 @@ class Iparcel_All_Adminhtml_Iparcel_Sync_AjaxController extends Mage_Adminhtml_C
|
|
132 |
$this->loadLayout();
|
133 |
$this->renderLayout();
|
134 |
}
|
135 |
-
|
136 |
-
/**
|
137 |
-
* Check Items request json action
|
138 |
-
*/
|
139 |
-
public function checkitemsJsonAction()
|
140 |
-
{
|
141 |
-
$params = $this->getRequest()->getParams();
|
142 |
-
$params['type'] = '_'.$params['type'].'CheckItemsResponse';
|
143 |
-
if (method_exists($this, $params['type'])) {
|
144 |
-
$_response = $this->$params['type']($params);
|
145 |
-
$this->getResponse()
|
146 |
-
->setHeader('Content-type', 'application/json', true)
|
147 |
-
->setBody(json_encode($_response));
|
148 |
-
return;
|
149 |
-
}
|
150 |
-
}
|
151 |
-
|
152 |
-
/**
|
153 |
-
* Check Items request action
|
154 |
-
*/
|
155 |
-
public function checkitemsAction()
|
156 |
-
{
|
157 |
-
$this->loadLayout();
|
158 |
-
$this->renderLayout();
|
159 |
-
}
|
160 |
}
|
9 |
class Iparcel_All_Adminhtml_Iparcel_Sync_AjaxController extends Mage_Adminhtml_Controller_Action
|
10 |
{
|
11 |
/**
|
12 |
+
* Response for init query
|
13 |
*
|
14 |
+
* @return bool
|
15 |
*/
|
16 |
+
protected function catalogJsonInitAction()
|
17 |
{
|
18 |
$step = Mage::getStoreConfig('catalog_mapping/upload/step');
|
19 |
+
$count = Mage::getModel('catalog/product')
|
20 |
+
->getCollection()
|
21 |
+
->getSize()
|
22 |
+
- floor(Mage::getStoreConfig('catalog_mapping/upload/offset')
|
23 |
+
/ $step
|
24 |
+
) * $step;
|
25 |
|
26 |
+
$response = array(
|
27 |
+
'count' => $count
|
28 |
+
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
29 |
|
30 |
+
$this->getResponse()
|
31 |
+
->setHeader('Content-type', 'application/json', true)
|
32 |
+
->setBody(json_encode($response));
|
33 |
+
|
34 |
+
return true;
|
|
|
|
|
|
|
|
|
35 |
}
|
36 |
|
37 |
/**
|
38 |
+
* Response for uploadCatalog query
|
39 |
*
|
40 |
+
* @return bool
|
|
|
41 |
*/
|
42 |
+
protected function catalogJsonUploadAction()
|
43 |
{
|
44 |
+
$params = $this->getRequest()->getParams();
|
45 |
+
|
46 |
$page = $params['page'];
|
47 |
$step = $params['step'];
|
48 |
|
49 |
$offset = Mage::getStoreConfig('catalog_mapping/upload/offset');
|
50 |
+
$page += floor($offset / $step);
|
51 |
|
52 |
$productCollection = Mage::getModel('catalog/product')
|
53 |
->getCollection()
|
58 |
$n = Mage::helper('iparcel/api')->submitCatalog($productCollection);
|
59 |
|
60 |
if ($n != -1) {
|
61 |
+
$response = array(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
62 |
'page' => $page,
|
63 |
'step' => $step,
|
64 |
'uploaded' => $n
|
65 |
);
|
66 |
} else {
|
67 |
+
$response = array(
|
68 |
'error' => '1'
|
69 |
);
|
70 |
}
|
|
|
71 |
|
72 |
+
$this->getResponse()
|
73 |
+
->setHeader('Content-type', 'application/json', true)
|
74 |
+
->setBody(json_encode($response));
|
75 |
+
|
76 |
+
return true;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
77 |
}
|
78 |
|
79 |
/**
|
84 |
$this->loadLayout();
|
85 |
$this->renderLayout();
|
86 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
87 |
}
|
app/code/community/Iparcel/All/controllers/Adminhtml/Iparcel/SyncController.php
DELETED
@@ -1,18 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Adminhtml i-parcel sync controller
|
4 |
-
*
|
5 |
-
* @category Iparcel
|
6 |
-
* @package Iparcel_All
|
7 |
-
* @author Bobby Burden <bburden@i-parcel.com>
|
8 |
-
*/
|
9 |
-
class Iparcel_All_Adminhtml_Iparcel_SyncController extends Mage_Adminhtml_Controller_Action
|
10 |
-
{
|
11 |
-
public function salesruleAction()
|
12 |
-
{
|
13 |
-
$_salesRuleCollection = Mage::getResourceModel('salesrule/rule_collection');
|
14 |
-
/* var $_salesRuleCollection Mage_SalesRule_Model_Resource_Rule_Collection */
|
15 |
-
Mage::helper('iparcel/api')->salesRule($_salesRuleCollection);
|
16 |
-
$this->_redirectReferer();
|
17 |
-
}
|
18 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app/code/community/Iparcel/All/controllers/AjaxController.php
CHANGED
@@ -51,7 +51,9 @@ class Iparcel_All_AjaxController extends Mage_Core_Controller_Front_Action
|
|
51 |
}
|
52 |
}
|
53 |
|
54 |
-
|
|
|
|
|
55 |
|
56 |
} else {
|
57 |
/**
|
51 |
}
|
52 |
}
|
53 |
|
54 |
+
if (is_null($child) == false) {
|
55 |
+
$sku = $child->getSku();
|
56 |
+
}
|
57 |
|
58 |
} else {
|
59 |
/**
|
app/code/community/Iparcel/All/sql/iparcel_setup/mysql4-upgrade-1.1.0-1.1.1.php
CHANGED
@@ -16,10 +16,13 @@ $options = array(
|
|
16 |
);
|
17 |
|
18 |
foreach ($entities as $entity) {
|
19 |
-
$
|
20 |
-
$
|
21 |
-
|
22 |
-
$installer->addAttribute($entity, '
|
|
|
|
|
|
|
23 |
}
|
24 |
|
25 |
$installer->endSetup();
|
16 |
);
|
17 |
|
18 |
foreach ($entities as $entity) {
|
19 |
+
$dutyCode = Mage::getModel('iparcel/payment_iparcel')->getDutyCode();
|
20 |
+
$taxCode = Mage::getModel('iparcel/payment_iparcel')->getTaxCode();
|
21 |
+
|
22 |
+
$installer->addAttribute($entity, 'base_' . $dutyCode . '_amount', $options);
|
23 |
+
$installer->addAttribute($entity, $dutyCode . '_amount', $options);
|
24 |
+
$installer->addAttribute($entity, 'base_' . $taxCode . '_amount', $options);
|
25 |
+
$installer->addAttribute($entity, $taxCode . '_amount', $options);
|
26 |
}
|
27 |
|
28 |
$installer->endSetup();
|
app/code/community/Iparcel/CartHandoff/.DS_Store
ADDED
Binary file
|
app/code/community/Iparcel/CartHandoff/Helper/Api.php
CHANGED
@@ -28,7 +28,11 @@ class Iparcel_CartHandoff_Helper_Api extends Iparcel_All_Helper_Api
|
|
28 |
* @param string $returnUrl URL to use once the order is submitted.
|
29 |
* @return mixed Transaction Number, in case of error, returns false
|
30 |
*/
|
31 |
-
public function setCheckout(
|
|
|
|
|
|
|
|
|
32 |
{
|
33 |
$customer = $quote->getCustomer();
|
34 |
$billingAddress = null;
|
@@ -43,12 +47,19 @@ class Iparcel_CartHandoff_Helper_Api extends Iparcel_All_Helper_Api
|
|
43 |
// customer.
|
44 |
if ($quoteBillingAddress->getEmail() == null) {
|
45 |
// Pull the default billing address from the customer
|
46 |
-
$customerDefaultBilling = $helper->getDefaultAddress(
|
|
|
|
|
|
|
47 |
if (is_null($customerDefaultBilling)) {
|
48 |
$billingAddress = null;
|
49 |
$phoneNumber = null;
|
50 |
} else {
|
51 |
-
$billingAddress = $this->_buildAddress(
|
|
|
|
|
|
|
|
|
52 |
$phoneNumber = $customerDefaultBilling->getTelephone();
|
53 |
}
|
54 |
} else {
|
@@ -59,15 +70,26 @@ class Iparcel_CartHandoff_Helper_Api extends Iparcel_All_Helper_Api
|
|
59 |
|
60 |
if ($quoteShippingAddress->getAddressId() == null) {
|
61 |
// Pull the default shipping address from the customer
|
62 |
-
$customerDefaultShipping = $helper->getDefaultAddress(
|
|
|
|
|
|
|
63 |
if (is_null($customerDefaultShipping)) {
|
64 |
$shippingAddress = null;
|
65 |
} else {
|
66 |
-
$shippingAddress = $this->_buildAddress(
|
|
|
|
|
|
|
|
|
67 |
}
|
68 |
} else {
|
69 |
// Set the address information from the quote shipping address
|
70 |
-
$shippingAddress = $this->_buildAddress(
|
|
|
|
|
|
|
|
|
71 |
}
|
72 |
|
73 |
if ($cancelUrl == false) {
|
@@ -93,11 +115,14 @@ class Iparcel_CartHandoff_Helper_Api extends Iparcel_All_Helper_Api
|
|
93 |
'page_currency' => $customerCurrency,
|
94 |
'custom' => $quote->getStoreId(),
|
95 |
'discount_amount_cart' => 0,
|
|
|
96 |
'reference_number' => $quote->getId(),
|
97 |
'return' => $returnUrl,
|
98 |
'shopping_url' => Mage::getBaseUrl(),
|
99 |
'cancel_return' => $cancelUrl,
|
100 |
-
'image_url' => Mage::getDesign()->getSkinUrl(
|
|
|
|
|
101 |
'AddressInfo' => array(
|
102 |
'Billing' => $billingAddress,
|
103 |
'Shipping' => $shippingAddress
|
@@ -108,31 +133,44 @@ class Iparcel_CartHandoff_Helper_Api extends Iparcel_All_Helper_Api
|
|
108 |
);
|
109 |
$totals = $quote->getTotals();
|
110 |
|
111 |
-
|
112 |
-
|
113 |
-
}
|
114 |
|
115 |
-
|
116 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
117 |
}
|
118 |
|
|
|
|
|
|
|
|
|
|
|
119 |
// Add items to request
|
120 |
$quoteItems = $quote->getAllItems();
|
121 |
$itemDetailsList = array();
|
122 |
foreach($quoteItems as $item) {
|
123 |
-
if ($
|
124 |
-
|
125 |
-
|
|
|
|
|
|
|
126 |
$qty = $item->getTotalQty();
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
$qty = $item->getTotalQty();
|
135 |
-
}
|
136 |
}
|
137 |
|
138 |
$itemDetails = array(
|
@@ -203,7 +241,14 @@ class Iparcel_CartHandoff_Helper_Api extends Iparcel_All_Helper_Api
|
|
203 |
|
204 |
if ($createOrder) {
|
205 |
try {
|
206 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
207 |
} catch (Exception $e) {
|
208 |
Mage::logException($e);
|
209 |
$return = array (
|
@@ -266,13 +311,30 @@ class Iparcel_CartHandoff_Helper_Api extends Iparcel_All_Helper_Api
|
|
266 |
* CheckItems call is used for the product -- no other changes are made.
|
267 |
*
|
268 |
* @param object $collection
|
|
|
|
|
|
|
|
|
269 |
* @return object
|
270 |
*/
|
271 |
-
public function checkItems(
|
|
|
|
|
|
|
|
|
272 |
{
|
273 |
$singleProduct = false;
|
|
|
|
|
|
|
|
|
|
|
274 |
$remove = true;
|
275 |
-
|
|
|
|
|
|
|
|
|
276 |
$singleProduct = true;
|
277 |
$collection = Mage::getModel('catalog/product')
|
278 |
->getCollection()
|
@@ -286,51 +348,101 @@ class Iparcel_CartHandoff_Helper_Api extends Iparcel_All_Helper_Api
|
|
286 |
$cookie = Mage::getModel('core/cookie')->get('ipar_iparcelSession');
|
287 |
$cookie = json_decode($cookie);
|
288 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
289 |
// Get iparcel session ID
|
290 |
$sessID = Mage::getModel('core/cookie')->get('ipar_sess_id');
|
291 |
|
292 |
if (!isset($cookie->locale) || $cookie->locale == 'US') {
|
293 |
-
return $collection;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
294 |
}
|
295 |
|
296 |
// Pass the product collection into the CheckItems class to check the
|
297 |
// previously cached results
|
298 |
$checkItemsModel = Mage::getModel('ipcarthandoff/checkitems');
|
299 |
-
$cache = $checkItemsModel->getCache(
|
|
|
|
|
|
|
|
|
300 |
|
301 |
$eligibleSKUs = array();
|
302 |
// If the cache count matches the collection, skip sending the request
|
303 |
if (count($cache) != count($collection)) {
|
304 |
-
|
305 |
-
|
306 |
-
|
307 |
-
|
308 |
-
'Billing' => array(),
|
309 |
-
'Shipping' => array(
|
310 |
-
'CountryCode' => $cookie->locale,
|
311 |
-
'PostalCode' => 'A1A1A1'
|
312 |
-
),
|
313 |
-
),
|
314 |
-
'CurrencyCode' => $cookie->currency,
|
315 |
-
'DDP' => true,
|
316 |
-
'Insurance' => false,
|
317 |
-
'SessionID' => $sessID,
|
318 |
-
'ServiceLevel' => 115
|
319 |
);
|
320 |
|
321 |
-
|
|
|
|
|
|
|
|
|
322 |
|
323 |
-
|
324 |
-
|
325 |
-
|
326 |
-
|
327 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
328 |
|
329 |
-
$items
|
330 |
-
$items = $
|
331 |
|
332 |
// Cache response from the web service
|
333 |
-
$checkItemsModel->cacheResponse(
|
|
|
|
|
|
|
|
|
|
|
334 |
|
335 |
// Load eligible SKUs into the array
|
336 |
foreach ($items as $item) {
|
@@ -369,10 +481,21 @@ class Iparcel_CartHandoff_Helper_Api extends Iparcel_All_Helper_Api
|
|
369 |
}
|
370 |
|
371 |
if ($singleProduct) {
|
372 |
-
return $collection->getFirstItem();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
373 |
}
|
374 |
|
375 |
-
return $
|
376 |
}
|
377 |
|
378 |
/**
|
@@ -604,7 +727,11 @@ class Iparcel_CartHandoff_Helper_Api extends Iparcel_All_Helper_Api
|
|
604 |
|
605 |
// Create shipment with tracking number
|
606 |
$order = Mage::getModel('sales/order')->loadByIncrementId($order->getIncrementId());
|
607 |
-
|
|
|
|
|
|
|
|
|
608 |
$itemsToShip = array();
|
609 |
foreach ($order->getAllItems() as $item) {
|
610 |
$itemsToShip[$item->getItemId()] = $item->getQtyOrdered();
|
@@ -671,4 +798,69 @@ class Iparcel_CartHandoff_Helper_Api extends Iparcel_All_Helper_Api
|
|
671 |
|
672 |
return $address;
|
673 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
674 |
}
|
28 |
* @param string $returnUrl URL to use once the order is submitted.
|
29 |
* @return mixed Transaction Number, in case of error, returns false
|
30 |
*/
|
31 |
+
public function setCheckout(
|
32 |
+
Mage_Sales_Model_Quote $quote,
|
33 |
+
$cancelUrl = false,
|
34 |
+
$returnUrl = false
|
35 |
+
)
|
36 |
{
|
37 |
$customer = $quote->getCustomer();
|
38 |
$billingAddress = null;
|
47 |
// customer.
|
48 |
if ($quoteBillingAddress->getEmail() == null) {
|
49 |
// Pull the default billing address from the customer
|
50 |
+
$customerDefaultBilling = $helper->getDefaultAddress(
|
51 |
+
$customer,
|
52 |
+
false
|
53 |
+
);
|
54 |
if (is_null($customerDefaultBilling)) {
|
55 |
$billingAddress = null;
|
56 |
$phoneNumber = null;
|
57 |
} else {
|
58 |
+
$billingAddress = $this->_buildAddress(
|
59 |
+
$customerDefaultBilling,
|
60 |
+
false,
|
61 |
+
$customer->getEmail()
|
62 |
+
);
|
63 |
$phoneNumber = $customerDefaultBilling->getTelephone();
|
64 |
}
|
65 |
} else {
|
70 |
|
71 |
if ($quoteShippingAddress->getAddressId() == null) {
|
72 |
// Pull the default shipping address from the customer
|
73 |
+
$customerDefaultShipping = $helper->getDefaultAddress(
|
74 |
+
$customer,
|
75 |
+
true
|
76 |
+
);
|
77 |
if (is_null($customerDefaultShipping)) {
|
78 |
$shippingAddress = null;
|
79 |
} else {
|
80 |
+
$shippingAddress = $this->_buildAddress(
|
81 |
+
$customerDefaultShipping,
|
82 |
+
true,
|
83 |
+
$billingAddress['email']
|
84 |
+
);
|
85 |
}
|
86 |
} else {
|
87 |
// Set the address information from the quote shipping address
|
88 |
+
$shippingAddress = $this->_buildAddress(
|
89 |
+
$quoteShippingAddress,
|
90 |
+
true,
|
91 |
+
$billingAddress['email']
|
92 |
+
);
|
93 |
}
|
94 |
|
95 |
if ($cancelUrl == false) {
|
115 |
'page_currency' => $customerCurrency,
|
116 |
'custom' => $quote->getStoreId(),
|
117 |
'discount_amount_cart' => 0,
|
118 |
+
'prepaidamount' => 0,
|
119 |
'reference_number' => $quote->getId(),
|
120 |
'return' => $returnUrl,
|
121 |
'shopping_url' => Mage::getBaseUrl(),
|
122 |
'cancel_return' => $cancelUrl,
|
123 |
+
'image_url' => Mage::getDesign()->getSkinUrl(
|
124 |
+
Mage::getStoreConfig('design/header/logo_src')
|
125 |
+
),
|
126 |
'AddressInfo' => array(
|
127 |
'Billing' => $billingAddress,
|
128 |
'Shipping' => $shippingAddress
|
133 |
);
|
134 |
$totals = $quote->getTotals();
|
135 |
|
136 |
+
// Find prepaid amount for quote
|
137 |
+
$request['prepaidamount'] = $this->_findPrepaidAmount($quote);
|
|
|
138 |
|
139 |
+
// Calculate discount
|
140 |
+
$totalKeys = array(
|
141 |
+
'subtotal', 'shipping', 'iparcel_tax', 'iparcel_duty', 'tax'
|
142 |
+
);
|
143 |
+
|
144 |
+
$total = 0;
|
145 |
+
foreach ($totalKeys as $key) {
|
146 |
+
if (array_key_exists($key, $totals) && is_object($totals[$key])) {
|
147 |
+
$total += $totals[$key]->getValue();
|
148 |
+
}
|
149 |
}
|
150 |
|
151 |
+
$request['discount_amount_cart'] = round(
|
152 |
+
$total - $quote->getGrandTotal(),
|
153 |
+
2
|
154 |
+
);
|
155 |
+
|
156 |
// Add items to request
|
157 |
$quoteItems = $quote->getAllItems();
|
158 |
$itemDetailsList = array();
|
159 |
foreach($quoteItems as $item) {
|
160 |
+
if ($this->_itemRequiresPricing($item)) {
|
161 |
+
/**
|
162 |
+
* If no price is attached to this item, load it from
|
163 |
+
* the parent item
|
164 |
+
*/
|
165 |
+
$price = $item->getCalculationPrice();
|
166 |
$qty = $item->getTotalQty();
|
167 |
+
$parentItem = $item->getParentItem();
|
168 |
+
|
169 |
+
if ($parentItem) {
|
170 |
+
$price = $parentItem->getCalculationPrice();
|
171 |
+
}
|
172 |
+
if (is_null($price)) {
|
173 |
+
$price = $item->getProduct()->getPrice();
|
|
|
|
|
174 |
}
|
175 |
|
176 |
$itemDetails = array(
|
241 |
|
242 |
if ($createOrder) {
|
243 |
try {
|
244 |
+
// Make sure the order doesn't exist before attempting
|
245 |
+
// to build a new order
|
246 |
+
$order = Mage::helper('ipcarthandoff')
|
247 |
+
->loadOrderByTrackingNumber($response->trackingnumber);
|
248 |
+
|
249 |
+
if ($order == false) {
|
250 |
+
$order = $this->_buildOrder($session->getQuote(), $response);
|
251 |
+
}
|
252 |
} catch (Exception $e) {
|
253 |
Mage::logException($e);
|
254 |
$return = array (
|
311 |
* CheckItems call is used for the product -- no other changes are made.
|
312 |
*
|
313 |
* @param object $collection
|
314 |
+
* @param string $countryCode If set, use this Country Code
|
315 |
+
* instead of the user's cookie
|
316 |
+
* @param boolean $returnResponse If true, return the response
|
317 |
+
* from the API call
|
318 |
* @return object
|
319 |
*/
|
320 |
+
public function checkItems(
|
321 |
+
$collection,
|
322 |
+
$countryCode = false,
|
323 |
+
$returnResponse = false
|
324 |
+
)
|
325 |
{
|
326 |
$singleProduct = false;
|
327 |
+
|
328 |
+
/**
|
329 |
+
* If $collection is a single product, create a collection of
|
330 |
+
* that single product to act on
|
331 |
+
*/
|
332 |
$remove = true;
|
333 |
+
$isCollection = in_array(
|
334 |
+
'Varien_Data_Collection',
|
335 |
+
class_parents($collection)
|
336 |
+
);
|
337 |
+
if ($isCollection == false) {
|
338 |
$singleProduct = true;
|
339 |
$collection = Mage::getModel('catalog/product')
|
340 |
->getCollection()
|
348 |
$cookie = Mage::getModel('core/cookie')->get('ipar_iparcelSession');
|
349 |
$cookie = json_decode($cookie);
|
350 |
|
351 |
+
// If the cookie is empty, create an object to hold the locale/currency
|
352 |
+
if ($countryCode !== false) {
|
353 |
+
$cookie = (object) array(
|
354 |
+
'locale' => $countryCode,
|
355 |
+
'currency' => 'USD'
|
356 |
+
);
|
357 |
+
}
|
358 |
+
|
359 |
// Get iparcel session ID
|
360 |
$sessID = Mage::getModel('core/cookie')->get('ipar_sess_id');
|
361 |
|
362 |
if (!isset($cookie->locale) || $cookie->locale == 'US') {
|
363 |
+
$return = $collection;
|
364 |
+
if ($returnResponse) {
|
365 |
+
$return = array(
|
366 |
+
'collection' => $collection,
|
367 |
+
'response' => null
|
368 |
+
);
|
369 |
+
}
|
370 |
+
return $return;
|
371 |
}
|
372 |
|
373 |
// Pass the product collection into the CheckItems class to check the
|
374 |
// previously cached results
|
375 |
$checkItemsModel = Mage::getModel('ipcarthandoff/checkitems');
|
376 |
+
$cache = $checkItemsModel->getCache(
|
377 |
+
$collection,
|
378 |
+
$cookie->locale,
|
379 |
+
$storeId
|
380 |
+
);
|
381 |
|
382 |
$eligibleSKUs = array();
|
383 |
// If the cache count matches the collection, skip sending the request
|
384 |
if (count($cache) != count($collection)) {
|
385 |
+
|
386 |
+
// Prepare the ItemDetailsList
|
387 |
+
$itemDetailsCollection = $this->_prepareCollectionForCheckItems(
|
388 |
+
$collection
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
389 |
);
|
390 |
|
391 |
+
// Split the ItemDetailsList into collections of products
|
392 |
+
$itemDetailsCollection = array_chunk(
|
393 |
+
$itemDetailsCollection,
|
394 |
+
$this->_getChunkSize()
|
395 |
+
);
|
396 |
|
397 |
+
$responses = array();
|
398 |
+
foreach ($itemDetailsCollection as $itemDetailsList) {
|
399 |
+
$request = array(
|
400 |
+
'Key' => Mage::helper('iparcel')->getGuid(),
|
401 |
+
'ItemDetailsList' => $itemDetailsList,
|
402 |
+
'AddressInfo' => array(
|
403 |
+
'Billing' => array(),
|
404 |
+
'Shipping' => array(
|
405 |
+
'CountryCode' => $cookie->locale,
|
406 |
+
'PostalCode' => 'A1A1A1'
|
407 |
+
),
|
408 |
+
),
|
409 |
+
'CurrencyCode' => $cookie->currency,
|
410 |
+
'DDP' => true,
|
411 |
+
'Insurance' => false,
|
412 |
+
'SessionID' => $sessID,
|
413 |
+
'ServiceLevel' => 115
|
414 |
+
);
|
415 |
+
|
416 |
+
$response = $this->_restJSON($request, $this->_checkItems);
|
417 |
+
|
418 |
+
Mage::getModel('iparcel/log')
|
419 |
+
->setController('CheckItems')
|
420 |
+
->setRequest(json_encode($request))
|
421 |
+
->setResponse($response)
|
422 |
+
->save();
|
423 |
+
|
424 |
+
$responses[] = json_decode($response, true);
|
425 |
+
}
|
426 |
+
|
427 |
+
// Build the $response from the separate responses.
|
428 |
+
$response = array_shift($responses);
|
429 |
+
foreach ($responses as $currentResponse) {
|
430 |
+
$response['ItemDetailsList'] = array_merge(
|
431 |
+
$response['ItemDetailsList'],
|
432 |
+
$currentResponse['ItemDetailsList']
|
433 |
+
);
|
434 |
+
}
|
435 |
|
436 |
+
// Build the $items from the response's ItemDetailsList
|
437 |
+
$items = $response['ItemDetailsList'];
|
438 |
|
439 |
// Cache response from the web service
|
440 |
+
$checkItemsModel->cacheResponse(
|
441 |
+
$items,
|
442 |
+
$collection,
|
443 |
+
$cookie->locale,
|
444 |
+
$storeId
|
445 |
+
);
|
446 |
|
447 |
// Load eligible SKUs into the array
|
448 |
foreach ($items as $item) {
|
481 |
}
|
482 |
|
483 |
if ($singleProduct) {
|
484 |
+
$return = $collection->getFirstItem();
|
485 |
+
}
|
486 |
+
|
487 |
+
$return = $collection;
|
488 |
+
|
489 |
+
// If `$returnResponse` is enabled, include the response in
|
490 |
+
// the return value
|
491 |
+
if ($returnResponse) {
|
492 |
+
$return = array (
|
493 |
+
'collection' => $return,
|
494 |
+
'response' => $response
|
495 |
+
);
|
496 |
}
|
497 |
|
498 |
+
return $return;
|
499 |
}
|
500 |
|
501 |
/**
|
727 |
|
728 |
// Create shipment with tracking number
|
729 |
$order = Mage::getModel('sales/order')->loadByIncrementId($order->getIncrementId());
|
730 |
+
|
731 |
+
if (Mage::getStoreConfig('payment/ipcarthandoff/send_new_order_emails') != 0) {
|
732 |
+
$order->sendNewOrderEmail();
|
733 |
+
}
|
734 |
+
|
735 |
$itemsToShip = array();
|
736 |
foreach ($order->getAllItems() as $item) {
|
737 |
$itemsToShip[$item->getItemId()] = $item->getQtyOrdered();
|
798 |
|
799 |
return $address;
|
800 |
}
|
801 |
+
|
802 |
+
/**
|
803 |
+
* Determines if item requires pricing in API request
|
804 |
+
*
|
805 |
+
* @param $item
|
806 |
+
* @return bool
|
807 |
+
*/
|
808 |
+
private function _itemRequiresPricing($item)
|
809 |
+
{
|
810 |
+
$type = $item->getProductType();
|
811 |
+
if ($type == Mage_Catalog_Model_Product_Type::TYPE_GROUPED
|
812 |
+
|| $type == Mage_Catalog_Model_Product_Type::TYPE_SIMPLE
|
813 |
+
|| $type == Mage_Catalog_Model_Product_Type::TYPE_BUNDLE
|
814 |
+
) {
|
815 |
+
return true;
|
816 |
+
}
|
817 |
+
return false;
|
818 |
+
}
|
819 |
+
|
820 |
+
/**
|
821 |
+
* Finds the prepaid value of a quote.
|
822 |
+
*
|
823 |
+
* Because there is no baked-in prepayment methods in Magento
|
824 |
+
* (except Enterprise Gift Cards) This method has to do the work
|
825 |
+
* of supporting third-party prepayment methods
|
826 |
+
*
|
827 |
+
* @param Mage_Sales_Model_Quote $quote
|
828 |
+
* @return float
|
829 |
+
*/
|
830 |
+
private function _findPrepaidAmount(Mage_Sales_Model_Quote $quote)
|
831 |
+
{
|
832 |
+
$prepaidAmount = 0.00;
|
833 |
+
|
834 |
+
// Support for AheadWorks_Storecredit
|
835 |
+
if (class_exists('AW_Storecredit_Helper_Data', false)) {
|
836 |
+
$awStorecreditHelper = Mage::helper('aw_storecredit');
|
837 |
+
if ($awStorecreditHelper
|
838 |
+
&& $awStorecreditHelper->isModuleEnabled()
|
839 |
+
) {
|
840 |
+
$awStorecreditTotals = Mage::helper('aw_storecredit/totals');
|
841 |
+
$creditCollection = $awStorecreditTotals
|
842 |
+
->getQuoteStoreCredit($quote->getId());
|
843 |
+
|
844 |
+
foreach ($creditCollection as $credit) {
|
845 |
+
$prepaidAmount += $credit->getStorecreditAmount();
|
846 |
+
}
|
847 |
+
}
|
848 |
+
}
|
849 |
+
|
850 |
+
return $prepaidAmount;
|
851 |
+
}
|
852 |
+
|
853 |
+
/**
|
854 |
+
* Returns the chunk size configured for CheckItems API calls
|
855 |
+
*
|
856 |
+
* @return int
|
857 |
+
*/
|
858 |
+
private function _getChunkSize()
|
859 |
+
{
|
860 |
+
$chunkSize = Mage::getStoreConfig(
|
861 |
+
'iparcel/international_customer/checkitems_chunk_size'
|
862 |
+
);
|
863 |
+
|
864 |
+
return (int) $chunkSize;
|
865 |
+
}
|
866 |
}
|
app/code/community/Iparcel/CartHandoff/Model/Observer.php
CHANGED
@@ -41,4 +41,28 @@ class Iparcel_CartHandoff_Model_Observer
|
|
41 |
|
42 |
return;
|
43 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
44 |
}
|
41 |
|
42 |
return;
|
43 |
}
|
44 |
+
|
45 |
+
/**
|
46 |
+
* Prevent PayPal checkout on UPS i-parcel CartHandoff orders
|
47 |
+
*
|
48 |
+
* @param Varien_Event_Observer
|
49 |
+
*/
|
50 |
+
public function paypalPrepareLineItems(Varien_Event_Observer $observer)
|
51 |
+
{
|
52 |
+
$cart = $observer->getEvent()->getPaypalCart();
|
53 |
+
$shippingAddress = $cart->getSalesEntity()->getShippingAddress();
|
54 |
+
$totalAbstract = Mage::getModel('iparcel/quote_address_total_abstract');
|
55 |
+
|
56 |
+
if (!is_object($shippingAddress)) {
|
57 |
+
return true;
|
58 |
+
}
|
59 |
+
|
60 |
+
if ($totalAbstract->isIparcelShipping($shippingAddress)) {
|
61 |
+
Mage::throwException(
|
62 |
+
'UPS i-parcel orders cannot be paid with PayPal'
|
63 |
+
);
|
64 |
+
}
|
65 |
+
|
66 |
+
return true;
|
67 |
+
}
|
68 |
}
|
app/code/community/Iparcel/CartHandoff/controllers/Adminhtml/Ipcarthandoff/Checkitems/CacheController.php
CHANGED
@@ -14,10 +14,8 @@ class Iparcel_CartHandoff_Adminhtml_Ipcarthandoff_Checkitems_CacheController ext
|
|
14 |
public function clearAction()
|
15 |
{
|
16 |
$cache = Mage::getModel('ipcarthandoff/checkitems')
|
17 |
-
|
18 |
-
|
19 |
-
->load();
|
20 |
-
|
21 |
foreach($cache as $item) {
|
22 |
$item->delete();
|
23 |
}
|
14 |
public function clearAction()
|
15 |
{
|
16 |
$cache = Mage::getModel('ipcarthandoff/checkitems')
|
17 |
+
->getCollection();
|
18 |
+
|
|
|
|
|
19 |
foreach($cache as $item) {
|
20 |
$item->delete();
|
21 |
}
|
app/code/community/Iparcel/CartHandoff/controllers/HandoffController.php
CHANGED
@@ -168,7 +168,6 @@ class Iparcel_CartHandoff_HandoffController extends Mage_Core_Controller_Front_A
|
|
168 |
|| $this->_quote->getPayment()->getMethod() != 'ipcarthandoff'
|
169 |
) {
|
170 |
$this->_session->addError("Invalid quote for Cart Handoff review.");
|
171 |
-
$this->_cancelPayment($transactionId);
|
172 |
$this->getResponse()->setRedirect(Mage::getUrl('checkout/cart'));
|
173 |
return;
|
174 |
}
|
168 |
|| $this->_quote->getPayment()->getMethod() != 'ipcarthandoff'
|
169 |
) {
|
170 |
$this->_session->addError("Invalid quote for Cart Handoff review.");
|
|
|
171 |
$this->getResponse()->setRedirect(Mage::getUrl('checkout/cart'));
|
172 |
return;
|
173 |
}
|
app/code/community/Iparcel/CartHandoff/etc/config.xml
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
<config>
|
3 |
<modules>
|
4 |
<Iparcel_CartHandoff>
|
5 |
-
<version>1.
|
6 |
</Iparcel_CartHandoff>
|
7 |
</modules>
|
8 |
<global>
|
@@ -28,7 +28,6 @@
|
|
28 |
<rewrite>
|
29 |
<product_type_price>Iparcel_CartHandoff_Model_Catalog_Product_Type_Price</product_type_price>
|
30 |
<product_type_configurable_price>Iparcel_CartHandoff_Model_Catalog_Product_Type_Configurable_Price</product_type_configurable_price>
|
31 |
-
<product_type_grouped_price>Iparcel_CartHandoff_Model_Catalog_Product_Type_Grouped_Price</product_type_grouped_price>
|
32 |
<layer>Iparcel_CartHandoff_Model_Catalog_Layer</layer>
|
33 |
</rewrite>
|
34 |
</catalog>
|
@@ -64,6 +63,15 @@
|
|
64 |
</ipcarthandoff>
|
65 |
</observers>
|
66 |
</core_block_abstract_prepare_layout_after>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
67 |
</events>
|
68 |
</global>
|
69 |
<frontend>
|
@@ -123,6 +131,7 @@
|
|
123 |
<checkitems>0</checkitems>
|
124 |
<checkitems_price>0</checkitems_price>
|
125 |
<checkitems_cache_lifetime>0</checkitems_cache_lifetime>
|
|
|
126 |
</international_customer>
|
127 |
</iparcel>
|
128 |
</default>
|
2 |
<config>
|
3 |
<modules>
|
4 |
<Iparcel_CartHandoff>
|
5 |
+
<version>1.5.0</version>
|
6 |
</Iparcel_CartHandoff>
|
7 |
</modules>
|
8 |
<global>
|
28 |
<rewrite>
|
29 |
<product_type_price>Iparcel_CartHandoff_Model_Catalog_Product_Type_Price</product_type_price>
|
30 |
<product_type_configurable_price>Iparcel_CartHandoff_Model_Catalog_Product_Type_Configurable_Price</product_type_configurable_price>
|
|
|
31 |
<layer>Iparcel_CartHandoff_Model_Catalog_Layer</layer>
|
32 |
</rewrite>
|
33 |
</catalog>
|
63 |
</ipcarthandoff>
|
64 |
</observers>
|
65 |
</core_block_abstract_prepare_layout_after>
|
66 |
+
<paypal_prepare_line_items>
|
67 |
+
<observers>
|
68 |
+
<ipcarthandoff>
|
69 |
+
<type>singleton</type>
|
70 |
+
<class>ipcarthandoff/observer</class>
|
71 |
+
<method>paypalPrepareLineItems</method>
|
72 |
+
</ipcarthandoff>
|
73 |
+
</observers>
|
74 |
+
</paypal_prepare_line_items>
|
75 |
</events>
|
76 |
</global>
|
77 |
<frontend>
|
131 |
<checkitems>0</checkitems>
|
132 |
<checkitems_price>0</checkitems_price>
|
133 |
<checkitems_cache_lifetime>0</checkitems_cache_lifetime>
|
134 |
+
<checkitems_chunk_size>100</checkitems_chunk_size>
|
135 |
</international_customer>
|
136 |
</iparcel>
|
137 |
</default>
|
app/code/community/Iparcel/CartHandoff/etc/system.xml
CHANGED
@@ -192,9 +192,17 @@
|
|
192 |
<show_in_website>1</show_in_website>
|
193 |
<show_in_store>1</show_in_store>
|
194 |
</checkitems_clear_cache>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
195 |
</fields>
|
196 |
</international_customer>
|
197 |
</groups>
|
198 |
</iparcel>
|
199 |
</sections>
|
200 |
-
</config>
|
192 |
<show_in_website>1</show_in_website>
|
193 |
<show_in_store>1</show_in_store>
|
194 |
</checkitems_clear_cache>
|
195 |
+
<checkitems_chunk_size>
|
196 |
+
<label>Amount of products to send in a CheckItems request</label>
|
197 |
+
<frontend_type>text</frontend_type>
|
198 |
+
<sort_order>120</sort_order>
|
199 |
+
<show_in_default>1</show_in_default>
|
200 |
+
<show_in_website>1</show_in_website>
|
201 |
+
<show_in_store>1</show_in_store>
|
202 |
+
</checkitems_chunk_size>
|
203 |
</fields>
|
204 |
</international_customer>
|
205 |
</groups>
|
206 |
</iparcel>
|
207 |
</sections>
|
208 |
+
</config>
|
app/design/adminhtml/default/default/layout/iparcel.xml
CHANGED
@@ -35,17 +35,6 @@
|
|
35 |
<block type="core/template" name="catalog.sync" template="iparcel/sync/ajax/catalog.phtml"/>
|
36 |
</reference>
|
37 |
</adminhtml_iparcel_sync_ajax_catalog>
|
38 |
-
<adminhtml_iparcel_sync_ajax_checkitems>
|
39 |
-
<reference name="head">
|
40 |
-
<action method="addJs"><script>iparcel/jQuery.js</script></action>
|
41 |
-
<action method="addJs"><script>iparcel/adminhtml/sync.js</script></action>
|
42 |
-
<action method="addCss"><stylesheet>iparcel/ajaxSync.css</stylesheet></action>
|
43 |
-
<action method="setTitle"><title>i-parcel Check Items</title></action>
|
44 |
-
</reference>
|
45 |
-
<reference name="content">
|
46 |
-
<block type="core/template" name="checkitems.sync" template="iparcel/sync/ajax/checkitems.phtml" />
|
47 |
-
</reference>
|
48 |
-
</adminhtml_iparcel_sync_ajax_checkitems>
|
49 |
|
50 |
<adminhtml_sales_order_view>
|
51 |
<reference name="order_totals">
|
35 |
<block type="core/template" name="catalog.sync" template="iparcel/sync/ajax/catalog.phtml"/>
|
36 |
</reference>
|
37 |
</adminhtml_iparcel_sync_ajax_catalog>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
38 |
|
39 |
<adminhtml_sales_order_view>
|
40 |
<reference name="order_totals">
|
app/design/adminhtml/default/default/template/iparcel/sync/ajax/catalog.phtml
CHANGED
@@ -5,6 +5,8 @@
|
|
5 |
* @author Bobby Burden <bburden@i-parcel.com>
|
6 |
* @class Mage_Core_Block_Template
|
7 |
*/
|
|
|
|
|
8 |
?>
|
9 |
<div id="starting">
|
10 |
<p>Starting catalog synchronization</p>
|
@@ -18,6 +20,6 @@
|
|
18 |
</div>
|
19 |
<script type="text/javascript">
|
20 |
jQuery(document).ready(function() {
|
21 |
-
var sync = new iparcelSync.sync('<?php echo
|
22 |
})
|
23 |
</script>
|
5 |
* @author Bobby Burden <bburden@i-parcel.com>
|
6 |
* @class Mage_Core_Block_Template
|
7 |
*/
|
8 |
+
$initUrl = Mage::helper('adminhtml')->getUrl('adminhtml/iparcel_sync_ajax/catalogJsonInit');
|
9 |
+
$uploadUrl = Mage::helper('adminhtml')->getUrl('adminhtml/iparcel_sync_ajax/catalogJsonUpload');
|
10 |
?>
|
11 |
<div id="starting">
|
12 |
<p>Starting catalog synchronization</p>
|
20 |
</div>
|
21 |
<script type="text/javascript">
|
22 |
jQuery(document).ready(function() {
|
23 |
+
var sync = new iparcelSync.sync('<?php echo $initUrl ?>', '<?php echo $uploadUrl ?>', <?php echo Mage::getStoreConfig('catalog_mapping/upload/step'); ?>);
|
24 |
})
|
25 |
</script>
|
app/design/adminhtml/default/default/template/iparcel/sync/ajax/checkitems.phtml
DELETED
@@ -1,21 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* @category design
|
4 |
-
* @package Iparcel_All
|
5 |
-
* @author Bobby Burden <bburden@i-parcel.com>
|
6 |
-
* @class Mage_Core_Block_Template
|
7 |
-
*/
|
8 |
-
?>
|
9 |
-
<div id="starting">
|
10 |
-
<p>Starting checking items</p>
|
11 |
-
</div>
|
12 |
-
<div id="sync">
|
13 |
-
<p><span>0</span> items from <span>0</span> checked</p>
|
14 |
-
</div>
|
15 |
-
<div id="end">
|
16 |
-
<p><span>0</span> items from <span>0</span> successfully checked</p>
|
17 |
-
<p>There was <span>0</span> errors when checking items</p>
|
18 |
-
</div>
|
19 |
-
<script type="text/javascript">
|
20 |
-
var sync = new iparcelSync.sync('<?php echo Mage::helper('adminhtml')->getUrl('adminhtml/iparcel_sync_ajax/checkitemsJson') ?>', 1);
|
21 |
-
</script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
js/iparcel/adminhtml/sync.js
CHANGED
@@ -1,87 +1,86 @@
|
|
1 |
/**
|
2 |
* js lib for i-parcel's ajax sync
|
3 |
*
|
4 |
-
* @category
|
5 |
-
* @package
|
6 |
-
* @author
|
7 |
*/
|
8 |
var iparcelSync = {
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
},
|
28 |
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
},
|
55 |
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
|
|
75 |
|
76 |
-
|
77 |
-
|
78 |
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
|
83 |
-
|
84 |
|
85 |
-
|
86 |
-
|
87 |
}
|
1 |
/**
|
2 |
* js lib for i-parcel's ajax sync
|
3 |
*
|
4 |
+
* @category Iparcel
|
5 |
+
* @package Iparcel_All
|
6 |
+
* @author Bobby Burden <bburden@i-parcel.com>
|
7 |
*/
|
8 |
var iparcelSync = {
|
9 |
+
item: null,
|
10 |
+
sync: null,
|
11 |
+
end: null,
|
12 |
|
13 |
+
/**
|
14 |
+
* Initialize sync ajax callback
|
15 |
+
*/
|
16 |
+
init: function (data) {
|
17 |
+
iparcelSync.item.count = data.count;
|
18 |
+
iparcelSync.sync.eq(1).text(iparcelSync.item.count);
|
19 |
+
iparcelSync.end.eq(1).text(iparcelSync.item.count);
|
20 |
+
jQuery('#starting').hide();
|
21 |
+
jQuery('#sync').show();
|
22 |
+
jQuery.get(iparcelSync.item.uploadUrl, {
|
23 |
+
page: ++iparcelSync.item.page,
|
24 |
+
step: iparcelSync.item.step,
|
25 |
+
}, iparcelSync.refresh);
|
26 |
+
},
|
|
|
27 |
|
28 |
+
/**
|
29 |
+
* Refresh sync ajax callback
|
30 |
+
*/
|
31 |
+
refresh: function (data) {
|
32 |
+
if (!data.error) {
|
33 |
+
iparcelSync.item.progress += data.uploaded;
|
34 |
+
iparcelSync.item.errors += iparcelSync.item.step - data.uploaded;
|
35 |
+
iparcelSync.sync.eq(0).text(iparcelSync.item.progress);
|
36 |
+
iparcelSync.end.eq(0).text(iparcelSync.item.progress);
|
37 |
+
} else {
|
38 |
+
if (iparcelSync.item.page * iparcelSync.item.step > iparcelSync.item.count) {
|
39 |
+
iparcelSync.item.errors += iparcelSync.item.count - iparcelSync.item.progress;
|
40 |
+
} else {
|
41 |
+
iparcelSync.item.errors += iparcelSync.item.step;
|
42 |
+
}
|
43 |
+
}
|
44 |
+
if (iparcelSync.item.progress + iparcelSync.item.errors < iparcelSync.item.count) {
|
45 |
+
jQuery.get(iparcelSync.item.uploadUrl, {
|
46 |
+
page: ++iparcelSync.item.page,
|
47 |
+
step: iparcelSync.item.step,
|
48 |
+
}, iparcelSync.refresh);
|
49 |
+
} else {
|
50 |
+
iparcelSync.finish();
|
51 |
+
}
|
52 |
+
},
|
|
|
53 |
|
54 |
+
/**
|
55 |
+
* Finish sync
|
56 |
+
*/
|
57 |
+
finish: function () {
|
58 |
+
iparcelSync.end.eq(2).text(iparcelSync.item.errors);
|
59 |
+
jQuery('#sync').hide();
|
60 |
+
jQuery('#end').show();
|
61 |
+
},
|
62 |
|
63 |
+
/**
|
64 |
+
* Sync object
|
65 |
+
*/
|
66 |
+
sync: function (initUrl, uploadUrl, step) {
|
67 |
+
this.initUrl = initUrl;
|
68 |
+
this.uploadUrl = uploadUrl;
|
69 |
+
this.step = step;
|
70 |
+
this.progress = 0;
|
71 |
+
this.errors = 0;
|
72 |
+
this.count = 0;
|
73 |
+
this.page = 0;
|
74 |
|
75 |
+
iparcelSync.sync = jQuery('#sync span');
|
76 |
+
iparcelSync.end = jQuery('#end span');
|
77 |
|
78 |
+
this.run = function () {
|
79 |
+
jQuery.get(this.initUrl, {type: 'init'}, iparcelSync.init);
|
80 |
+
}
|
81 |
|
82 |
+
iparcelSync.item = this;
|
83 |
|
84 |
+
this.run();
|
85 |
+
}
|
86 |
}
|
js/iparcel/cart-buttons.js
CHANGED
@@ -1,9 +1,5 @@
|
|
1 |
document.observe("dom:loaded", function(){
|
2 |
-
|
3 |
-
setButtonVisibility('ipcarthandoff-button', 'block');
|
4 |
-
setButtonVisibility('btn-proceed-checkout', 'none');
|
5 |
-
setCheckoutMethodVisibility(false);
|
6 |
-
}
|
7 |
|
8 |
if ($('country')) {
|
9 |
$('country').observe('change', function(){
|
@@ -20,6 +16,21 @@ document.observe("dom:loaded", function(){
|
|
20 |
}
|
21 |
});
|
22 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
23 |
function setButtonVisibility(buttonClass, displayValue)
|
24 |
{
|
25 |
if (buttonClass == 'btn-proceed-checkout' && cartHandoff_hideCheckout == false) {
|
@@ -45,4 +56,4 @@ function setCheckoutMethodVisibility(visibility)
|
|
45 |
$(li).style.display = '';
|
46 |
}
|
47 |
});
|
48 |
-
}
|
1 |
document.observe("dom:loaded", function(){
|
2 |
+
window.watchIparSession = setInterval(checkLocale, 500);
|
|
|
|
|
|
|
|
|
3 |
|
4 |
if ($('country')) {
|
5 |
$('country').observe('change', function(){
|
16 |
}
|
17 |
});
|
18 |
|
19 |
+
function checkLocale()
|
20 |
+
{
|
21 |
+
if (typeof ipar_Session == "undefined" || ipar_Session == null) {
|
22 |
+
return;
|
23 |
+
}
|
24 |
+
|
25 |
+
if (ipar_Session.locale != 'US') {
|
26 |
+
setButtonVisibility('ipcarthandoff-button', 'block');
|
27 |
+
setButtonVisibility('btn-proceed-checkout', 'none');
|
28 |
+
setCheckoutMethodVisibility(false);
|
29 |
+
}
|
30 |
+
|
31 |
+
clearInterval(window.watchIparSession);
|
32 |
+
}
|
33 |
+
|
34 |
function setButtonVisibility(buttonClass, displayValue)
|
35 |
{
|
36 |
if (buttonClass == 'btn-proceed-checkout' && cartHandoff_hideCheckout == false) {
|
56 |
$(li).style.display = '';
|
57 |
}
|
58 |
});
|
59 |
+
}
|
package.xml
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>iparcel_carthandoff</name>
|
4 |
-
<version>1.
|
5 |
<stability>stable</stability>
|
6 |
<license>GPL</license>
|
7 |
<channel>community</channel>
|
@@ -16,9 +16,9 @@
|
|
16 |
<email>bburden@i-parcel.com</email>
|
17 |
</author>
|
18 |
</authors>
|
19 |
-
<date>2016-
|
20 |
-
<time>
|
21 |
-
<contents><target name="mageweb"><dir name="app"><dir name="etc"><dir name="modules"><file name="Iparcel_CartHandoff.xml" hash="ffb746b30fb5ff90dd7807211f6a4e9f"/><file name="Iparcel_All.xml" hash="89e4b47a6ac9aa0b82f70b1539d587ea"/></dir></dir><dir name="code"><dir name="community"><dir name="Iparcel"><dir name="CartHandoff"><dir name="Block"><dir name="Adminhtml"><dir name="Checkitems"><file name="Button.php" hash="996c59c0e070bfe0abcfbc75c33d9181"/></dir></dir><file name="Button.php" hash="f0973ed80adca37577c9183d543ffca6"/><file name="Estimate.php" hash="ed76666cb286b1bd36235c7aa23ab098"/><dir name="Form"><file name="Button.php" hash="15c90ba070756ebc2aec36546dd5854b"/></dir></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Ipcarthandoff"><dir name="Checkitems"><file name="CacheController.php" hash="8d73c7c25b536538d4e5a1d603f34f12"/></dir></dir></dir><file name="HandoffController.php" hash="f4537926416afe1d689926475b83cce3"/><file name="StatusController.php" hash="511f645fec406059f956aa915c9138b4"/></dir><dir name="etc"><file name="adminhtml.xml" hash="e4f3a503dfa55aa0540b87d644cf0631"/><file name="config.xml" hash="6ca4bd354b7b40d51a0a513a06bef203"/><file name="system.xml" hash="460d426c8b8007051b50e3b9aaa1c3ff"/></dir><dir name="Helper"><file name="Api.php" hash="72679e7cbb51d23e47bc2cf007a71c40"/><file name="Data.php" hash="b7cca184d2968a2fcc9f7078afc60293"/></dir><dir name="Model"><dir name="Catalog"><file name="Layer.php" hash="b7410cb6b76bcf6282d0de45fcfd4214"/><dir name="Product"><dir name="Type"><dir name="Configurable"><file name="Price.php" hash="9757c4a3a06ab09e20f505b83197a864"/></dir><file name="Price.php" hash="0b5b030df7a614b880a07642d9166888"/></dir></dir></dir><file name="Checkitems.php" hash="b86446862f8eb0b48cda130dc8e4b83a"/><file name="Observer.php" hash="a9e5f4e690008acee3adbef357d1d60f"/><dir name="Payment"><file name="Ipcarthandoff.php" hash="80a584da0c50a446c552c1359a14aeab"/></dir><dir name="Resource"><dir name="Checkitems"><file name="Collection.php" hash="9a488c5a6c0b3d16f63817afd691ae80"/></dir><file name="Checkitems.php" hash="03ba687675e6eef24e6fed32c4767e55"/><dir name="Mysql4"><file name="Setup.php" hash="c7609fb203ba82fa7e1a39457f1edb3b"/></dir></dir><dir name="Sales"><file name="Order.php" hash="93008416ea3552d2adc0ed63016dc7b1"/></dir><dir name="System"><dir name="Config"><dir name="Source"><file name="Buttonplacement.php" hash="7f8a7cfd897ef5a12a082251eb397451"/><file name="Shippingaddress.php" hash="12630442dcf038ee8d7b7bf9b203b0eb"/><dir name="Checkitems"><file name="Cache.php" hash="ea4566851a70fee0473a283a7bfa0a2c"/></dir></dir></dir></dir></dir><dir name="sql"><dir name="ipcarthandoff_setup"><file name="mysql4-upgrade-1.2.0-1.3.0.php" hash="178b64c5cd9aded939a8973d4c0ac3e6"/></dir></dir></dir><dir name="All"><dir name="Block"><dir name="Adminhtml"><dir name="Catalog"><dir name="Mapping"><file name="Button.php" hash="dfdaf5a2fbf824a10fccc952fdccf567"/></dir></dir><dir name="Iparcel"><file name="Dashboard.php" hash="ec9dddd10368136f1bdfe79fddd4500c"/><file name="Logs.php" hash="5823bbc2a78666972dd02d5fd3e9d05d"/><dir name="Logs"><file name="Grid.php" hash="9c472c78640c8aecb5de4b638372e6f5"/></dir><dir name="Shipment"><dir name="Split"><file name="Form.php" hash="db44693b1eda47cb1d87b8a69ac9a5a0"/></dir><file name="Split.php" hash="4cb66f91987f842c699bd2d6c42f2249"/></dir></dir><dir name="System"><dir name="Config"><dir name="Form"><dir name="Field"><file name="Method.php" hash="935a3d4adad09d6c049cd6bb4cefb8db"/></dir></dir></dir></dir></dir><dir name="Catalog"><dir name="Product"><file name="List.php" hash="5de6102a56f4a9301f1b81004da39ef8"/></dir><file name="Product.php" hash="71a865c01574fd10ee0ffa7475cee378"/></dir><dir name="Catalogsearch"><dir name="Advanced"><file name="Result.php" hash="ad5a157444b80a284e0f9e7a91187b55"/></dir><file name="Result.php" hash="33e4ab0994bde9ba5dd87ade63869bee"/></dir><dir name="Html"><dir name="Head"><file name="Iparcel.php" hash="dd1737d041e9357269fa35b27dbef0bd"/><file name="Jquery.php" hash="3fd23960111c32d5696cc3de63e41b6e"/><file name="Post.php" hash="793d578cf82fb3ba83e1edc87b79ff95"/></dir></dir><dir name="Sales"><dir name="Order"><dir name="Totals"><file name="Abstract.php" hash="71cdfdce9a538b2f78b83b7b5eac8b19"/><file name="Duty.php" hash="2ca06e658c24b74d5e3dfa2a6950b010"/><file name="Tax.php" hash="7b630e60c6ff9340bedefdc84e99cef4"/></dir></dir></dir></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Iparcel"><file name="LogController.php" hash="94e2095979140ad6d7c149080be30d38"/><file name="ShipmentController.php" hash="a9b8896d816b7612e1dc0638a2f8b740"/><file name="SyncController.php" hash="9378f5db27d059bbb36ff1e71bd38d32"/><dir name="Shipment"><file name="SplitController.php" hash="6a294947cf9399e42e90c890a6da2caa"/></dir><dir name="Sync"><file name="AjaxController.php" hash="4ded0f9d50382ca0137d4778176d7c88"/></dir></dir></dir><file name="AjaxController.php" hash="f6b0573eefbb21d7ac863fd029783b3c"/><file name="InfoController.php" hash="ab1bdf953dac27d87e9c5c8023ed9380"/><file name="InternationalController.php" hash="5250af3266389ddf0f5ea3a806652328"/></dir><dir name="etc"><file name="adminhtml.xml" hash="50bc0bee93b5612763321eae11cfdc51"/><file name="config.xml" hash="4bd33ca7a2dca415a545f524165ced48"/><file name="system.xml" hash="823d3690c187d8c3db42912d83a6303b"/></dir><dir name="Helper"><file name="Api.php" hash="4ab64cc17f7817268517f69486def609"/><file name="Data.php" hash="cababe5f5ba754a09df2aed6405643e7"/><file name="International.php" hash="7bba0cd23188eaa3f99ed3d32ffccd14"/></dir><dir name="Model"><dir name="Api"><file name="Quote.php" hash="2e938bda13d007e73f8c2238aff76fa1"/></dir><dir name="Carrier"><file name="Abstract.php" hash="87ebc5b402ea74709a00abcf2a8aa856"/><file name="Iparcel.php" hash="f0ea2e007c04f56befed34bc6676de80"/></dir><dir name="Catalog"><dir name="Product"><file name="Observer.php" hash="d16d89cea8eea6352a7d9b1193cd9512"/></dir></dir><dir name="Config"><dir name="Script"><file name="Js.php" hash="f29fc9a7535bc886b3ccf8b2e5b7ebfc"/></dir></dir><file name="Cron.php" hash="670d37cd6cdbe60aa69fad8eb0a0759e"/><file name="Log.php" hash="8c87e5f356f8ca77a186430dda106097"/><file name="Observer.php" hash="f6d8d758ed1772ab3c8fd782f2c95183"/><dir name="Order"><dir name="Creditmemo"><dir name="Total"><file name="Duty.php" hash="33b91a5b8fa32293bfe0eab4460b04f9"/><file name="Tax.php" hash="7cd4046231eb8cb9031ae160720390da"/></dir></dir><dir name="Invoice"><dir name="Total"><file name="Duty.php" hash="5a4010994ea502afe88632ddd2699c63"/><file name="Tax.php" hash="c4c95aaaae9662860dd635238150aa46"/></dir></dir></dir><dir name="Payment"><file name="Iparcel.php" hash="d7881d795edbbd7279888e3a86fff2c8"/></dir><dir name="Quote"><dir name="Address"><dir name="Total"><file name="Abstract.php" hash="c5f5a251d5cf9f6ddb5a6d92efad157b"/><file name="Collector.php" hash="f805c3fc373f931d912b92cf38a15154"/><file name="Duty.php" hash="41adb9e60a5a22e1e552eb12aa83f858"/><file name="Tax.php" hash="67bce5ef6a1ec130cebaaa3526b97112"/></dir></dir></dir><dir name="Resource"><dir name="Api"><file name="Quote.php" hash="84d032b89c5df67ef24a112ad7846302"/></dir><dir name="Log"><file name="Collection.php" hash="7cb78be07207a599eff71c1e18ba0b7a"/></dir><file name="Log.php" hash="d14c2eb8314456a18adadbb52856e0b5"/><dir name="Mysql4"><file name="Setup.php" hash="9f9cf4b5934b70bd00b394beacb245f7"/></dir></dir><dir name="System"><dir name="Config"><dir name="Catalog"><file name="Mapping.php" hash="3d44f4b4ee157333556f588d7d8cd25b"/></dir><dir name="Data"><dir name="Date"><file name="Monthday.php" hash="baec5b8a27c5b037529ba935aae0370a"/><file name="Weekday.php" hash="173edc075325d932f8dad6d4674b8153"/></dir><dir name="Time"><file name="Hour.php" hash="ddad98b85290d9b13ec9f65fbe8a10b3"/><file name="Minute.php" hash="4a76af0057d60e8ff0ff7fedc1d50575"/></dir></dir><file name="Guid.php" hash="311c7f8072f02a6be9e25b6411298c5c"/><dir name="Script"><file name="Js.php" hash="3e3f23b38ecdc361bf6ff6cee1871e92"/></dir><dir name="Source"><dir name="Catalog"><dir name="Mapping"><dir name="Configurable"><file name="Price.php" hash="f9116fd446914467e7fb31bed5a6dd0b"/></dir><file name="Mode.php" hash="36140a050ea65ff23d45264fa67e1a2b"/></dir><dir name="Product"><dir name="Attribute"><file name="Boolean.php" hash="ca1883122659f1b48890ecd46a1590ee"/></dir><file name="Attribute.php" hash="8ca9c929cda497400865751ffba991e6"/></dir></dir><dir name="Date"><file name="Weekday.php" hash="143c26f9661e5dc995ff064e333a2018"/></dir><dir name="Sales"><dir name="Order"><file name="Status.php" hash="f1e414c08c43ebb2fcc6ccf5b41a2ff2"/></dir></dir><dir name="Tax"><file name="Mode.php" hash="fb09f17b54ef8ffa22580741cc66ac14"/></dir></dir></dir></dir><dir name="Tax"><dir name="Quote"><file name="Shipping.php" hash="e4b0f82aaef3666be520bc2da28af098"/><file name="Subtotal.php" hash="6824b6e6e86dc423fd493a31b15aa28d"/><file name="Tax.php" hash="7ee0528db7b7f9e89cd00a0b0c74dda9"/></dir></dir></dir><dir name="sql"><dir name="iparcel_setup"><file name="mysql4-upgrade-1.0.0-1.1.0.php" hash="4df6e3a3f2adf96eeb6ccdac213e3f1e"/><file name="mysql4-upgrade-1.1.0-1.1.1.php" hash="cfb9fbc137e7e551dfaece00ac6bb2f4"/><file name="mysql4-upgrade-1.1.1-1.2.0.php" hash="1f04c5c71a6a79aaf74810e87670d998"/><file name="mysql4-upgrade-1.2.0-1.2.1.php" hash="de1c9caa713dd194595aa2dd15a829ac"/></dir></dir></dir></dir></dir></dir><dir name="design"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="ipcarthandoff.xml" hash="ed7faf180d54254f9bd4bfde21cdec1d"/><file name="iparcel.xml" hash="55aec816cb242fe44aab3a2e0d9de0ba"/><file name="iparcel.xml" hash="55aec816cb242fe44aab3a2e0d9de0ba"/></dir><dir name="template"><dir name="iparcel"><dir name="carthandoff"><file name="button.phtml" hash="4724ea247d4fb514373bd25290f8ee96"/><file name="estimate.phtml" hash="4613986760ea91bbfe607336008da870"/><dir name="form"><file name="button.phtml" hash="603683fdeb5153c8ce4649f72967180a"/></dir></dir><dir name="html"><dir name="head"><file name="iparcel.phtml" hash="07091c9914189cfef06af8cc6e41855c"/><file name="jquery.phtml" hash="c287cb0aa4ddd1f04f27cb5df605a27d"/><file name="post.phtml" hash="1a53e744668b250175ba275b4260050b"/><file name="iparcel.phtml" hash="07091c9914189cfef06af8cc6e41855c"/><file name="jquery.phtml" hash="c287cb0aa4ddd1f04f27cb5df605a27d"/><file name="post.phtml" hash="1a53e744668b250175ba275b4260050b"/></dir></dir><dir name="post"><file name="list.phtml" hash="20e5d7d7f82e1f8d951a1509921eb3bf"/><file name="list.phtml" hash="20e5d7d7f82e1f8d951a1509921eb3bf"/></dir><file name="post.phtml" hash="3827cab2dba981556aeb8ec915ab03cc"/></dir></dir></dir></dir></dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="iparcel.xml" hash="c6be54da5875c9356bba8988fa8c264c"/></dir><dir name="template"><dir name="iparcel"><dir name="order"><dir name="totals"><file name="duty.phtml" hash="7af41c6d47dafeb890a520d8e6e39910"/><file name="tax.phtml" hash="25bffd2b58554cf28e5f4abe4b4e1e7c"/></dir></dir><dir name="sync"><dir name="ajax"><file name="catalog.phtml" hash="ee1ecd2cf9e8e175e5ca5ceddb197376"/><file name="checkitems.phtml" hash="b47b923ef7f433e41a9bc0d118401659"/></dir></dir></dir></dir></dir></dir></dir></dir><dir name="locale"><dir name="en_US"><file name="iparcel.csv" hash="cbcb75a490376ca0b63c8c66622c1656"/></dir></dir></dir><dir name="js"><dir name="iparcel"><file name="cart-buttons.js" hash="ee7d7c02f98b9cd4803d3934d987123a"/><file name="jQuery.js" hash="8ec1680e4d815ff93f661214efa06276"/><file name="lib.js" hash="42c556650eb62797de469f1770bde3f0"/><file name="post.js" hash="c710697e3d4905a6a707222728485047"/><file name="jQuery.js" hash="8ec1680e4d815ff93f661214efa06276"/><file name="lib.js" hash="42c556650eb62797de469f1770bde3f0"/><file name="post.js" hash="c710697e3d4905a6a707222728485047"/><file name="jQuery.js" hash="8ec1680e4d815ff93f661214efa06276"/><file name="lib.js" hash="42c556650eb62797de469f1770bde3f0"/><file name="post.js" hash="c710697e3d4905a6a707222728485047"/><dir name="adminhtml"><file name="shipping-methods.js" hash="eca91e8a5cf152fce7af0eb5bf2991bb"/><file name="sync.js" hash="f4525e5c6bce01f9a5cea562f23618e7"/><file name="shipping-methods.js" hash="eca91e8a5cf152fce7af0eb5bf2991bb"/><file name="sync.js" hash="f4525e5c6bce01f9a5cea562f23618e7"/><file name="shipping-methods.js" hash="eca91e8a5cf152fce7af0eb5bf2991bb"/><file name="sync.js" hash="f4525e5c6bce01f9a5cea562f23618e7"/><file name="shipping-methods.js" hash="eca91e8a5cf152fce7af0eb5bf2991bb"/><file name="sync.js" hash="f4525e5c6bce01f9a5cea562f23618e7"/><file name="shipping-methods.js" hash="eca91e8a5cf152fce7af0eb5bf2991bb"/><file name="sync.js" hash="f4525e5c6bce01f9a5cea562f23618e7"/></dir></dir></dir><dir name="skin"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="iparcel"><file name="ajaxSync.css" hash="c622b9e4b77589bc0f3c0555124d2751"/></dir></dir></dir></dir></dir></target></contents>
|
22 |
<compatible/>
|
23 |
<dependencies>
|
24 |
<required>
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>iparcel_carthandoff</name>
|
4 |
+
<version>1.5.0</version>
|
5 |
<stability>stable</stability>
|
6 |
<license>GPL</license>
|
7 |
<channel>community</channel>
|
16 |
<email>bburden@i-parcel.com</email>
|
17 |
</author>
|
18 |
</authors>
|
19 |
+
<date>2016-08-29</date>
|
20 |
+
<time>17:46:49</time>
|
21 |
+
<contents><target name="mageweb"><dir name="app"><dir name="etc"><dir name="modules"><file name="Iparcel_CartHandoff.xml" hash="ffb746b30fb5ff90dd7807211f6a4e9f"/><file name="Iparcel_All.xml" hash="89e4b47a6ac9aa0b82f70b1539d587ea"/></dir></dir><dir name="code"><dir name="community"><dir name="Iparcel"><dir name="CartHandoff"><file name=".DS_Store" hash="dfb9481803d164ba9ec4e857204c243e"/><dir name="Block"><dir name="Adminhtml"><dir name="Checkitems"><file name="Button.php" hash="996c59c0e070bfe0abcfbc75c33d9181"/></dir></dir><file name="Button.php" hash="f0973ed80adca37577c9183d543ffca6"/><file name="Estimate.php" hash="ed76666cb286b1bd36235c7aa23ab098"/><dir name="Form"><file name="Button.php" hash="15c90ba070756ebc2aec36546dd5854b"/></dir></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Ipcarthandoff"><dir name="Checkitems"><file name="CacheController.php" hash="dc682b48cd1d76cbe5431340ad15d10b"/></dir></dir></dir><file name="HandoffController.php" hash="e7d6991c2e76e1f5519b7376ce98e230"/><file name="StatusController.php" hash="511f645fec406059f956aa915c9138b4"/></dir><dir name="etc"><file name="adminhtml.xml" hash="e4f3a503dfa55aa0540b87d644cf0631"/><file name="config.xml" hash="4d4db1aa64e78ae8c6617fe6b90fbffc"/><file name="system.xml" hash="1100d55b1cff4f7aee9f9ecf31725cd0"/></dir><dir name="Helper"><file name="Api.php" hash="a7b84c5ebf077e460515f09e6695cee2"/><file name="Data.php" hash="b7cca184d2968a2fcc9f7078afc60293"/></dir><dir name="Model"><dir name="Catalog"><file name="Layer.php" hash="b7410cb6b76bcf6282d0de45fcfd4214"/><dir name="Product"><dir name="Type"><dir name="Configurable"><file name="Price.php" hash="9757c4a3a06ab09e20f505b83197a864"/></dir><file name="Price.php" hash="0b5b030df7a614b880a07642d9166888"/></dir></dir></dir><file name="Checkitems.php" hash="b86446862f8eb0b48cda130dc8e4b83a"/><file name="Observer.php" hash="f7ab4f37d2732fdd39fc8c0231b64910"/><dir name="Payment"><file name="Ipcarthandoff.php" hash="80a584da0c50a446c552c1359a14aeab"/></dir><dir name="Resource"><dir name="Checkitems"><file name="Collection.php" hash="9a488c5a6c0b3d16f63817afd691ae80"/></dir><file name="Checkitems.php" hash="03ba687675e6eef24e6fed32c4767e55"/><dir name="Mysql4"><file name="Setup.php" hash="c7609fb203ba82fa7e1a39457f1edb3b"/></dir></dir><dir name="Sales"><file name="Order.php" hash="93008416ea3552d2adc0ed63016dc7b1"/></dir><dir name="System"><dir name="Config"><dir name="Source"><file name="Buttonplacement.php" hash="7f8a7cfd897ef5a12a082251eb397451"/><file name="Shippingaddress.php" hash="12630442dcf038ee8d7b7bf9b203b0eb"/><dir name="Checkitems"><file name="Cache.php" hash="ea4566851a70fee0473a283a7bfa0a2c"/></dir></dir></dir></dir></dir><dir name="sql"><dir name="ipcarthandoff_setup"><file name="mysql4-upgrade-1.2.0-1.3.0.php" hash="178b64c5cd9aded939a8973d4c0ac3e6"/></dir></dir></dir><dir name="All"><dir name="Block"><dir name="Adminhtml"><dir name="Catalog"><dir name="Mapping"><file name="Button.php" hash="dfdaf5a2fbf824a10fccc952fdccf567"/></dir></dir><dir name="Iparcel"><file name="Dashboard.php" hash="ec9dddd10368136f1bdfe79fddd4500c"/><file name="Logs.php" hash="5823bbc2a78666972dd02d5fd3e9d05d"/><dir name="Logs"><file name="Grid.php" hash="9c472c78640c8aecb5de4b638372e6f5"/></dir><dir name="Shipment"><dir name="Split"><file name="Form.php" hash="db44693b1eda47cb1d87b8a69ac9a5a0"/></dir><file name="Split.php" hash="4cb66f91987f842c699bd2d6c42f2249"/></dir></dir><dir name="System"><dir name="Config"><dir name="Form"><dir name="Field"><file name="Method.php" hash="935a3d4adad09d6c049cd6bb4cefb8db"/></dir></dir></dir></dir></dir><dir name="Catalog"><dir name="Product"><file name="List.php" hash="5de6102a56f4a9301f1b81004da39ef8"/></dir><file name="Product.php" hash="71a865c01574fd10ee0ffa7475cee378"/></dir><dir name="Catalogsearch"><dir name="Advanced"><file name="Result.php" hash="ad5a157444b80a284e0f9e7a91187b55"/></dir><file name="Result.php" hash="33e4ab0994bde9ba5dd87ade63869bee"/></dir><dir name="Html"><dir name="Head"><file name="Iparcel.php" hash="dd1737d041e9357269fa35b27dbef0bd"/><file name="Jquery.php" hash="3fd23960111c32d5696cc3de63e41b6e"/><file name="Post.php" hash="793d578cf82fb3ba83e1edc87b79ff95"/></dir></dir><dir name="Sales"><dir name="Order"><dir name="Totals"><file name="Abstract.php" hash="71cdfdce9a538b2f78b83b7b5eac8b19"/><file name="Duty.php" hash="2ca06e658c24b74d5e3dfa2a6950b010"/><file name="Tax.php" hash="7b630e60c6ff9340bedefdc84e99cef4"/></dir></dir></dir></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Iparcel"><file name="LogController.php" hash="94e2095979140ad6d7c149080be30d38"/><file name="ShipmentController.php" hash="a9b8896d816b7612e1dc0638a2f8b740"/><dir name="Shipment"><file name="SplitController.php" hash="6a294947cf9399e42e90c890a6da2caa"/></dir><dir name="Sync"><file name="AjaxController.php" hash="224df904979eb90a3f639a8f5c89787a"/></dir></dir></dir><file name="AjaxController.php" hash="9069724f071742b25c83b2d0cc368871"/><file name="InfoController.php" hash="ab1bdf953dac27d87e9c5c8023ed9380"/><file name="InternationalController.php" hash="5250af3266389ddf0f5ea3a806652328"/></dir><dir name="etc"><file name="adminhtml.xml" hash="50bc0bee93b5612763321eae11cfdc51"/><file name="config.xml" hash="4bd33ca7a2dca415a545f524165ced48"/><file name="system.xml" hash="823d3690c187d8c3db42912d83a6303b"/></dir><dir name="Helper"><file name="Api.php" hash="3d3dc72a52c948964c22e94c47356cfa"/><file name="Data.php" hash="2e4f16bb0a3f1fe1345b5d21df59dbae"/><file name="International.php" hash="7bba0cd23188eaa3f99ed3d32ffccd14"/></dir><dir name="Model"><dir name="Api"><file name="Quote.php" hash="2e938bda13d007e73f8c2238aff76fa1"/></dir><dir name="Carrier"><file name="Abstract.php" hash="87ebc5b402ea74709a00abcf2a8aa856"/><file name="Iparcel.php" hash="add977e3b85ae8c08914874f02a288b3"/></dir><dir name="Catalog"><dir name="Product"><file name="Observer.php" hash="2fd0ce66f180cb7d0dfbe752e5227636"/></dir></dir><dir name="Config"><dir name="Script"><file name="Js.php" hash="f29fc9a7535bc886b3ccf8b2e5b7ebfc"/></dir></dir><file name="Cron.php" hash="670d37cd6cdbe60aa69fad8eb0a0759e"/><file name="Log.php" hash="8c87e5f356f8ca77a186430dda106097"/><file name="Observer.php" hash="9d53f374789eaa0b13349843d3e2c7fd"/><dir name="Order"><dir name="Creditmemo"><dir name="Total"><file name="Duty.php" hash="33b91a5b8fa32293bfe0eab4460b04f9"/><file name="Tax.php" hash="7cd4046231eb8cb9031ae160720390da"/></dir></dir><dir name="Invoice"><dir name="Total"><file name="Duty.php" hash="5a4010994ea502afe88632ddd2699c63"/><file name="Tax.php" hash="c4c95aaaae9662860dd635238150aa46"/></dir></dir></dir><dir name="Payment"><file name="Iparcel.php" hash="d7881d795edbbd7279888e3a86fff2c8"/></dir><dir name="Quote"><dir name="Address"><dir name="Total"><file name="Abstract.php" hash="c5f5a251d5cf9f6ddb5a6d92efad157b"/><file name="Collector.php" hash="f805c3fc373f931d912b92cf38a15154"/><file name="Duty.php" hash="41adb9e60a5a22e1e552eb12aa83f858"/><file name="Tax.php" hash="67bce5ef6a1ec130cebaaa3526b97112"/></dir></dir></dir><dir name="Resource"><dir name="Api"><file name="Quote.php" hash="84d032b89c5df67ef24a112ad7846302"/></dir><dir name="Log"><file name="Collection.php" hash="7cb78be07207a599eff71c1e18ba0b7a"/></dir><file name="Log.php" hash="d14c2eb8314456a18adadbb52856e0b5"/><dir name="Mysql4"><file name="Setup.php" hash="9f9cf4b5934b70bd00b394beacb245f7"/></dir></dir><dir name="System"><dir name="Config"><dir name="Catalog"><file name="Mapping.php" hash="3d44f4b4ee157333556f588d7d8cd25b"/></dir><dir name="Data"><dir name="Date"><file name="Monthday.php" hash="baec5b8a27c5b037529ba935aae0370a"/><file name="Weekday.php" hash="173edc075325d932f8dad6d4674b8153"/></dir><dir name="Time"><file name="Hour.php" hash="ddad98b85290d9b13ec9f65fbe8a10b3"/><file name="Minute.php" hash="4a76af0057d60e8ff0ff7fedc1d50575"/></dir></dir><file name="Guid.php" hash="311c7f8072f02a6be9e25b6411298c5c"/><dir name="Script"><file name="Js.php" hash="3e3f23b38ecdc361bf6ff6cee1871e92"/></dir><dir name="Source"><dir name="Catalog"><dir name="Mapping"><dir name="Configurable"><file name="Price.php" hash="f9116fd446914467e7fb31bed5a6dd0b"/></dir><file name="Mode.php" hash="36140a050ea65ff23d45264fa67e1a2b"/></dir><dir name="Product"><dir name="Attribute"><file name="Boolean.php" hash="ca1883122659f1b48890ecd46a1590ee"/></dir><file name="Attribute.php" hash="8ca9c929cda497400865751ffba991e6"/></dir></dir><dir name="Date"><file name="Weekday.php" hash="143c26f9661e5dc995ff064e333a2018"/></dir><dir name="Sales"><dir name="Order"><file name="Status.php" hash="f1e414c08c43ebb2fcc6ccf5b41a2ff2"/></dir></dir><dir name="Tax"><file name="Mode.php" hash="fb09f17b54ef8ffa22580741cc66ac14"/></dir></dir></dir></dir><dir name="Tax"><dir name="Quote"><file name="Shipping.php" hash="e4b0f82aaef3666be520bc2da28af098"/><file name="Subtotal.php" hash="6824b6e6e86dc423fd493a31b15aa28d"/><file name="Tax.php" hash="7ee0528db7b7f9e89cd00a0b0c74dda9"/></dir></dir></dir><dir name="sql"><dir name="iparcel_setup"><file name="mysql4-upgrade-1.0.0-1.1.0.php" hash="4df6e3a3f2adf96eeb6ccdac213e3f1e"/><file name="mysql4-upgrade-1.1.0-1.1.1.php" hash="358045d3bf4a53a477e52b573289fe4c"/><file name="mysql4-upgrade-1.1.1-1.2.0.php" hash="1f04c5c71a6a79aaf74810e87670d998"/><file name="mysql4-upgrade-1.2.0-1.2.1.php" hash="de1c9caa713dd194595aa2dd15a829ac"/></dir></dir></dir></dir></dir></dir><dir name="design"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="ipcarthandoff.xml" hash="ed7faf180d54254f9bd4bfde21cdec1d"/><file name="iparcel.xml" hash="55aec816cb242fe44aab3a2e0d9de0ba"/><file name="iparcel.xml" hash="55aec816cb242fe44aab3a2e0d9de0ba"/></dir><dir name="template"><dir name="iparcel"><dir name="carthandoff"><file name="button.phtml" hash="4724ea247d4fb514373bd25290f8ee96"/><file name="estimate.phtml" hash="4613986760ea91bbfe607336008da870"/><dir name="form"><file name="button.phtml" hash="603683fdeb5153c8ce4649f72967180a"/></dir></dir><dir name="html"><dir name="head"><file name="iparcel.phtml" hash="07091c9914189cfef06af8cc6e41855c"/><file name="jquery.phtml" hash="c287cb0aa4ddd1f04f27cb5df605a27d"/><file name="post.phtml" hash="1a53e744668b250175ba275b4260050b"/><file name="iparcel.phtml" hash="07091c9914189cfef06af8cc6e41855c"/><file name="jquery.phtml" hash="c287cb0aa4ddd1f04f27cb5df605a27d"/><file name="post.phtml" hash="1a53e744668b250175ba275b4260050b"/></dir></dir><dir name="post"><file name="list.phtml" hash="20e5d7d7f82e1f8d951a1509921eb3bf"/><file name="list.phtml" hash="20e5d7d7f82e1f8d951a1509921eb3bf"/></dir><file name="post.phtml" hash="3827cab2dba981556aeb8ec915ab03cc"/></dir></dir></dir></dir></dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="iparcel.xml" hash="b6e4778db9cebc970e1dc58cae12eb85"/></dir><dir name="template"><dir name="iparcel"><dir name="order"><dir name="totals"><file name="duty.phtml" hash="7af41c6d47dafeb890a520d8e6e39910"/><file name="tax.phtml" hash="25bffd2b58554cf28e5f4abe4b4e1e7c"/></dir></dir><dir name="sync"><dir name="ajax"><file name="catalog.phtml" hash="54ad431bc5f9b6d8dc50a1160e6d6ab5"/></dir></dir></dir></dir></dir></dir></dir></dir><dir name="locale"><dir name="en_US"><file name="iparcel.csv" hash="cbcb75a490376ca0b63c8c66622c1656"/></dir></dir></dir><dir name="js"><dir name="iparcel"><file name="cart-buttons.js" hash="98e45ffd14e94c6c33184fea62fce296"/><file name="jQuery.js" hash="8ec1680e4d815ff93f661214efa06276"/><file name="lib.js" hash="42c556650eb62797de469f1770bde3f0"/><file name="post.js" hash="c710697e3d4905a6a707222728485047"/><file name="jQuery.js" hash="8ec1680e4d815ff93f661214efa06276"/><file name="lib.js" hash="42c556650eb62797de469f1770bde3f0"/><file name="post.js" hash="c710697e3d4905a6a707222728485047"/><file name="jQuery.js" hash="8ec1680e4d815ff93f661214efa06276"/><file name="lib.js" hash="42c556650eb62797de469f1770bde3f0"/><file name="post.js" hash="c710697e3d4905a6a707222728485047"/><dir name="adminhtml"><file name="shipping-methods.js" hash="eca91e8a5cf152fce7af0eb5bf2991bb"/><file name="sync.js" hash="f755af215fb6121c766644bd9a0f399d"/><file name="shipping-methods.js" hash="eca91e8a5cf152fce7af0eb5bf2991bb"/><file name="sync.js" hash="f755af215fb6121c766644bd9a0f399d"/><file name="shipping-methods.js" hash="eca91e8a5cf152fce7af0eb5bf2991bb"/><file name="sync.js" hash="f755af215fb6121c766644bd9a0f399d"/><file name="shipping-methods.js" hash="eca91e8a5cf152fce7af0eb5bf2991bb"/><file name="sync.js" hash="f755af215fb6121c766644bd9a0f399d"/><file name="shipping-methods.js" hash="eca91e8a5cf152fce7af0eb5bf2991bb"/><file name="sync.js" hash="f755af215fb6121c766644bd9a0f399d"/></dir></dir></dir><dir name="skin"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="iparcel"><file name="ajaxSync.css" hash="c622b9e4b77589bc0f3c0555124d2751"/></dir></dir></dir></dir></dir></target></contents>
|
22 |
<compatible/>
|
23 |
<dependencies>
|
24 |
<required>
|