iparcel_carthandoff - Version 1.6.4

Version Notes

Notes

Download this release

Release Info

Developer Bobby Burden
Extension iparcel_carthandoff
Version 1.6.4
Comparing to
See all releases


Code changes from version 1.6.2 to 1.6.4

app/code/community/Iparcel/All/Helper/Api.php CHANGED
@@ -100,7 +100,15 @@ class Iparcel_All_Helper_Api
100
  if ($attribute->getData()) {
101
  $code = $attribute->getAttributeCode();
102
  }
103
- $val = strip_tags(($product->getData($code) && $product->getAttributeText($code)) ? $product->getAttributeText($code) : $product->getData($code));
 
 
 
 
 
 
 
 
104
  return $val;
105
  }
106
 
@@ -488,8 +496,6 @@ class Iparcel_All_Helper_Api
488
  $items = array();
489
  $items['key'] = Mage::helper('iparcel')->getGuid();
490
 
491
- $skus = $items['SKUs'] = array();
492
-
493
  foreach ($products as $product) {
494
  /** @var Mage_Catalog_Model_Product $product */
495
  $product = Mage::getModel('catalog/product')->load($product->getId());
@@ -522,6 +528,21 @@ class Iparcel_All_Helper_Api
522
  }
523
 
524
  $price = null;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
525
  // if it's simple product and config is to get parent's price
526
  if ($product->getTypeId() == 'simple' && Mage::getStoreConfig('catalog_mapping/attributes/price_type') == Iparcel_All_Model_System_Config_Source_Catalog_Mapping_Configurable_Price::CONFIGURABLE) {
527
  // get parentIds
@@ -532,14 +553,16 @@ class Iparcel_All_Helper_Api
532
  // if there's no price
533
  if (!$price) {
534
  //get current product's price
535
- $price = $this->_getProductAttribute($product, 'price');
 
 
536
  }
537
 
538
  // If all attempts to gather a price based on configuration fail,
539
  // call getPrice() on the product
540
  if (!$price) {
541
  $price = $product->getPrice();
542
- }
543
 
544
  $item['CountryOfOrigin'] = (string)$product->getCountryOfManufacture();
545
  $item['CurrentPrice'] = (float)$price;
@@ -917,4 +940,51 @@ class Iparcel_All_Helper_Api
917
 
918
  return true;
919
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
920
  }
100
  if ($attribute->getData()) {
101
  $code = $attribute->getAttributeCode();
102
  }
103
+
104
+ // Special case for `special_price` code
105
+ if ($code == 'special_price') {
106
+ // Grabs the special price if we are in the applicable date range
107
+ $val = $product->getFinalPrice();
108
+ } else {
109
+ $val = strip_tags(($product->getData($code) && $product->getAttributeText($code)) ? $product->getAttributeText($code) : $product->getData($code));
110
+ }
111
+
112
  return $val;
113
  }
114
 
496
  $items = array();
497
  $items['key'] = Mage::helper('iparcel')->getGuid();
498
 
 
 
499
  foreach ($products as $product) {
500
  /** @var Mage_Catalog_Model_Product $product */
501
  $product = Mage::getModel('catalog/product')->load($product->getId());
528
  }
529
 
530
  $price = null;
531
+
532
+ // Finds the price for simple products with configurable parents
533
+ $configurableParent = Mage::getModel('catalog/product_type_configurable')
534
+ ->getParentIdsByChild($product->getId());
535
+ if (count($configurableParent)) {
536
+ $configurableParent = Mage::getModel('catalog/product')->load(
537
+ $configurableParent[0]
538
+ );
539
+
540
+ $price = $this->_getConfigurableProductPrice(
541
+ $configurableParent,
542
+ $product
543
+ );
544
+ }
545
+
546
  // if it's simple product and config is to get parent's price
547
  if ($product->getTypeId() == 'simple' && Mage::getStoreConfig('catalog_mapping/attributes/price_type') == Iparcel_All_Model_System_Config_Source_Catalog_Mapping_Configurable_Price::CONFIGURABLE) {
548
  // get parentIds
553
  // if there's no price
554
  if (!$price) {
555
  //get current product's price
556
+ if (is_null($price)) {
557
+ $price = $this->_getProductAttribute($product, 'price');
558
+ }
559
  }
560
 
561
  // If all attempts to gather a price based on configuration fail,
562
  // call getPrice() on the product
563
  if (!$price) {
564
  $price = $product->getPrice();
565
+ }
566
 
567
  $item['CountryOfOrigin'] = (string)$product->getCountryOfManufacture();
568
  $item['CurrentPrice'] = (float)$price;
940
 
941
  return true;
942
  }
943
+
944
+ /**
945
+ * Find the price for a simple product based on the configurable
946
+ *
947
+ * @param $configurable
948
+ * @param $simple
949
+ * @return null|float
950
+ */
951
+ protected function _getConfigurableProductPrice($configurable, $simple)
952
+ {
953
+ $price = null;
954
+
955
+ $productAttributeOptions = $configurable->getTypeInstance(true)
956
+ ->getConfigurableAttributesAsArray($configurable);
957
+
958
+ $options = array();
959
+ // Builds the $options array to match the attribute configuration for
960
+ // this particular simple -> configurable relationship
961
+ foreach ($productAttributeOptions as $key => $productAttribute) {
962
+ $allValues = array_column(
963
+ $productAttribute['values'],
964
+ 'value_index'
965
+ );
966
+
967
+ $currentProductValue = $simple->getData(
968
+ $productAttribute['attribute_code']
969
+ );
970
+
971
+ if (in_array($currentProductValue, $allValues)) {
972
+ $options[$key] = array_search($currentProductValue, $allValues);
973
+ }
974
+ }
975
+
976
+ if (!count($options)) {
977
+ return null;
978
+ }
979
+
980
+ // Get the value of each selected option
981
+ foreach ($options as $key => $value) {
982
+ $price += $productAttributeOptions[$key]['values'][$value]['pricing_value'];
983
+ }
984
+
985
+ // Add configurable base price
986
+ $price += $configurable->getFinalPrice();
987
+
988
+ return $price;
989
+ }
990
  }
app/code/community/Iparcel/All/Model/Carrier/Iparcel.php CHANGED
@@ -33,12 +33,16 @@ class Iparcel_All_Model_Carrier_Iparcel extends Iparcel_All_Model_Carrier_Abstra
33
 
34
  // If this is being used with CartHandoff, we don't return methods
35
  // for orders with Amazon or PayPal payments
36
- if (Mage::helper('iparcel')->isCartHandoffInstalled()
 
37
  && ($this->_isAmazonPayments() || $this->_isPayPalPayment())
38
  ) {
39
  return false;
40
  }
41
 
 
 
 
42
  /** @var boolean $internationalOrder */
43
  $internationalOrder = Mage::helper('iparcel')->getIsInternational($request);
44
  if ($internationalOrder && Mage::getStoreConfig('carriers/iparcel/active')) {
@@ -94,6 +98,14 @@ class Iparcel_All_Model_Carrier_Iparcel extends Iparcel_All_Model_Carrier_Abstra
94
  'duty' => $duty,
95
  'tax' => $tax
96
  );
 
 
 
 
 
 
 
 
97
  }
98
  // Store the shipping quote
99
  $quoteId = Mage::getModel('checkout/cart')->getQuote()->getId();
@@ -103,6 +115,30 @@ class Iparcel_All_Model_Carrier_Iparcel extends Iparcel_All_Model_Carrier_Abstra
103
  $quote->setParcelId($iparcelTaxAndDuty['parcel_id']);
104
  $quote->setServiceLevels($iparcelTaxAndDuty['service_levels']);
105
  $quote->save();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
106
  return $result;
107
  }
108
  } catch (Exception $e) {
33
 
34
  // If this is being used with CartHandoff, we don't return methods
35
  // for orders with Amazon or PayPal payments
36
+ $isCartHandoff = Mage::helper('iparcel')->isCartHandoffInstalled();
37
+ if ($isCartHandoff
38
  && ($this->_isAmazonPayments() || $this->_isPayPalPayment())
39
  ) {
40
  return false;
41
  }
42
 
43
+ // Maintain a list of items ineligible for international shipping
44
+ $ineligibleItems = array();
45
+
46
  /** @var boolean $internationalOrder */
47
  $internationalOrder = Mage::helper('iparcel')->getIsInternational($request);
48
  if ($internationalOrder && Mage::getStoreConfig('carriers/iparcel/active')) {
98
  'duty' => $duty,
99
  'tax' => $tax
100
  );
101
+
102
+ // If this service level has InvalidItems, add them to the
103
+ // list of ineligible items
104
+ $invalid = (array) $ci->InvalidItems->Items;
105
+ foreach ($invalid as $item) {
106
+ $ineligibleItems[] = $item->Sku;
107
+ }
108
+
109
  }
110
  // Store the shipping quote
111
  $quoteId = Mage::getModel('checkout/cart')->getQuote()->getId();
115
  $quote->setParcelId($iparcelTaxAndDuty['parcel_id']);
116
  $quote->setServiceLevels($iparcelTaxAndDuty['service_levels']);
117
  $quote->save();
118
+
119
+ // Add error message for any products that are not eligible
120
+ // for international shipping
121
+ if ($isCartHandoff) {
122
+ $ineligibleItems = array_unique($ineligibleItems);
123
+ $skusToNames = array();
124
+ $allItems = $request->getAllItems();
125
+ if (count($ineligibleItems)) {
126
+ foreach ($allItems as $requestItem) {
127
+ $skusToNames[$requestItem->getSku()] = $requestItem
128
+ ->getName();
129
+ }
130
+ }
131
+
132
+ $session = Mage::getSingleton('checkout/session');
133
+ $session->getMessages(true);
134
+ foreach ($ineligibleItems as $ineligibleItem) {
135
+ $name = $skusToNames[$ineligibleItem];
136
+ $session->addError(
137
+ "'$name' is not available for international shipping"
138
+ );
139
+ }
140
+ }
141
+
142
  return $result;
143
  }
144
  } catch (Exception $e) {
app/code/community/Iparcel/All/etc/system.xml CHANGED
@@ -11,9 +11,9 @@
11
  <iparcel translate="label" module="iparcel">
12
  <label>i-parcel</label>
13
  <sort_order>9999</sort_order>
14
- <show_in_default>0</show_in_default>
15
- <show_in_website>0</show_in_website>
16
- <show_in_store>0</show_in_store>
17
  </iparcel>
18
  </groups>
19
  </payment>
@@ -24,9 +24,9 @@
24
  <label>i-parcel</label>
25
  <frontend_type>text</frontend_type>
26
  <sort_order>99</sort_order>
27
- <show_in_default>0</show_in_default>
28
- <show_in_website>0</show_in_website>
29
- <show_in_store>0</show_in_store>
30
  <fields>
31
  <active translate="label">
32
  <label>Enabled</label>
@@ -126,7 +126,7 @@
126
  <source_model>adminhtml/system_config_source_shipping_allspecificcountries</source_model>
127
  <show_in_default>1</show_in_default>
128
  <show_in_website>1</show_in_website>
129
- <show_in_store>0</show_in_store>
130
  </sallowspecific>
131
  <specificcountry translate="label">
132
  <label>Ship to Specific Countries</label>
@@ -135,7 +135,7 @@
135
  <source_model>adminhtml/system_config_source_country</source_model>
136
  <show_in_default>1</show_in_default>
137
  <show_in_website>1</show_in_website>
138
- <show_in_store>0</show_in_store>
139
  <can_be_empty>1</can_be_empty>
140
  </specificcountry>
141
  </fields>
@@ -149,7 +149,7 @@
149
  <sort_order>100</sort_order>
150
  <show_in_default>1</show_in_default>
151
  <show_in_website>1</show_in_website>
152
- <show_in_store>0</show_in_store>
153
  <groups>
154
  <config translate="label">
155
  <label>General</label>
@@ -157,7 +157,7 @@
157
  <sort_order>0</sort_order>
158
  <show_in_default>1</show_in_default>
159
  <show_in_website>1</show_in_website>
160
- <show_in_store>0</show_in_store>
161
  <expanded>1</expanded>
162
  <fields>
163
  <custid translate="label">
@@ -166,7 +166,7 @@
166
  <sort_order>2</sort_order>
167
  <show_in_default>1</show_in_default>
168
  <show_in_website>1</show_in_website>
169
- <show_in_store>0</show_in_store>
170
  <tooltip>This is the Company ID provided by i-parcel.</tooltip>
171
  </custid>
172
  <userid translate="label">
@@ -175,7 +175,7 @@
175
  <sort_order>3</sort_order>
176
  <show_in_default>1</show_in_default>
177
  <show_in_website>1</show_in_website>
178
- <show_in_store>0</show_in_store>
179
  <tooltip>This is Web Service Key provided by i-parcel.</tooltip>
180
  </userid>
181
  <dashboard>
@@ -193,9 +193,9 @@
193
  <label>Scripts</label>
194
  <frontend_type>text</frontend_type>
195
  <sort_order>5</sort_order>
196
- <show_in_default>0</show_in_default>
197
- <show_in_website>0</show_in_website>
198
- <show_in_store>0</show_in_store>
199
  <fields>
200
  <scripts translate="label">
201
  <label>Enable Frontend Scripts</label>
@@ -204,7 +204,7 @@
204
  <sort_order>5</sort_order>
205
  <show_in_default>1</show_in_default>
206
  <show_in_website>1</show_in_website>
207
- <show_in_store>0</show_in_store>
208
  </scripts>
209
  <jquery translate="label">
210
  <label>Enable jQuery</label>
@@ -213,8 +213,8 @@
213
  <source_model>adminhtml/system_config_source_yesno</source_model>
214
  <sort_order>10</sort_order>
215
  <show_in_default>1</show_in_default>
216
- <show_in_website>0</show_in_website>
217
- <show_in_store>0</show_in_store>
218
  </jquery>
219
  <post translate="label">
220
  <label>Custom POST scripts</label>
@@ -231,9 +231,9 @@
231
  <label>International Customer</label>
232
  <frontend_type>text</frontend_type>
233
  <sort_order>10</sort_order>
234
- <show_in_default>0</show_in_default>
235
- <show_in_website>0</show_in_website>
236
- <show_in_store>0</show_in_store>
237
  <fields>
238
  <enable translate="label">
239
  <label>Enabled</label>
@@ -260,9 +260,9 @@
260
  <label>Tax Intercepting</label>
261
  <frontend_type>text</frontend_type>
262
  <sort_order>15</sort_order>
263
- <show_in_default>0</show_in_default>
264
- <show_in_website>0</show_in_website>
265
- <show_in_store>0</show_in_store>
266
  <expanded>1</expanded>
267
  <fields>
268
  <mode translate="label">
@@ -318,7 +318,7 @@
318
  <sort_order>110</sort_order>
319
  <show_in_default>1</show_in_default>
320
  <show_in_website>1</show_in_website>
321
- <show_in_store>0</show_in_store>
322
  <groups>
323
  <config translate="label">
324
  <label>Configuration</label>
@@ -326,7 +326,7 @@
326
  <sort_order>0</sort_order>
327
  <show_in_default>1</show_in_default>
328
  <show_in_website>1</show_in_website>
329
- <show_in_store>0</show_in_store>
330
  <expanded>1</expanded>
331
  <fields>
332
  <auto_upload translate="label">
@@ -337,7 +337,7 @@
337
  <sort_order>5</sort_order>
338
  <show_in_default>1</show_in_default>
339
  <show_in_website>1</show_in_website>
340
- <show_in_store>0</show_in_store>
341
  </auto_upload>
342
  <cron_frequency translate="label">
343
  <label>Frequency</label>
@@ -346,7 +346,7 @@
346
  <sort_order>99</sort_order>
347
  <show_in_default>1</show_in_default>
348
  <show_in_website>1</show_in_website>
349
- <show_in_store>0</show_in_store>
350
  <depends>
351
  <auto_upload>2</auto_upload>
352
  </depends>
@@ -358,7 +358,7 @@
358
  <backend_model>iparcel/system_config_data_time_hour</backend_model>
359
  <show_in_default>1</show_in_default>
360
  <show_in_website>1</show_in_website>
361
- <show_in_store>0</show_in_store>
362
  <depends>
363
  <auto_upload>2</auto_upload>
364
  </depends>
@@ -370,7 +370,7 @@
370
  <backend_model>iparcel/system_config_data_time_minute</backend_model>
371
  <show_in_default>1</show_in_default>
372
  <show_in_website>1</show_in_website>
373
- <show_in_store>0</show_in_store>
374
  <depends>
375
  <auto_upload>2</auto_upload>
376
  </depends>
@@ -382,7 +382,7 @@
382
  <backend_model>iparcel/system_config_data_date_monthday</backend_model>
383
  <show_in_default>1</show_in_default>
384
  <show_in_website>1</show_in_website>
385
- <show_in_store>0</show_in_store>
386
  <depends>
387
  <auto_upload>2</auto_upload>
388
  <cron_frequency>M</cron_frequency>
@@ -396,7 +396,7 @@
396
  <backend_model>iparcel/system_config_data_date_weekday</backend_model>
397
  <show_in_default>1</show_in_default>
398
  <show_in_website>1</show_in_website>
399
- <show_in_store>0</show_in_store>
400
  <depends>
401
  <auto_upload>2</auto_upload>
402
  <cron_frequency>W</cron_frequency>
@@ -410,7 +410,7 @@
410
  <sort_order>0</sort_order>
411
  <show_in_default>1</show_in_default>
412
  <show_in_website>1</show_in_website>
413
- <show_in_store>0</show_in_store>
414
  <expanded>1</expanded>
415
  <fields>
416
  <upload translate="label">
@@ -420,7 +420,7 @@
420
  <sort_order>1</sort_order>
421
  <show_in_default>1</show_in_default>
422
  <show_in_website>1</show_in_website>
423
- <show_in_store>0</show_in_store>
424
  <tooltip>If this button is pressed, the catalog will be uploaded to i-parcel.</tooltip>
425
  <comment>This may take some time</comment>
426
  </upload>
@@ -429,8 +429,8 @@
429
  <frontend_type>text</frontend_type>
430
  <sort_order>10</sort_order>
431
  <show_in_default>1</show_in_default>
432
- <show_in_website>0</show_in_website>
433
- <show_in_store>0</show_in_store>
434
  <validate>validate-number validate-greater-than-zero</validate>
435
  </step>
436
  <offset translate="label">
@@ -438,8 +438,8 @@
438
  <frontend_type>text</frontend_type>
439
  <sort_order>20</sort_order>
440
  <show_in_default>1</show_in_default>
441
- <show_in_website>0</show_in_website>
442
- <show_in_store>0</show_in_store>
443
  <validate>validate-number validate-zero-or-greater</validate>
444
  </offset>
445
  </fields>
@@ -449,8 +449,8 @@
449
  <frontend_type>text</frontend_type>
450
  <sort_order>5</sort_order>
451
  <show_in_default>1</show_in_default>
452
- <show_in_website>0</show_in_website>
453
- <show_in_store>0</show_in_store>
454
  <expanded>1</expanded>
455
  <fields>
456
  <attribute1 translate="label">
@@ -460,7 +460,7 @@
460
  <sort_order>6</sort_order>
461
  <show_in_default>1</show_in_default>
462
  <show_in_website>1</show_in_website>
463
- <show_in_store>0</show_in_store>
464
  </attribute1>
465
  <attribute2 translate="label">
466
  <label>Attribute 2</label>
@@ -469,7 +469,7 @@
469
  <sort_order>11</sort_order>
470
  <show_in_default>1</show_in_default>
471
  <show_in_website>1</show_in_website>
472
- <show_in_store>0</show_in_store>
473
  </attribute2>
474
  <attribute3 translate="label">
475
  <label>Attribute 3</label>
@@ -478,7 +478,7 @@
478
  <sort_order>16</sort_order>
479
  <show_in_default>1</show_in_default>
480
  <show_in_website>1</show_in_website>
481
- <show_in_store>0</show_in_store>
482
  </attribute3>
483
  <attribute4 translate="label">
484
  <label>Attribute 4</label>
@@ -487,7 +487,7 @@
487
  <sort_order>21</sort_order>
488
  <show_in_default>1</show_in_default>
489
  <show_in_website>1</show_in_website>
490
- <show_in_store>0</show_in_store>
491
  </attribute4>
492
  <attribute5 translate="label">
493
  <label>Attribute 5</label>
@@ -496,7 +496,7 @@
496
  <sort_order>26</sort_order>
497
  <show_in_default>1</show_in_default>
498
  <show_in_website>1</show_in_website>
499
- <show_in_store>0</show_in_store>
500
  </attribute5>
501
  <attribute6 translate="label">
502
  <label>Attribute 6</label>
@@ -505,7 +505,7 @@
505
  <sort_order>31</sort_order>
506
  <show_in_default>1</show_in_default>
507
  <show_in_website>1</show_in_website>
508
- <show_in_store>0</show_in_store>
509
  </attribute6>
510
  <hscodeus translate="label">
511
  <label>HS Code</label>
@@ -514,7 +514,7 @@
514
  <sort_order>36</sort_order>
515
  <show_in_default>1</show_in_default>
516
  <show_in_website>1</show_in_website>
517
- <show_in_store>0</show_in_store>
518
  </hscodeus>
519
  <shipalone translate="label">
520
  <label>Ship Alone</label>
@@ -523,7 +523,7 @@
523
  <sort_order>41</sort_order>
524
  <show_in_default>1</show_in_default>
525
  <show_in_website>1</show_in_website>
526
- <show_in_store>0</show_in_store>
527
  <comment>Only boolean attributes</comment>
528
  </shipalone>
529
  <price_type translate="label">
@@ -533,7 +533,7 @@
533
  <sort_order>46</sort_order>
534
  <show_in_default>1</show_in_default>
535
  <show_in_website>1</show_in_website>
536
- <show_in_store>0</show_in_store>
537
  <comment>Price type for configurable products</comment>
538
  </price_type>
539
  <height translate="label">
@@ -543,7 +543,7 @@
543
  <sort_order>47</sort_order>
544
  <show_in_default>1</show_in_default>
545
  <show_in_website>1</show_in_website>
546
- <show_in_store>0</show_in_store>
547
  </height>
548
  <width translate="label">
549
  <label>Width</label>
@@ -552,7 +552,7 @@
552
  <sort_order>47</sort_order>
553
  <show_in_default>1</show_in_default>
554
  <show_in_website>1</show_in_website>
555
- <show_in_store>0</show_in_store>
556
  </width>
557
  <weight translate="label">
558
  <label>Weight</label>
@@ -561,7 +561,7 @@
561
  <sort_order>47</sort_order>
562
  <show_in_default>1</show_in_default>
563
  <show_in_website>1</show_in_website>
564
- <show_in_store>0</show_in_store>
565
  </weight>
566
  <length translate="label">
567
  <label>Length</label>
@@ -570,7 +570,7 @@
570
  <sort_order>47</sort_order>
571
  <show_in_default>1</show_in_default>
572
  <show_in_website>1</show_in_website>
573
- <show_in_store>0</show_in_store>
574
  </length>
575
  <price translate="label">
576
  <label>Price</label>
@@ -579,7 +579,7 @@
579
  <sort_order>47</sort_order>
580
  <show_in_default>1</show_in_default>
581
  <show_in_website>1</show_in_website>
582
- <show_in_store>0</show_in_store>
583
  </price>
584
  </fields>
585
  </attributes>
11
  <iparcel translate="label" module="iparcel">
12
  <label>i-parcel</label>
13
  <sort_order>9999</sort_order>
14
+ <show_in_default>1</show_in_default>
15
+ <show_in_website>1</show_in_website>
16
+ <show_in_store>1</show_in_store>
17
  </iparcel>
18
  </groups>
19
  </payment>
24
  <label>i-parcel</label>
25
  <frontend_type>text</frontend_type>
26
  <sort_order>99</sort_order>
27
+ <show_in_default>1</show_in_default>
28
+ <show_in_website>1</show_in_website>
29
+ <show_in_store>1</show_in_store>
30
  <fields>
31
  <active translate="label">
32
  <label>Enabled</label>
126
  <source_model>adminhtml/system_config_source_shipping_allspecificcountries</source_model>
127
  <show_in_default>1</show_in_default>
128
  <show_in_website>1</show_in_website>
129
+ <show_in_store>1</show_in_store>
130
  </sallowspecific>
131
  <specificcountry translate="label">
132
  <label>Ship to Specific Countries</label>
135
  <source_model>adminhtml/system_config_source_country</source_model>
136
  <show_in_default>1</show_in_default>
137
  <show_in_website>1</show_in_website>
138
+ <show_in_store>1</show_in_store>
139
  <can_be_empty>1</can_be_empty>
140
  </specificcountry>
141
  </fields>
149
  <sort_order>100</sort_order>
150
  <show_in_default>1</show_in_default>
151
  <show_in_website>1</show_in_website>
152
+ <show_in_store>1</show_in_store>
153
  <groups>
154
  <config translate="label">
155
  <label>General</label>
157
  <sort_order>0</sort_order>
158
  <show_in_default>1</show_in_default>
159
  <show_in_website>1</show_in_website>
160
+ <show_in_store>1</show_in_store>
161
  <expanded>1</expanded>
162
  <fields>
163
  <custid translate="label">
166
  <sort_order>2</sort_order>
167
  <show_in_default>1</show_in_default>
168
  <show_in_website>1</show_in_website>
169
+ <show_in_store>1</show_in_store>
170
  <tooltip>This is the Company ID provided by i-parcel.</tooltip>
171
  </custid>
172
  <userid translate="label">
175
  <sort_order>3</sort_order>
176
  <show_in_default>1</show_in_default>
177
  <show_in_website>1</show_in_website>
178
+ <show_in_store>1</show_in_store>
179
  <tooltip>This is Web Service Key provided by i-parcel.</tooltip>
180
  </userid>
181
  <dashboard>
193
  <label>Scripts</label>
194
  <frontend_type>text</frontend_type>
195
  <sort_order>5</sort_order>
196
+ <show_in_default>1</show_in_default>
197
+ <show_in_website>1</show_in_website>
198
+ <show_in_store>1</show_in_store>
199
  <fields>
200
  <scripts translate="label">
201
  <label>Enable Frontend Scripts</label>
204
  <sort_order>5</sort_order>
205
  <show_in_default>1</show_in_default>
206
  <show_in_website>1</show_in_website>
207
+ <show_in_store>1</show_in_store>
208
  </scripts>
209
  <jquery translate="label">
210
  <label>Enable jQuery</label>
213
  <source_model>adminhtml/system_config_source_yesno</source_model>
214
  <sort_order>10</sort_order>
215
  <show_in_default>1</show_in_default>
216
+ <show_in_website>1</show_in_website>
217
+ <show_in_store>1</show_in_store>
218
  </jquery>
219
  <post translate="label">
220
  <label>Custom POST scripts</label>
231
  <label>International Customer</label>
232
  <frontend_type>text</frontend_type>
233
  <sort_order>10</sort_order>
234
+ <show_in_default>1</show_in_default>
235
+ <show_in_website>1</show_in_website>
236
+ <show_in_store>1</show_in_store>
237
  <fields>
238
  <enable translate="label">
239
  <label>Enabled</label>
260
  <label>Tax Intercepting</label>
261
  <frontend_type>text</frontend_type>
262
  <sort_order>15</sort_order>
263
+ <show_in_default>1</show_in_default>
264
+ <show_in_website>1</show_in_website>
265
+ <show_in_store>1</show_in_store>
266
  <expanded>1</expanded>
267
  <fields>
268
  <mode translate="label">
318
  <sort_order>110</sort_order>
319
  <show_in_default>1</show_in_default>
320
  <show_in_website>1</show_in_website>
321
+ <show_in_store>1</show_in_store>
322
  <groups>
323
  <config translate="label">
324
  <label>Configuration</label>
326
  <sort_order>0</sort_order>
327
  <show_in_default>1</show_in_default>
328
  <show_in_website>1</show_in_website>
329
+ <show_in_store>1</show_in_store>
330
  <expanded>1</expanded>
331
  <fields>
332
  <auto_upload translate="label">
337
  <sort_order>5</sort_order>
338
  <show_in_default>1</show_in_default>
339
  <show_in_website>1</show_in_website>
340
+ <show_in_store>1</show_in_store>
341
  </auto_upload>
342
  <cron_frequency translate="label">
343
  <label>Frequency</label>
346
  <sort_order>99</sort_order>
347
  <show_in_default>1</show_in_default>
348
  <show_in_website>1</show_in_website>
349
+ <show_in_store>1</show_in_store>
350
  <depends>
351
  <auto_upload>2</auto_upload>
352
  </depends>
358
  <backend_model>iparcel/system_config_data_time_hour</backend_model>
359
  <show_in_default>1</show_in_default>
360
  <show_in_website>1</show_in_website>
361
+ <show_in_store>1</show_in_store>
362
  <depends>
363
  <auto_upload>2</auto_upload>
364
  </depends>
370
  <backend_model>iparcel/system_config_data_time_minute</backend_model>
371
  <show_in_default>1</show_in_default>
372
  <show_in_website>1</show_in_website>
373
+ <show_in_store>1</show_in_store>
374
  <depends>
375
  <auto_upload>2</auto_upload>
376
  </depends>
382
  <backend_model>iparcel/system_config_data_date_monthday</backend_model>
383
  <show_in_default>1</show_in_default>
384
  <show_in_website>1</show_in_website>
385
+ <show_in_store>1</show_in_store>
386
  <depends>
387
  <auto_upload>2</auto_upload>
388
  <cron_frequency>M</cron_frequency>
396
  <backend_model>iparcel/system_config_data_date_weekday</backend_model>
397
  <show_in_default>1</show_in_default>
398
  <show_in_website>1</show_in_website>
399
+ <show_in_store>1</show_in_store>
400
  <depends>
401
  <auto_upload>2</auto_upload>
402
  <cron_frequency>W</cron_frequency>
410
  <sort_order>0</sort_order>
411
  <show_in_default>1</show_in_default>
412
  <show_in_website>1</show_in_website>
413
+ <show_in_store>1</show_in_store>
414
  <expanded>1</expanded>
415
  <fields>
416
  <upload translate="label">
420
  <sort_order>1</sort_order>
421
  <show_in_default>1</show_in_default>
422
  <show_in_website>1</show_in_website>
423
+ <show_in_store>1</show_in_store>
424
  <tooltip>If this button is pressed, the catalog will be uploaded to i-parcel.</tooltip>
425
  <comment>This may take some time</comment>
426
  </upload>
429
  <frontend_type>text</frontend_type>
430
  <sort_order>10</sort_order>
431
  <show_in_default>1</show_in_default>
432
+ <show_in_website>1</show_in_website>
433
+ <show_in_store>1</show_in_store>
434
  <validate>validate-number validate-greater-than-zero</validate>
435
  </step>
436
  <offset translate="label">
438
  <frontend_type>text</frontend_type>
439
  <sort_order>20</sort_order>
440
  <show_in_default>1</show_in_default>
441
+ <show_in_website>1</show_in_website>
442
+ <show_in_store>1</show_in_store>
443
  <validate>validate-number validate-zero-or-greater</validate>
444
  </offset>
445
  </fields>
449
  <frontend_type>text</frontend_type>
450
  <sort_order>5</sort_order>
451
  <show_in_default>1</show_in_default>
452
+ <show_in_website>1</show_in_website>
453
+ <show_in_store>1</show_in_store>
454
  <expanded>1</expanded>
455
  <fields>
456
  <attribute1 translate="label">
460
  <sort_order>6</sort_order>
461
  <show_in_default>1</show_in_default>
462
  <show_in_website>1</show_in_website>
463
+ <show_in_store>1</show_in_store>
464
  </attribute1>
465
  <attribute2 translate="label">
466
  <label>Attribute 2</label>
469
  <sort_order>11</sort_order>
470
  <show_in_default>1</show_in_default>
471
  <show_in_website>1</show_in_website>
472
+ <show_in_store>1</show_in_store>
473
  </attribute2>
474
  <attribute3 translate="label">
475
  <label>Attribute 3</label>
478
  <sort_order>16</sort_order>
479
  <show_in_default>1</show_in_default>
480
  <show_in_website>1</show_in_website>
481
+ <show_in_store>1</show_in_store>
482
  </attribute3>
483
  <attribute4 translate="label">
484
  <label>Attribute 4</label>
487
  <sort_order>21</sort_order>
488
  <show_in_default>1</show_in_default>
489
  <show_in_website>1</show_in_website>
490
+ <show_in_store>1</show_in_store>
491
  </attribute4>
492
  <attribute5 translate="label">
493
  <label>Attribute 5</label>
496
  <sort_order>26</sort_order>
497
  <show_in_default>1</show_in_default>
498
  <show_in_website>1</show_in_website>
499
+ <show_in_store>1</show_in_store>
500
  </attribute5>
501
  <attribute6 translate="label">
502
  <label>Attribute 6</label>
505
  <sort_order>31</sort_order>
506
  <show_in_default>1</show_in_default>
507
  <show_in_website>1</show_in_website>
508
+ <show_in_store>1</show_in_store>
509
  </attribute6>
510
  <hscodeus translate="label">
511
  <label>HS Code</label>
514
  <sort_order>36</sort_order>
515
  <show_in_default>1</show_in_default>
516
  <show_in_website>1</show_in_website>
517
+ <show_in_store>1</show_in_store>
518
  </hscodeus>
519
  <shipalone translate="label">
520
  <label>Ship Alone</label>
523
  <sort_order>41</sort_order>
524
  <show_in_default>1</show_in_default>
525
  <show_in_website>1</show_in_website>
526
+ <show_in_store>1</show_in_store>
527
  <comment>Only boolean attributes</comment>
528
  </shipalone>
529
  <price_type translate="label">
533
  <sort_order>46</sort_order>
534
  <show_in_default>1</show_in_default>
535
  <show_in_website>1</show_in_website>
536
+ <show_in_store>1</show_in_store>
537
  <comment>Price type for configurable products</comment>
538
  </price_type>
539
  <height translate="label">
543
  <sort_order>47</sort_order>
544
  <show_in_default>1</show_in_default>
545
  <show_in_website>1</show_in_website>
546
+ <show_in_store>1</show_in_store>
547
  </height>
548
  <width translate="label">
549
  <label>Width</label>
552
  <sort_order>47</sort_order>
553
  <show_in_default>1</show_in_default>
554
  <show_in_website>1</show_in_website>
555
+ <show_in_store>1</show_in_store>
556
  </width>
557
  <weight translate="label">
558
  <label>Weight</label>
561
  <sort_order>47</sort_order>
562
  <show_in_default>1</show_in_default>
563
  <show_in_website>1</show_in_website>
564
+ <show_in_store>1</show_in_store>
565
  </weight>
566
  <length translate="label">
567
  <label>Length</label>
570
  <sort_order>47</sort_order>
571
  <show_in_default>1</show_in_default>
572
  <show_in_website>1</show_in_website>
573
+ <show_in_store>1</show_in_store>
574
  </length>
575
  <price translate="label">
576
  <label>Price</label>
579
  <sort_order>47</sort_order>
580
  <show_in_default>1</show_in_default>
581
  <show_in_website>1</show_in_website>
582
+ <show_in_store>1</show_in_store>
583
  </price>
584
  </fields>
585
  </attributes>
app/code/community/Iparcel/CartHandoff/Helper/Api.php CHANGED
@@ -29,7 +29,7 @@ class Iparcel_CartHandoff_Helper_Api extends Iparcel_All_Helper_Api
29
  * @param Mage_Sales_Model_Quote $quote
30
  * @param string $cancelUrl URL to use when cancelling an order
31
  * @param string $returnUrl URL to use once the order is submitted.
32
- * @return mixed Transaction Number, in case of error, returns false
33
  */
34
  public function setCheckout(
35
  Mage_Sales_Model_Quote $quote,
@@ -227,7 +227,7 @@ class Iparcel_CartHandoff_Helper_Api extends Iparcel_All_Helper_Api
227
  $response = json_decode($response);
228
 
229
  if (is_object($response) && property_exists($response, 'tx')) {
230
- return $response->tx;
231
  }
232
 
233
  return false;
@@ -707,8 +707,22 @@ class Iparcel_CartHandoff_Helper_Api extends Iparcel_All_Helper_Api
707
  $order->setBillingAddress($convert->addressToOrderAddress($quote->getBillingAddress()));
708
  $order->setShippingAddress($convert->addressToOrderAddress($quote->getShippingAddress()));
709
 
 
 
 
 
 
 
 
710
  $items = $quote->getAllItems();
711
  foreach ($items as $item) {
 
 
 
 
 
 
 
712
  $orderItem = $convert->itemToOrderItem($item);
713
  $productOptions = $item->getProduct()->getTypeInstance(true)->getOrderOptions($item->getProduct());
714
  if ($productOptions) {
29
  * @param Mage_Sales_Model_Quote $quote
30
  * @param string $cancelUrl URL to use when cancelling an order
31
  * @param string $returnUrl URL to use once the order is submitted.
32
+ * @return bool|object StdObject, or in case of error, returns false
33
  */
34
  public function setCheckout(
35
  Mage_Sales_Model_Quote $quote,
227
  $response = json_decode($response);
228
 
229
  if (is_object($response) && property_exists($response, 'tx')) {
230
+ return $response;
231
  }
232
 
233
  return false;
707
  $order->setBillingAddress($convert->addressToOrderAddress($quote->getBillingAddress()));
708
  $order->setShippingAddress($convert->addressToOrderAddress($quote->getShippingAddress()));
709
 
710
+ // Build up list of items that were removed from the quote by i-parcel
711
+ $ineligbleItems = array();
712
+ $invalidItems = $response->InvalidItems;
713
+ foreach ($invalidItems as $invalidItem) {
714
+ $ineligbleItems[] = $invalidItem->item_number;
715
+ }
716
+
717
  $items = $quote->getAllItems();
718
  foreach ($items as $item) {
719
+ if (in_array($item->getSku(), $ineligbleItems)) {
720
+ // Skip this item, as it was marked as "Invalid" in the
721
+ // GetCheckoutDetails response
722
+ $quote->removeItem($item->getId());
723
+ continue;
724
+ }
725
+
726
  $orderItem = $convert->itemToOrderItem($item);
727
  $productOptions = $item->getProduct()->getTypeInstance(true)->getOrderOptions($item->getProduct());
728
  if ($productOptions) {
app/code/community/Iparcel/CartHandoff/controllers/HandoffController.php CHANGED
@@ -12,6 +12,7 @@ class Iparcel_CartHandoff_HandoffController extends Mage_Core_Controller_Front_A
12
  protected $_session = null;
13
  protected $_quote = null;
14
  protected $iparcelLogfile = 'iparcel_carthandoff.log';
 
15
 
16
  /**
17
  * Grab user's checkout session and quote
@@ -53,14 +54,52 @@ class Iparcel_CartHandoff_HandoffController extends Mage_Core_Controller_Front_A
53
  }
54
 
55
  $apiHelper = Mage::helper('ipcarthandoff/api');
56
- $transactionNumber = $apiHelper->setCheckout($this->_quote);
57
 
 
58
  if ($transactionNumber == false) {
59
  $this->_session->addError("There was a problem communicating to UPS i-parcel");
60
  $this->getResponse()->setRedirect(Mage::getUrl('checkout/cart'));
61
  return;
62
  }
63
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
64
  // With a transaction ID established, redirect the user to checkout
65
  $this->getResponse()->setRedirect(
66
  Mage::helper('ipcarthandoff')->getCheckoutUrl($transactionNumber)
@@ -105,25 +144,7 @@ class Iparcel_CartHandoff_HandoffController extends Mage_Core_Controller_Front_A
105
  */
106
  public function paymentAction()
107
  {
108
- $this->_clearMultiShip($this->_quote);
109
-
110
- $apiHelper = Mage::helper('ipcarthandoff/api');
111
- $cancelUrl = Mage::getUrl('ipcarthandoff/handoff/cancel');
112
- $returnUrl = mage::getUrl('ipcarthandoff/handoff/paymentReturn');
113
- $transactionNumber = $apiHelper->setCheckout($this->_quote, $cancelUrl, $returnUrl);
114
-
115
- if ($transactionNumber == false) {
116
- $this->_session->addError("There was a problem communicating to UPS i-parcel");
117
- $this->getResponse()->setRedirect(Mage::getUrl('checkout/cart'));
118
- return;
119
- }
120
-
121
- // With a transaction ID established, redirect the user to checkout
122
- $this->getResponse()->setRedirect(
123
- Mage::helper('ipcarthandoff')->getCheckoutUrl($transactionNumber)
124
- );
125
-
126
- return;
127
  }
128
 
129
  /**
@@ -295,8 +316,8 @@ class Iparcel_CartHandoff_HandoffController extends Mage_Core_Controller_Front_A
295
  $session->getQuote(), $response
296
  );
297
  } catch (Exception $e) {
298
- Mage::logException($e);
299
  // This catches any exceptions thrown during order creation.
 
300
 
301
  $this->logToFile(
302
  '_buildOrder(): Failed to build order for tx ' . $txId
@@ -437,4 +458,4 @@ class Iparcel_CartHandoff_HandoffController extends Mage_Core_Controller_Front_A
437
  Mage::log($message, null, $this->iparcelLogfile, true);
438
  return true;
439
  }
440
- }
12
  protected $_session = null;
13
  protected $_quote = null;
14
  protected $iparcelLogfile = 'iparcel_carthandoff.log';
15
+ protected $noValidItems = 'NO-VALID-ITEMS';
16
 
17
  /**
18
  * Grab user's checkout session and quote
54
  }
55
 
56
  $apiHelper = Mage::helper('ipcarthandoff/api');
57
+ $response = $apiHelper->setCheckout($this->_quote);
58
 
59
+ $transactionNumber = $response->tx;
60
  if ($transactionNumber == false) {
61
  $this->_session->addError("There was a problem communicating to UPS i-parcel");
62
  $this->getResponse()->setRedirect(Mage::getUrl('checkout/cart'));
63
  return;
64
  }
65
 
66
+ // If the TX returns a No Eligble Items error, report that and return
67
+ // to the cart page.
68
+ if ($transactionNumber == $this->noValidItems) {
69
+ $this->_session->addError("None of the items in your cart are eligible for international shipping.");
70
+ $this->getResponse()->setRedirect(Mage::getUrl('checkout/cart'));
71
+ return;
72
+ }
73
+
74
+ // Check for InvalidItems in the response
75
+ $invalidItems = $response->InvalidItems;
76
+ if (count($invalidItems)) {
77
+ $invalidSkus = array();
78
+ foreach ($invalidItems as $item) {
79
+ $invalidSkus[$item->item_number] = $item->item_name;
80
+ }
81
+
82
+ // If checkout with inelligible items is disabled, add errors to
83
+ // the cart and redirect back to the cart page.
84
+ if (!Mage::getStoreConfig('payment/ipcarthandoff/allow_partial_cart')) {
85
+ foreach ($invalidSkus as $sku => $name) {
86
+ $this->_session->addError(
87
+ "'$name' is not available for international shipping"
88
+ );
89
+ }
90
+ $this->getResponse()->setRedirect(Mage::getUrl('checkout/cart'));
91
+ return;
92
+ }
93
+ }
94
+
95
+ // Ensure that the CartHandoff payment method is configured for this quote
96
+ $cartHandoffPMC = Mage::helper('ipcarthandoff')->getPaymentMethodCode();
97
+ if ($this->_quote->getPayment()->getMethod() != $cartHandoffPMC) {
98
+ $cartHandoffPM = Mage::getModel('ipcarthandoff/payment_ipcarthandoff');
99
+ $this->_quote->getPayment()->setMethod($cartHandoffPM->getCode());
100
+ $this->_quote->save();
101
+ }
102
+
103
  // With a transaction ID established, redirect the user to checkout
104
  $this->getResponse()->setRedirect(
105
  Mage::helper('ipcarthandoff')->getCheckoutUrl($transactionNumber)
144
  */
145
  public function paymentAction()
146
  {
147
+ return $this->beginAction();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
148
  }
149
 
150
  /**
316
  $session->getQuote(), $response
317
  );
318
  } catch (Exception $e) {
 
319
  // This catches any exceptions thrown during order creation.
320
+ Mage::logException($e);
321
 
322
  $this->logToFile(
323
  '_buildOrder(): Failed to build order for tx ' . $txId
458
  Mage::log($message, null, $this->iparcelLogfile, true);
459
  return true;
460
  }
461
+ }
app/code/community/Iparcel/CartHandoff/etc/config.xml CHANGED
@@ -2,7 +2,7 @@
2
  <config>
3
  <modules>
4
  <Iparcel_CartHandoff>
5
- <version>1.6.2</version>
6
  </Iparcel_CartHandoff>
7
  </modules>
8
  <global>
@@ -132,6 +132,7 @@
132
  <hide_proceed_to_checkout>0</hide_proceed_to_checkout>
133
  <hide_other_checkout_methods>0</hide_other_checkout_methods>
134
  <send_new_order_emails>1</send_new_order_emails>
 
135
  </ipcarthandoff>
136
  </payment>
137
  <carriers>
2
  <config>
3
  <modules>
4
  <Iparcel_CartHandoff>
5
+ <version>1.6.4</version>
6
  </Iparcel_CartHandoff>
7
  </modules>
8
  <global>
132
  <hide_proceed_to_checkout>0</hide_proceed_to_checkout>
133
  <hide_other_checkout_methods>0</hide_other_checkout_methods>
134
  <send_new_order_emails>1</send_new_order_emails>
135
+ <allow_partial_cart>1</allow_partial_cart>
136
  </ipcarthandoff>
137
  </payment>
138
  <carriers>
app/code/community/Iparcel/CartHandoff/etc/system.xml CHANGED
@@ -1,8 +1,8 @@
1
  <?xml version="1.0"?>
2
  <config>
3
  <sections>
4
- <iparcel>
5
- <groups>
6
  <api translate="label" module="ipcarthandoff">
7
  <label>API Options</label>
8
  <sort_order>100</sort_order>
@@ -11,27 +11,27 @@
11
  <show_in_store>1</show_in_store>
12
  <expanded>1</expanded>
13
  <fields>
14
- <timeout>
15
- <label>Timeout (in seconds)</label>
16
- <frontend_type>text</frontend_type>
17
- <sort_order>1</sort_order>
18
- <show_in_default>1</show_in_default>
19
- <show_in_website>1</show_in_website>
20
- <show_in_store>1</show_in_store>
21
- </timeout>
22
- <timeout_message>
23
- <label>Timeout Message</label>
24
- <tooltip>This error message will be attached to a user's session in the event of a timeout.</tooltip>
25
- <frontend_type>text</frontend_type>
26
- <sort_order>5</sort_order>
27
- <show_in_default>1</show_in_default>
28
- <show_in_website>1</show_in_website>
29
- <show_in_store>1</show_in_store>
30
- </timeout_message>
31
- </fields>
32
- </api>
33
- </groups>
34
- </iparcel>
35
  <carriers>
36
  <groups>
37
  <iparcel>
@@ -153,7 +153,7 @@
153
  <show_in_website>1</show_in_website>
154
  <show_in_store>1</show_in_store>
155
  </sort_order>
156
- <back_to_shopping>
157
  <label>Back To Shopping link</label>
158
  <tooltip>This string will be appended to the end of the site's BaseURL, and be linked to from the UPS i-parcel payment page. This is blank by default.</tooltip>
159
  <frontend_type>text</frontend_type>
@@ -161,7 +161,17 @@
161
  <show_in_default>1</show_in_default>
162
  <show_in_website>1</show_in_website>
163
  <show_in_store>1</show_in_store>
164
- </back_to_shopping>
 
 
 
 
 
 
 
 
 
 
165
  </fields>
166
  </ipcarthandoff>
167
  </groups>
1
  <?xml version="1.0"?>
2
  <config>
3
  <sections>
4
+ <iparcel>
5
+ <groups>
6
  <api translate="label" module="ipcarthandoff">
7
  <label>API Options</label>
8
  <sort_order>100</sort_order>
11
  <show_in_store>1</show_in_store>
12
  <expanded>1</expanded>
13
  <fields>
14
+ <timeout>
15
+ <label>Timeout (in seconds)</label>
16
+ <frontend_type>text</frontend_type>
17
+ <sort_order>1</sort_order>
18
+ <show_in_default>1</show_in_default>
19
+ <show_in_website>1</show_in_website>
20
+ <show_in_store>1</show_in_store>
21
+ </timeout>
22
+ <timeout_message>
23
+ <label>Timeout Message</label>
24
+ <tooltip>This error message will be attached to a user's session in the event of a timeout.</tooltip>
25
+ <frontend_type>text</frontend_type>
26
+ <sort_order>5</sort_order>
27
+ <show_in_default>1</show_in_default>
28
+ <show_in_website>1</show_in_website>
29
+ <show_in_store>1</show_in_store>
30
+ </timeout_message>
31
+ </fields>
32
+ </api>
33
+ </groups>
34
+ </iparcel>
35
  <carriers>
36
  <groups>
37
  <iparcel>
153
  <show_in_website>1</show_in_website>
154
  <show_in_store>1</show_in_store>
155
  </sort_order>
156
+ <back_to_shopping>
157
  <label>Back To Shopping link</label>
158
  <tooltip>This string will be appended to the end of the site's BaseURL, and be linked to from the UPS i-parcel payment page. This is blank by default.</tooltip>
159
  <frontend_type>text</frontend_type>
161
  <show_in_default>1</show_in_default>
162
  <show_in_website>1</show_in_website>
163
  <show_in_store>1</show_in_store>
164
+ </back_to_shopping>
165
+ <allow_partial_cart>
166
+ <label>Allow Checkout with Inelligble Items?</label>
167
+ <tooltip>Allow customers to checkout when they have inelligible items in their cart. These items will be removed from the cart before the order is placed.</tooltip>
168
+ <frontend_type>select</frontend_type>
169
+ <source_model>adminhtml/system_config_source_yesno</source_model>
170
+ <sort_order>35</sort_order>
171
+ <show_in_default>1</show_in_default>
172
+ <show_in_website>1</show_in_website>
173
+ <show_in_store>1</show_in_store>
174
+ </allow_partial_cart>
175
  </fields>
176
  </ipcarthandoff>
177
  </groups>
js/iparcel/adminhtml/shipping-methods.js CHANGED
@@ -9,7 +9,7 @@ toggleCountryOfOrigin = function($altEnabled, $corObject) {
9
  } else {
10
  $corObject.disable();
11
  }
12
- }
13
 
14
  document.observe('dom:loaded', function(event) {
15
  $alternateEnabledObject = $$('#carriers_i-parcel_choose_domestic').first();
@@ -17,7 +17,7 @@ document.observe('dom:loaded', function(event) {
17
  if (typeof($alternateEnabledObject) === 'object') {
18
  toggleCountryOfOrigin($alternateEnabledObject, $countryOfOriginObject);
19
  $alternateEnabledObject.observe('change', function(event) {
20
- toggleCountryOfOrigin($(this), $countryOfOriginObject)
21
  });
22
  }
23
  });
9
  } else {
10
  $corObject.disable();
11
  }
12
+ };
13
 
14
  document.observe('dom:loaded', function(event) {
15
  $alternateEnabledObject = $$('#carriers_i-parcel_choose_domestic').first();
17
  if (typeof($alternateEnabledObject) === 'object') {
18
  toggleCountryOfOrigin($alternateEnabledObject, $countryOfOriginObject);
19
  $alternateEnabledObject.observe('change', function(event) {
20
+ toggleCountryOfOrigin($(this), $countryOfOriginObject);
21
  });
22
  }
23
  });
js/iparcel/lib.js CHANGED
@@ -1,46 +1,47 @@
1
  var iparcelMage = {
2
  displayEligibility: function() {
3
- try{
4
- $_ipar.fn.iparcel.ux.displayEligibility();
5
- } catch(exception) {
6
- }
7
  },
8
  ajax: {
9
- post: function(sku, super_attribute, url) {
10
- var $jip = jQuery.noConflict();
11
- var data = super_attribute+'sku='+sku;
12
  $jip('.' + iparcelPost.iparcelSkuClass).attr('finalsku', 'false');
13
- $jip.ajax({
14
- 'url': url,
15
- 'data': data,
16
- type: 'POST',
17
- async: true,
18
- success: function(data){
19
- if (data){
20
- $jip('.' + iparcelPost.iparcelSkuClass).text(data.sku);
21
  $jip('.' + iparcelPost.iparcelSkuClass).attr('finalsku', 'true');
22
-
23
- iparcelPost.setStock('true');
24
-
25
- var $options = $jip('.' + iparcelPost.iparcelOptionsClass);
26
- $options.empty();
27
- $jip.each(data.attributes, function(key, value){
28
- var $block = $jip('<div/>');
29
- $block.attr('id',key);
30
- $block.text(value);
31
- $options.append($block);
32
- });
33
-
34
- $jip('.iparcelstockquantity').text(data.stock);
35
- }
36
- iparcelMage.displayEligibility();
37
- }
38
- });
39
- }
40
  },
41
- parseHtmlEntities: function(str){
42
- var textArea = document.createElement('textarea');
43
- textArea.innerHTML = str;
44
- return textArea.value;
 
45
  }
46
- }
1
  var iparcelMage = {
2
  displayEligibility: function() {
3
+ try{
4
+ $_ipar.fn.iparcel.ux.displayEligibility();
5
+ } catch(exception) {
6
+ }
7
  },
8
  ajax: {
9
+ post: function(sku, super_attribute, url) {
10
+ var $jip = jQuery.noConflict();
11
+ var data = super_attribute+'sku='+sku;
12
  $jip('.' + iparcelPost.iparcelSkuClass).attr('finalsku', 'false');
13
+ $jip.ajax({
14
+ 'url': url,
15
+ 'data': data,
16
+ type: 'POST',
17
+ async: true,
18
+ success: function(data){
19
+ if (data){
20
+ $jip('.' + iparcelPost.iparcelSkuClass).text(data.sku);
21
  $jip('.' + iparcelPost.iparcelSkuClass).attr('finalsku', 'true');
22
+
23
+ iparcelPost.setStock('true');
24
+
25
+ var $options = $jip('.' + iparcelPost.iparcelOptionsClass);
26
+ $options.empty();
27
+ $jip.each(data.attributes, function(key, value){
28
+ var $block = $jip('<div/>');
29
+ $block.attr('id',key);
30
+ $block.text(value);
31
+ $options.append($block);
32
+ });
33
+
34
+ $jip('.iparcelstockquantity').text(data.stock);
35
+ }
36
+ iparcelMage.displayEligibility();
37
+ }
38
+ });
39
+ }
40
  },
41
+
42
+ parseHtmlEntities: function(str) {
43
+ var textArea = document.createElement('textarea');
44
+ textArea.innerHTML = str;
45
+ return textArea.value;
46
  }
47
+ };
package.xml CHANGED
@@ -1,7 +1,7 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>iparcel_carthandoff</name>
4
- <version>1.6.2</version>
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>2017-03-06</date>
20
- <time>21:20:55</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="dc682b48cd1d76cbe5431340ad15d10b"/></dir></dir></dir><file name="HandoffController.php" hash="4d0483ff46dde310aa6dcee37828cb58"/><file name="StatusController.php" hash="511f645fec406059f956aa915c9138b4"/></dir><dir name="etc"><file name="adminhtml.xml" hash="e4f3a503dfa55aa0540b87d644cf0631"/><file name="config.xml" hash="4cc022bcd3cae9911b5ea0bf04ea02bd"/><file name="system.xml" hash="411e0489405c16fe92b3ceb061842b4a"/></dir><dir name="Helper"><file name="Api.php" hash="b972a49b0f27102835501fe4d0eafe40"/><file name="Data.php" hash="784eea529c5eae7652cd2741cc5b9214"/></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="ad5160b1bef1af322486cc6512893265"/><file name="Txid.php" hash="98c6c52175fd28afbbf8811c277b2583"/><dir name="Checkout"><dir name="Type"><file name="Onepage.php" hash="53d1efca3648682d95070061cba7beef"/></dir></dir><dir name="Observer"><file name="Storecredit.php" hash="f147548263151fa76944c1aeba53723f"/></dir><dir name="Payment"><file name="Free.php" hash="810c0e8e3a208a88bfbcb447997674ee"/><file name="Ipcarthandoff.php" hash="60c52fc039b371c01815dfca6bec4172"/></dir><dir name="Resource"><dir name="Checkitems"><file name="Collection.php" hash="9a488c5a6c0b3d16f63817afd691ae80"/></dir><file name="Checkitems.php" hash="03ba687675e6eef24e6fed32c4767e55"/><file name="Txid.php" hash="77f367b2e253756301d57eae8c6dda18"/><dir name="Mysql4"><file name="Setup.php" hash="c7609fb203ba82fa7e1a39457f1edb3b"/></dir><dir name="Txid"><file name="Collection.php" hash="969af7f2a20be73238c71d4ba650c63d"/></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"/><file name="mysql4-upgrade-1.6.1-1.6.2.php" hash="53e1ba58f5c4ca7a805a7337159b5daa"/></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"/><file name="Sync.php" hash="ce239afe604653d4b15c739df965fa06"/><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="8a7f2440ee161682eba59aeb7706f19a"/></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="3fc0f987d470f83ccb10bd04de9d6abb"/><file name="system.xml" hash="823d3690c187d8c3db42912d83a6303b"/></dir><dir name="Helper"><file name="Api.php" hash="bae9a8435e047e229725e9b94b4b339d"/><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="12d9447bf8b1f3ac6e9bd7f7b26fbfcd"/></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="262c99bceac487a5849058d6ed88011e"/></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"/><file name="mysql4-upgrade-1.2.1-1.3.0.php" hash="f7a5567470b6a3c98530600b48993889"/></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="0c1e5006d796fd7e39f08d836c1cb2ae"/><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="f23a0739ab95168725913180ef44fff9"/></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="b95262967f28618b50f01962047816f2"/></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="ea2e78b3fa40dd2be5e1f8559742ee86"/><file name="post.js" hash="55a14e510b988d893e95860e83e3f16b"/><file name="jQuery.js" hash="8ec1680e4d815ff93f661214efa06276"/><file name="lib.js" hash="ea2e78b3fa40dd2be5e1f8559742ee86"/><file name="post.js" hash="55a14e510b988d893e95860e83e3f16b"/><file name="jQuery.js" hash="8ec1680e4d815ff93f661214efa06276"/><file name="lib.js" hash="ea2e78b3fa40dd2be5e1f8559742ee86"/><file name="post.js" hash="55a14e510b988d893e95860e83e3f16b"/><dir name="adminhtml"><file name="shipping-methods.js" hash="eca91e8a5cf152fce7af0eb5bf2991bb"/><file name="sync.js" hash="ec17cf8528736f8aab3dd0ac76e3e7d9"/><file name="shipping-methods.js" hash="eca91e8a5cf152fce7af0eb5bf2991bb"/><file name="sync.js" hash="ec17cf8528736f8aab3dd0ac76e3e7d9"/><file name="shipping-methods.js" hash="eca91e8a5cf152fce7af0eb5bf2991bb"/><file name="sync.js" hash="ec17cf8528736f8aab3dd0ac76e3e7d9"/><file name="shipping-methods.js" hash="eca91e8a5cf152fce7af0eb5bf2991bb"/><file name="sync.js" hash="ec17cf8528736f8aab3dd0ac76e3e7d9"/><file name="shipping-methods.js" hash="eca91e8a5cf152fce7af0eb5bf2991bb"/><file name="sync.js" hash="ec17cf8528736f8aab3dd0ac76e3e7d9"/></dir></dir></dir><dir name="skin"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="iparcel"><file name="ajaxSync.css" hash="8e9222a567c960ec381f43307fd8d882"/></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.6.4</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>2017-03-29</date>
20
+ <time>18:18:11</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="dc682b48cd1d76cbe5431340ad15d10b"/></dir></dir></dir><file name="HandoffController.php" hash="e7982c812bc26bfe17cc3be1bd44a945"/><file name="StatusController.php" hash="511f645fec406059f956aa915c9138b4"/></dir><dir name="etc"><file name="adminhtml.xml" hash="e4f3a503dfa55aa0540b87d644cf0631"/><file name="config.xml" hash="1c4fa57b56ac98be122ced1abe687418"/><file name="system.xml" hash="bcf3ca9ab4d548559ecd7fb2d0d7becc"/></dir><dir name="Helper"><file name="Api.php" hash="df34122866d20bf22acc473b8617ed7a"/><file name="Data.php" hash="784eea529c5eae7652cd2741cc5b9214"/></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="ad5160b1bef1af322486cc6512893265"/><file name="Txid.php" hash="98c6c52175fd28afbbf8811c277b2583"/><dir name="Checkout"><dir name="Type"><file name="Onepage.php" hash="53d1efca3648682d95070061cba7beef"/></dir></dir><dir name="Observer"><file name="Storecredit.php" hash="f147548263151fa76944c1aeba53723f"/></dir><dir name="Payment"><file name="Free.php" hash="810c0e8e3a208a88bfbcb447997674ee"/><file name="Ipcarthandoff.php" hash="60c52fc039b371c01815dfca6bec4172"/></dir><dir name="Resource"><dir name="Checkitems"><file name="Collection.php" hash="9a488c5a6c0b3d16f63817afd691ae80"/></dir><file name="Checkitems.php" hash="03ba687675e6eef24e6fed32c4767e55"/><file name="Txid.php" hash="77f367b2e253756301d57eae8c6dda18"/><dir name="Mysql4"><file name="Setup.php" hash="c7609fb203ba82fa7e1a39457f1edb3b"/></dir><dir name="Txid"><file name="Collection.php" hash="969af7f2a20be73238c71d4ba650c63d"/></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"/><file name="mysql4-upgrade-1.6.1-1.6.2.php" hash="53e1ba58f5c4ca7a805a7337159b5daa"/></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"/><file name="Sync.php" hash="ce239afe604653d4b15c739df965fa06"/><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="8a7f2440ee161682eba59aeb7706f19a"/></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="3fc0f987d470f83ccb10bd04de9d6abb"/><file name="system.xml" hash="cfec42b57a6c87e81a77d194499a4d3c"/></dir><dir name="Helper"><file name="Api.php" hash="93767717a0277eda6b2c15bea8f7d6a3"/><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="81fcf55784a5b2da78519e32f7f5cb92"/></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="262c99bceac487a5849058d6ed88011e"/></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"/><file name="mysql4-upgrade-1.2.1-1.3.0.php" hash="f7a5567470b6a3c98530600b48993889"/></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="0c1e5006d796fd7e39f08d836c1cb2ae"/><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="f23a0739ab95168725913180ef44fff9"/></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="b95262967f28618b50f01962047816f2"/></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="385c25c7fe89c44c8fff49daaa9c6299"/><file name="post.js" hash="55a14e510b988d893e95860e83e3f16b"/><file name="jQuery.js" hash="8ec1680e4d815ff93f661214efa06276"/><file name="lib.js" hash="385c25c7fe89c44c8fff49daaa9c6299"/><file name="post.js" hash="55a14e510b988d893e95860e83e3f16b"/><file name="jQuery.js" hash="8ec1680e4d815ff93f661214efa06276"/><file name="lib.js" hash="385c25c7fe89c44c8fff49daaa9c6299"/><file name="post.js" hash="55a14e510b988d893e95860e83e3f16b"/><dir name="adminhtml"><file name="shipping-methods.js" hash="ad8056546367ec415350abd04b95afab"/><file name="sync.js" hash="ec17cf8528736f8aab3dd0ac76e3e7d9"/><file name="shipping-methods.js" hash="ad8056546367ec415350abd04b95afab"/><file name="sync.js" hash="ec17cf8528736f8aab3dd0ac76e3e7d9"/><file name="shipping-methods.js" hash="ad8056546367ec415350abd04b95afab"/><file name="sync.js" hash="ec17cf8528736f8aab3dd0ac76e3e7d9"/><file name="shipping-methods.js" hash="ad8056546367ec415350abd04b95afab"/><file name="sync.js" hash="ec17cf8528736f8aab3dd0ac76e3e7d9"/><file name="shipping-methods.js" hash="ad8056546367ec415350abd04b95afab"/><file name="sync.js" hash="ec17cf8528736f8aab3dd0ac76e3e7d9"/></dir></dir></dir><dir name="skin"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="iparcel"><file name="ajaxSync.css" hash="8e9222a567c960ec381f43307fd8d882"/></dir></dir></dir></dir></dir></target></contents>
22
  <compatible/>
23
  <dependencies>
24
  <required>