Version Notes
The ChannelUnity connector kit for Magento.
Allows products with custom options to be uploaded to ChannelUnity. Prevents order import validation errors.
Download this release
Release Info
| Developer | Magento Core Team |
| Extension | Camiloo_Channelunity |
| Version | 1.0.0.8 |
| Comparing to | |
| See all releases | |
Code changes from version 1.0.0.7 to 1.0.0.8
- app/code/community/Camiloo/Channelunity/Model/Abstract.php +41 -50
- app/code/community/Camiloo/Channelunity/Model/Collection.php +2 -1
- app/code/community/Camiloo/Channelunity/Model/Customrate.php +29 -16
- app/code/community/Camiloo/Channelunity/Model/Observer.php +34 -3
- app/code/community/Camiloo/Channelunity/Model/Ordercreatebackport.php +1 -1
- app/code/community/Camiloo/Channelunity/Model/Orders.php +124 -36
- app/code/community/Camiloo/Channelunity/Model/Products.php +166 -12
- app/code/community/Camiloo/Channelunity/controllers/ApiController.php +4 -4
- app/code/community/Camiloo/Channelunity/etc/config.xml +12 -1
- app/design/adminhtml/default/default/template/channelunity/configheader.phtml +1 -1
- package.xml +7 -7
app/code/community/Camiloo/Channelunity/Model/Abstract.php
CHANGED
|
@@ -10,53 +10,6 @@
|
|
| 10 |
class Camiloo_Channelunity_Model_Abstract
|
| 11 |
{
|
| 12 |
|
| 13 |
-
/* From-To range examples.
|
| 14 |
-
dataRange [xml element array]
|
| 15 |
-
<request>
|
| 16 |
-
<requestbody>
|
| 17 |
-
<range>
|
| 18 |
-
<filter on="date">
|
| 19 |
-
<operator type="from">
|
| 20 |
-
<value>2001-10-20</value>
|
| 21 |
-
</operator>
|
| 22 |
-
<operator type="to">
|
| 23 |
-
<value>2001-10-22</value>
|
| 24 |
-
</operator>
|
| 25 |
-
</filter>
|
| 26 |
-
<filter on="date">
|
| 27 |
-
<operator type="from">
|
| 28 |
-
<value>2001-10-20</value>
|
| 29 |
-
</operator>
|
| 30 |
-
<operator type="to">
|
| 31 |
-
<value>2001-10-22</value>
|
| 32 |
-
</operator>
|
| 33 |
-
</filter>
|
| 34 |
-
</range>
|
| 35 |
-
</request>
|
| 36 |
-
*/
|
| 37 |
-
/* Simple operator filter example
|
| 38 |
-
dataRange [xml element array]
|
| 39 |
-
<filter on="product_id">
|
| 40 |
-
<operator type="gte">27</operator>
|
| 41 |
-
</filter>
|
| 42 |
-
*/
|
| 43 |
-
/* Range filter example
|
| 44 |
-
|
| 45 |
-
dataRange [xml element array]
|
| 46 |
-
<filter on="product_id">
|
| 47 |
-
<operator type="in">
|
| 48 |
-
<value>22</value>
|
| 49 |
-
<value>23</value>
|
| 50 |
-
<value>24</value>
|
| 51 |
-
<value>25</value>
|
| 52 |
-
<value>26</value>
|
| 53 |
-
<value>27</value>
|
| 54 |
-
<value>28</value>
|
| 55 |
-
<value>29</value>
|
| 56 |
-
<value>30</value>
|
| 57 |
-
</operator>
|
| 58 |
-
</filter>
|
| 59 |
-
*/
|
| 60 |
public function filterCollection($collection, $dataRange){
|
| 61 |
|
| 62 |
foreach($dataRange as $filter){
|
|
@@ -146,6 +99,18 @@ class Camiloo_Channelunity_Model_Abstract
|
|
| 146 |
die;
|
| 147 |
}
|
| 148 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 149 |
/**
|
| 150 |
* Calls the VerifyNotification API.
|
| 151 |
*/
|
|
@@ -162,7 +127,7 @@ class Camiloo_Channelunity_Model_Abstract
|
|
| 162 |
<Payload>$messageverify</Payload>
|
| 163 |
</ChannelUnity>");
|
| 164 |
|
| 165 |
-
curl_setopt($session, CURLOPT_URL,
|
| 166 |
curl_setopt($session, CURLOPT_POST, TRUE);
|
| 167 |
curl_setopt($session, CURLOPT_RETURNTRANSFER, TRUE);
|
| 168 |
curl_setopt($session, CURLOPT_POSTFIELDS, array('message' => $xml));
|
|
@@ -246,7 +211,7 @@ class Camiloo_Channelunity_Model_Abstract
|
|
| 246 |
|
| 247 |
$xml = urlencode($xml);
|
| 248 |
|
| 249 |
-
curl_setopt($session, CURLOPT_URL,
|
| 250 |
curl_setopt($session, CURLOPT_POST, TRUE);
|
| 251 |
curl_setopt($session, CURLOPT_RETURNTRANSFER, TRUE);
|
| 252 |
curl_setopt($session, CURLOPT_POSTFIELDS, array('message' => $xml));
|
|
@@ -284,7 +249,7 @@ class Camiloo_Channelunity_Model_Abstract
|
|
| 284 |
|
| 285 |
$xml = urlencode($xml);
|
| 286 |
|
| 287 |
-
curl_setopt($session, CURLOPT_URL,
|
| 288 |
curl_setopt($session, CURLOPT_POST, TRUE);
|
| 289 |
curl_setopt($session, CURLOPT_RETURNTRANSFER, TRUE);
|
| 290 |
curl_setopt($session, CURLOPT_POSTFIELDS, array('message' => $xml));
|
|
@@ -296,6 +261,32 @@ class Camiloo_Channelunity_Model_Abstract
|
|
| 296 |
return $result;
|
| 297 |
}
|
| 298 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 299 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 300 |
}
|
| 301 |
?>
|
| 10 |
class Camiloo_Channelunity_Model_Abstract
|
| 11 |
{
|
| 12 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 13 |
public function filterCollection($collection, $dataRange){
|
| 14 |
|
| 15 |
foreach($dataRange as $filter){
|
| 99 |
die;
|
| 100 |
}
|
| 101 |
|
| 102 |
+
public function getEndpoint() {
|
| 103 |
+
if (strpos($_SERVER['SERVER_NAME'], "camiloo.co.uk") !== false) {
|
| 104 |
+
|
| 105 |
+
return "http://staging.channelunity.com/event.php";
|
| 106 |
+
}
|
| 107 |
+
else {
|
| 108 |
+
|
| 109 |
+
return "http://my.channelunity.com/event.php";
|
| 110 |
+
}
|
| 111 |
+
}
|
| 112 |
+
|
| 113 |
+
|
| 114 |
/**
|
| 115 |
* Calls the VerifyNotification API.
|
| 116 |
*/
|
| 127 |
<Payload>$messageverify</Payload>
|
| 128 |
</ChannelUnity>");
|
| 129 |
|
| 130 |
+
curl_setopt($session, CURLOPT_URL, $this->getEndpoint());
|
| 131 |
curl_setopt($session, CURLOPT_POST, TRUE);
|
| 132 |
curl_setopt($session, CURLOPT_RETURNTRANSFER, TRUE);
|
| 133 |
curl_setopt($session, CURLOPT_POSTFIELDS, array('message' => $xml));
|
| 211 |
|
| 212 |
$xml = urlencode($xml);
|
| 213 |
|
| 214 |
+
curl_setopt($session, CURLOPT_URL, $this->getEndpoint());
|
| 215 |
curl_setopt($session, CURLOPT_POST, TRUE);
|
| 216 |
curl_setopt($session, CURLOPT_RETURNTRANSFER, TRUE);
|
| 217 |
curl_setopt($session, CURLOPT_POSTFIELDS, array('message' => $xml));
|
| 249 |
|
| 250 |
$xml = urlencode($xml);
|
| 251 |
|
| 252 |
+
curl_setopt($session, CURLOPT_URL, $this->getEndpoint());
|
| 253 |
curl_setopt($session, CURLOPT_POST, TRUE);
|
| 254 |
curl_setopt($session, CURLOPT_RETURNTRANSFER, TRUE);
|
| 255 |
curl_setopt($session, CURLOPT_POSTFIELDS, array('message' => $xml));
|
| 261 |
return $result;
|
| 262 |
}
|
| 263 |
|
| 264 |
+
public function postMyURLToChannelUnity($merchantName) {
|
| 265 |
+
|
| 266 |
+
$session = curl_init();
|
| 267 |
+
|
| 268 |
+
$baseurl = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB);
|
| 269 |
|
| 270 |
+
$xml = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>
|
| 271 |
+
<ChannelUnity>
|
| 272 |
+
<MerchantName>$merchantName</MerchantName>
|
| 273 |
+
<Authorization>" . $this->getValidUserAuth() . "</Authorization>
|
| 274 |
+
<RequestType>SuggestEndpointURL</RequestType>
|
| 275 |
+
<Payload><URL>$baseurl</URL></Payload>
|
| 276 |
+
</ChannelUnity>";
|
| 277 |
+
|
| 278 |
+
$xml = urlencode($xml);
|
| 279 |
+
|
| 280 |
+
curl_setopt($session, CURLOPT_URL, $this->getEndpoint());
|
| 281 |
+
curl_setopt($session, CURLOPT_POST, TRUE);
|
| 282 |
+
curl_setopt($session, CURLOPT_RETURNTRANSFER, TRUE);
|
| 283 |
+
curl_setopt($session, CURLOPT_POSTFIELDS, array('message' => $xml));
|
| 284 |
+
|
| 285 |
+
$result = curl_exec($session);
|
| 286 |
+
|
| 287 |
+
curl_close($session);
|
| 288 |
+
|
| 289 |
+
return $result;
|
| 290 |
+
}
|
| 291 |
}
|
| 292 |
?>
|
app/code/community/Camiloo/Channelunity/Model/Collection.php
CHANGED
|
@@ -1,5 +1,6 @@
|
|
| 1 |
<?php
|
| 2 |
-
if (version_compare(Mage::getVersion(), "1.6.0.0", ">=")
|
|
|
|
| 3 |
|
| 4 |
class Camiloo_Channelunity_Model_Collection extends Mage_Catalog_Model_Resource_Product_Collection {
|
| 5 |
public function isEnabledFlat()
|
| 1 |
<?php
|
| 2 |
+
if (version_compare(Mage::getVersion(), "1.6.0.0", ">=")
|
| 3 |
+
&& class_exists("Mage_Catalog_Model_Resource_Product_Collection")) {
|
| 4 |
|
| 5 |
class Camiloo_Channelunity_Model_Collection extends Mage_Catalog_Model_Resource_Product_Collection {
|
| 6 |
public function isEnabledFlat()
|
app/code/community/Camiloo/Channelunity/Model/Customrate.php
CHANGED
|
@@ -14,6 +14,11 @@ class Camiloo_Channelunity_Model_Customrate
|
|
| 14 |
|
| 15 |
protected $_code = 'channelunitycustomrate';
|
| 16 |
protected $_isFixed = true;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 17 |
|
| 18 |
public function collectRates(Mage_Shipping_Model_Rate_Request $request)
|
| 19 |
{
|
|
@@ -21,22 +26,30 @@ class Camiloo_Channelunity_Model_Customrate
|
|
| 21 |
return false;
|
| 22 |
}
|
| 23 |
|
| 24 |
-
|
| 25 |
-
|
| 26 |
-
|
| 27 |
-
|
| 28 |
-
|
| 29 |
-
|
| 30 |
-
|
| 31 |
-
|
| 32 |
-
|
| 33 |
-
|
| 34 |
-
|
| 35 |
-
|
| 36 |
-
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 40 |
}
|
| 41 |
|
| 42 |
public function getAllowedMethods()
|
| 14 |
|
| 15 |
protected $_code = 'channelunitycustomrate';
|
| 16 |
protected $_isFixed = true;
|
| 17 |
+
|
| 18 |
+
|
| 19 |
+
public function isActive() {
|
| 20 |
+
return false;
|
| 21 |
+
}
|
| 22 |
|
| 23 |
public function collectRates(Mage_Shipping_Model_Rate_Request $request)
|
| 24 |
{
|
| 26 |
return false;
|
| 27 |
}
|
| 28 |
|
| 29 |
+
// check if we are getting the rate for a CU request.
|
| 30 |
+
// to do this, the easiest way is to check for some form
|
| 31 |
+
// of CU data incoming.
|
| 32 |
+
$cuOrderCheck = Mage::registry('cu_order_in_progress');
|
| 33 |
+
if($cuOrderCheck == 1){
|
| 34 |
+
$result = Mage::getModel('shipping/rate_result');
|
| 35 |
+
|
| 36 |
+
$method = Mage::getModel('shipping/rate_result_method');
|
| 37 |
+
$method->setCarrier('channelunitycustomrate');
|
| 38 |
+
$method->setCarrierTitle($this->getConfigData('title'));
|
| 39 |
+
$method->setMethod('channelunitycustomrate');
|
| 40 |
+
// $method->setMethodTitle(Mage::getSingleton('core/session')->getShippingMethod());
|
| 41 |
+
|
| 42 |
+
$shipPrice = Mage::getSingleton('core/session')->getShippingPrice();
|
| 43 |
+
|
| 44 |
+
$method->setPrice($shipPrice);
|
| 45 |
+
$method->setCost($shipPrice);
|
| 46 |
+
|
| 47 |
+
$result->append($method);
|
| 48 |
+
|
| 49 |
+
return $result;
|
| 50 |
+
}else{
|
| 51 |
+
return false;
|
| 52 |
+
}
|
| 53 |
}
|
| 54 |
|
| 55 |
public function getAllowedMethods()
|
app/code/community/Camiloo/Channelunity/Model/Observer.php
CHANGED
|
@@ -162,7 +162,7 @@ class Camiloo_Channelunity_Model_Observer extends Camiloo_Channelunity_Model_Abs
|
|
| 162 |
|
| 163 |
// Item was ordered on website, stock will have reduced, update to CU
|
| 164 |
$xml = Mage::getModel('channelunity/products')->generateCuXmlForSingleProduct(
|
| 165 |
-
|
| 166 |
|
| 167 |
$this->postToChannelUnity($xml, "ProductData");
|
| 168 |
}
|
|
@@ -257,8 +257,39 @@ class Camiloo_Channelunity_Model_Observer extends Camiloo_Channelunity_Model_Abs
|
|
| 257 |
}
|
| 258 |
}
|
| 259 |
|
| 260 |
-
public function
|
| 261 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 262 |
}
|
| 263 |
}
|
| 264 |
?>
|
| 162 |
|
| 163 |
// Item was ordered on website, stock will have reduced, update to CU
|
| 164 |
$xml = Mage::getModel('channelunity/products')->generateCuXmlForSingleProduct(
|
| 165 |
+
$prodTemp->getId(), $storeId, $item->getQtyOrdered());
|
| 166 |
|
| 167 |
$this->postToChannelUnity($xml, "ProductData");
|
| 168 |
}
|
| 257 |
}
|
| 258 |
}
|
| 259 |
|
| 260 |
+
public function configSaveAfter(Varien_Event_Observer $observer) {
|
| 261 |
+
try {
|
| 262 |
+
if (is_object($observer)) {
|
| 263 |
+
$event = $observer->getEvent();
|
| 264 |
+
|
| 265 |
+
if (is_object($event)) {
|
| 266 |
+
|
| 267 |
+
$configData = $event->getData('config_data');
|
| 268 |
+
|
| 269 |
+
if (is_object($configData)) {
|
| 270 |
+
|
| 271 |
+
$configData = $configData->getData();
|
| 272 |
+
|
| 273 |
+
if (isset($configData['fieldset_data'])) {
|
| 274 |
+
|
| 275 |
+
$fieldset_data = $configData['fieldset_data'];
|
| 276 |
+
|
| 277 |
+
|
| 278 |
+
if (isset($fieldset_data['merchantname'])) {
|
| 279 |
+
|
| 280 |
+
$merchantName = $fieldset_data['merchantname'];
|
| 281 |
+
|
| 282 |
+
Mage::getModel('channelunity/products')->postMyURLToChannelUnity($merchantName);
|
| 283 |
+
|
| 284 |
+
}
|
| 285 |
+
|
| 286 |
+
}
|
| 287 |
+
}
|
| 288 |
+
}
|
| 289 |
+
}
|
| 290 |
+
}
|
| 291 |
+
catch (Exception $x) {
|
| 292 |
+
}
|
| 293 |
}
|
| 294 |
}
|
| 295 |
?>
|
app/code/community/Camiloo/Channelunity/Model/Ordercreatebackport.php
CHANGED
|
@@ -1,7 +1,7 @@
|
|
| 1 |
<?php
|
| 2 |
/**
|
| 3 |
* This code is backported from the Magento codebase at v1.4.0.0 to ensure
|
| 4 |
-
*
|
| 5 |
* Mage_Sales_Model_Service_Quote. No modifications have been made.
|
| 6 |
*
|
| 7 |
* @category Mage
|
| 1 |
<?php
|
| 2 |
/**
|
| 3 |
* This code is backported from the Magento codebase at v1.4.0.0 to ensure
|
| 4 |
+
* compatibility across Magento versions older than v1.4. Its v1.4 classname is
|
| 5 |
* Mage_Sales_Model_Service_Quote. No modifications have been made.
|
| 6 |
*
|
| 7 |
* @category Mage
|
app/code/community/Camiloo/Channelunity/Model/Orders.php
CHANGED
|
@@ -8,12 +8,9 @@
|
|
| 8 |
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
| 9 |
*/
|
| 10 |
class Camiloo_Channelunity_Model_Orders extends Camiloo_Channelunity_Model_Abstract
|
| 11 |
-
{
|
| 12 |
-
|
| 13 |
protected $_collection = 'sales/order';
|
| 14 |
|
| 15 |
-
|
| 16 |
-
|
| 17 |
/*
|
| 18 |
|
| 19 |
RequestType OrderStatusUpdate
|
|
@@ -114,13 +111,11 @@ class Camiloo_Channelunity_Model_Orders extends Camiloo_Channelunity_Model_Abstr
|
|
| 114 |
}
|
| 115 |
|
| 116 |
public function doCreate($dataArray, $order) {
|
| 117 |
-
// this method takes an array of
|
| 118 |
-
// request within Magento.
|
| 119 |
-
|
| 120 |
-
|
| 121 |
|
| 122 |
echo "<Info>Next order: {$order->OrderId} Create Quote</Info>";
|
| 123 |
-
|
| 124 |
try {
|
| 125 |
|
| 126 |
$quote = Mage::getModel('sales/quote')->setStoreId((string) $dataArray->StoreviewId);
|
|
@@ -194,15 +189,36 @@ class Camiloo_Channelunity_Model_Orders extends Camiloo_Channelunity_Model_Abstr
|
|
| 194 |
$currencyObject = Mage::getModel('directory/currency');
|
| 195 |
$reverseRate = $currencyObject->getResource()->getRate($storeCurrency, (string) $order->Currency);
|
| 196 |
|
| 197 |
-
|
| 198 |
-
|
| 199 |
-
|
| 200 |
-
|
| 201 |
echo "<ConversionRate>$reverseRate</ConversionRate>";
|
|
|
|
| 202 |
|
| 203 |
// add product(s)
|
| 204 |
foreach ($order->OrderItems->Item as $orderitem) {
|
| 205 |
-
$product = Mage::getModel('catalog/product')->loadByAttribute(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 206 |
|
| 207 |
if (is_object($product)) {
|
| 208 |
|
|
@@ -211,10 +227,14 @@ class Camiloo_Channelunity_Model_Orders extends Camiloo_Channelunity_Model_Abstr
|
|
| 211 |
$item = Mage::getModel('sales/quote_item');
|
| 212 |
$item->setQuote($quote)->setProduct($product);
|
| 213 |
$item->setData('qty', (string) $orderitem->Quantity);
|
|
|
|
|
|
|
|
|
|
| 214 |
$quote->addItem($item);
|
| 215 |
}
|
| 216 |
else {
|
| 217 |
-
echo "<Info>Can't find SKU to add to quote ".((string) $orderitem->SKU)
|
|
|
|
| 218 |
|
| 219 |
$prodIdToLoad = 0;
|
| 220 |
|
|
@@ -262,6 +282,8 @@ class Camiloo_Channelunity_Model_Orders extends Camiloo_Channelunity_Model_Abstr
|
|
| 262 |
$item = Mage::getModel('sales/quote_item');
|
| 263 |
$item->setQuote($quote)->setProduct($product);
|
| 264 |
$item->setData('qty', (string) $orderitem->Quantity);
|
|
|
|
|
|
|
| 265 |
$quote->addItem($item);
|
| 266 |
}
|
| 267 |
else {
|
|
@@ -294,14 +316,14 @@ class Camiloo_Channelunity_Model_Orders extends Camiloo_Channelunity_Model_Abstr
|
|
| 294 |
'postcode' => $postcode,
|
| 295 |
'region' => (string) $order->ShippingInfo->State,
|
| 296 |
'region_id' => $regionId,
|
| 297 |
-
'country_id' => (string) $order->ShippingInfo->Country
|
|
|
|
| 298 |
);
|
| 299 |
|
| 300 |
// add the billing address to the quote.
|
| 301 |
$billingAddress = $quote->getBillingAddress()->addData($billingAddressData);
|
| 302 |
-
|
| 303 |
-
|
| 304 |
-
echo "<Info>Set Shipping Address</Info>";
|
| 305 |
|
| 306 |
// set the shipping address
|
| 307 |
$shippingAddressData = array(
|
|
@@ -315,7 +337,8 @@ class Camiloo_Channelunity_Model_Orders extends Camiloo_Channelunity_Model_Abstr
|
|
| 315 |
'region' => (string) $order->ShippingInfo->State,
|
| 316 |
'region_id' => $regionId,
|
| 317 |
'country_id' => (string) $order->ShippingInfo->Country,
|
| 318 |
-
'telephone' => (string) $order->ShippingInfo->PhoneNumber
|
|
|
|
| 319 |
);
|
| 320 |
|
| 321 |
Mage::getSingleton('core/session')->setShippingPrice(((string) $order->ShippingInfo->ShippingPrice) / $reverseRate);
|
|
@@ -355,9 +378,13 @@ class Camiloo_Channelunity_Model_Orders extends Camiloo_Channelunity_Model_Abstr
|
|
| 355 |
$service = Mage::getModel('channelunity/ordercreatebackport', $quote);
|
| 356 |
}
|
| 357 |
|
|
|
|
|
|
|
|
|
|
| 358 |
$service->submitAll();
|
| 359 |
$newOrder = $service->getOrder(); // returns full order object.
|
| 360 |
-
|
|
|
|
| 361 |
|
| 362 |
if (!is_object($newOrder)) {
|
| 363 |
echo "<NotImported>".((string) $order->OrderId)."</NotImported>";
|
|
@@ -370,26 +397,32 @@ class Camiloo_Channelunity_Model_Orders extends Camiloo_Channelunity_Model_Abstr
|
|
| 370 |
} catch (Exception $x) {
|
| 371 |
echo "<Exception><![CDATA[".$x->getMessage()." ".$x->getTraceAsString()."]]></Exception>";
|
| 372 |
echo "<NotImported>".((string) $order->OrderId)."</NotImported>";
|
|
|
|
| 373 |
return;
|
| 374 |
}
|
| 375 |
|
| 376 |
$ordStatus = $this->CUOrderStatusToMagentoStatus((string) $order->OrderStatus);
|
| 377 |
|
| 378 |
try {
|
| 379 |
-
$newOrder->
|
| 380 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 381 |
}
|
| 382 |
catch (Exception $x1) {
|
| 383 |
|
| 384 |
try {
|
| 385 |
-
$newOrder->setState('closed', 'closed',
|
| 386 |
-
|
| 387 |
}
|
| 388 |
catch (Exception $x2) {
|
| 389 |
}
|
| 390 |
}
|
| 391 |
|
| 392 |
-
// This order will have been paid for, otherwise it won't
|
|
|
|
| 393 |
|
| 394 |
$invoiceId = Mage::getModel('sales/order_invoice_api')
|
| 395 |
->create($newOrder->getIncrementId(), array());
|
|
@@ -412,9 +445,12 @@ class Camiloo_Channelunity_Model_Orders extends Camiloo_Channelunity_Model_Abstr
|
|
| 412 |
$transaction->setOrder($newOrder);
|
| 413 |
$transaction->setTxnType('capture');
|
| 414 |
$transaction->setTxnId((string) $order->OrderId);
|
| 415 |
-
$transaction->setAdditionalInformation('SubscriptionId',
|
| 416 |
-
|
| 417 |
-
$transaction->setAdditionalInformation('
|
|
|
|
|
|
|
|
|
|
| 418 |
|
| 419 |
$serviceType = (string) $order->ServiceSku;
|
| 420 |
switch ($serviceType) {
|
|
@@ -451,7 +487,13 @@ class Camiloo_Channelunity_Model_Orders extends Camiloo_Channelunity_Model_Abstr
|
|
| 451 |
|
| 452 |
$transaction->setAdditionalInformation('AmazonFBA', 'Yes');
|
| 453 |
// Can't set 'complete' state manually - ideally import tracking info and create shipment in Mage
|
| 454 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 455 |
}
|
| 456 |
$transaction->save();
|
| 457 |
|
|
@@ -460,9 +502,6 @@ class Camiloo_Channelunity_Model_Orders extends Camiloo_Channelunity_Model_Abstr
|
|
| 460 |
|
| 461 |
$message = Mage::getModel('giftmessage/message');
|
| 462 |
|
| 463 |
-
// $gift_sender = $message->getData('sender');
|
| 464 |
-
// $gift_recipient = $message->getData('recipient');
|
| 465 |
-
|
| 466 |
$message->setMessage($order->ShippingInfo->GiftMessage);
|
| 467 |
$message->save();
|
| 468 |
|
|
@@ -472,9 +511,58 @@ class Camiloo_Channelunity_Model_Orders extends Camiloo_Channelunity_Model_Abstr
|
|
| 472 |
}
|
| 473 |
|
| 474 |
$newOrder->setCreatedAt((string) $order->PurchaseDate);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 475 |
$newOrder->save();
|
| 476 |
|
| 477 |
-
|
| 478 |
}
|
| 479 |
|
| 480 |
private function createStubProduct($missingSku, $productTitle, $websiteID, $keyorder, $price, $qty, $skuAttribute) {
|
|
@@ -506,7 +594,7 @@ class Camiloo_Channelunity_Model_Orders extends Camiloo_Channelunity_Model_Abstr
|
|
| 506 |
// Default Magento attribute
|
| 507 |
$product->setWeight('0.01');
|
| 508 |
$product->setVisibility(1); // not visible
|
| 509 |
-
$product->setStatus(1); // status = enabled,
|
| 510 |
$product->setTaxClassId(0); # My default tax class
|
| 511 |
$product->setStockData(array(
|
| 512 |
'is_in_stock' => 1,
|
|
@@ -588,7 +676,7 @@ class Camiloo_Channelunity_Model_Orders extends Camiloo_Channelunity_Model_Abstr
|
|
| 588 |
$ordStatus = $this->CUOrderStatusToMagentoStatus((string) $singleOrder->OrderStatus);
|
| 589 |
|
| 590 |
try {
|
| 591 |
-
$newOrder->
|
| 592 |
|
| 593 |
}
|
| 594 |
catch (Exception $x1) {
|
| 8 |
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
| 9 |
*/
|
| 10 |
class Camiloo_Channelunity_Model_Orders extends Camiloo_Channelunity_Model_Abstract
|
| 11 |
+
{
|
|
|
|
| 12 |
protected $_collection = 'sales/order';
|
| 13 |
|
|
|
|
|
|
|
| 14 |
/*
|
| 15 |
|
| 16 |
RequestType OrderStatusUpdate
|
| 111 |
}
|
| 112 |
|
| 113 |
public function doCreate($dataArray, $order) {
|
| 114 |
+
// this method takes an array of the normal structure and creates an
|
| 115 |
+
// order creation request within Magento.
|
|
|
|
|
|
|
| 116 |
|
| 117 |
echo "<Info>Next order: {$order->OrderId} Create Quote</Info>";
|
| 118 |
+
Mage::register('cu_order_in_progress',1);
|
| 119 |
try {
|
| 120 |
|
| 121 |
$quote = Mage::getModel('sales/quote')->setStoreId((string) $dataArray->StoreviewId);
|
| 189 |
$currencyObject = Mage::getModel('directory/currency');
|
| 190 |
$reverseRate = $currencyObject->getResource()->getRate($storeCurrency, (string) $order->Currency);
|
| 191 |
|
| 192 |
+
if ($reverseRate == "") {
|
| 193 |
+
$reverseRate = 1.0;
|
| 194 |
+
}
|
| 195 |
+
|
| 196 |
echo "<ConversionRate>$reverseRate</ConversionRate>";
|
| 197 |
+
$itemOptions = array();
|
| 198 |
|
| 199 |
// add product(s)
|
| 200 |
foreach ($order->OrderItems->Item as $orderitem) {
|
| 201 |
+
$product = Mage::getModel('catalog/product')->loadByAttribute(
|
| 202 |
+
(string) $dataArray->SkuAttribute,
|
| 203 |
+
(string) $orderitem->SKU);
|
| 204 |
+
|
| 205 |
+
// First check if this is a custom option
|
| 206 |
+
if (!is_object($product)) {
|
| 207 |
+
$skuparts = explode("-", (string) $orderitem->SKU);
|
| 208 |
+
|
| 209 |
+
if (count($skuparts) > 1) {
|
| 210 |
+
$parentsku = $skuparts[0];
|
| 211 |
+
|
| 212 |
+
$product = Mage::getModel('catalog/product')->loadByAttribute(
|
| 213 |
+
(string) $dataArray->SkuAttribute,
|
| 214 |
+
$parentsku);
|
| 215 |
+
|
| 216 |
+
for ($i = 1; $i < count($skuparts); $i++) {
|
| 217 |
+
$itemOptions[$parentsku][] = $skuparts[$i];
|
| 218 |
+
}
|
| 219 |
+
}
|
| 220 |
+
}
|
| 221 |
+
// ------------------------------------------------------
|
| 222 |
|
| 223 |
if (is_object($product)) {
|
| 224 |
|
| 227 |
$item = Mage::getModel('sales/quote_item');
|
| 228 |
$item->setQuote($quote)->setProduct($product);
|
| 229 |
$item->setData('qty', (string) $orderitem->Quantity);
|
| 230 |
+
$item->setCustomPrice((string) $orderitem->Price);
|
| 231 |
+
$item->setOriginalCustomPrice((string) $orderitem->Price);
|
| 232 |
+
|
| 233 |
$quote->addItem($item);
|
| 234 |
}
|
| 235 |
else {
|
| 236 |
+
echo "<Info>Can't find SKU to add to quote ".((string) $orderitem->SKU)
|
| 237 |
+
.", trying to create stub</Info>";
|
| 238 |
|
| 239 |
$prodIdToLoad = 0;
|
| 240 |
|
| 282 |
$item = Mage::getModel('sales/quote_item');
|
| 283 |
$item->setQuote($quote)->setProduct($product);
|
| 284 |
$item->setData('qty', (string) $orderitem->Quantity);
|
| 285 |
+
$item->setCustomPrice((string) $orderitem->Price);
|
| 286 |
+
$item->setOriginalCustomPrice((string) $orderitem->Price);
|
| 287 |
$quote->addItem($item);
|
| 288 |
}
|
| 289 |
else {
|
| 316 |
'postcode' => $postcode,
|
| 317 |
'region' => (string) $order->ShippingInfo->State,
|
| 318 |
'region_id' => $regionId,
|
| 319 |
+
'country_id' => (string) $order->ShippingInfo->Country,
|
| 320 |
+
'should_ignore_validation' => true
|
| 321 |
);
|
| 322 |
|
| 323 |
// add the billing address to the quote.
|
| 324 |
$billingAddress = $quote->getBillingAddress()->addData($billingAddressData);
|
| 325 |
+
|
| 326 |
+
echo "<Info>Set Shipping Address</Info>";
|
|
|
|
| 327 |
|
| 328 |
// set the shipping address
|
| 329 |
$shippingAddressData = array(
|
| 337 |
'region' => (string) $order->ShippingInfo->State,
|
| 338 |
'region_id' => $regionId,
|
| 339 |
'country_id' => (string) $order->ShippingInfo->Country,
|
| 340 |
+
'telephone' => (string) $order->ShippingInfo->PhoneNumber,
|
| 341 |
+
'should_ignore_validation' => true
|
| 342 |
);
|
| 343 |
|
| 344 |
Mage::getSingleton('core/session')->setShippingPrice(((string) $order->ShippingInfo->ShippingPrice) / $reverseRate);
|
| 378 |
$service = Mage::getModel('channelunity/ordercreatebackport', $quote);
|
| 379 |
}
|
| 380 |
|
| 381 |
+
$currentstore = Mage::app()->getStore()->getId();
|
| 382 |
+
// upgrade to admin permissions to avoid item qty not available issue
|
| 383 |
+
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
|
| 384 |
$service->submitAll();
|
| 385 |
$newOrder = $service->getOrder(); // returns full order object.
|
| 386 |
+
// we're done; sign out of admin permission
|
| 387 |
+
Mage::app()->setCurrentStore($currentstore);
|
| 388 |
|
| 389 |
if (!is_object($newOrder)) {
|
| 390 |
echo "<NotImported>".((string) $order->OrderId)."</NotImported>";
|
| 397 |
} catch (Exception $x) {
|
| 398 |
echo "<Exception><![CDATA[".$x->getMessage()." ".$x->getTraceAsString()."]]></Exception>";
|
| 399 |
echo "<NotImported>".((string) $order->OrderId)."</NotImported>";
|
| 400 |
+
Mage::unregister('cu_order_in_progress');
|
| 401 |
return;
|
| 402 |
}
|
| 403 |
|
| 404 |
$ordStatus = $this->CUOrderStatusToMagentoStatus((string) $order->OrderStatus);
|
| 405 |
|
| 406 |
try {
|
| 407 |
+
$newOrder->setData('state', $ordStatus);
|
| 408 |
+
$newOrder->setStatus($ordStatus);
|
| 409 |
+
$history = $newOrder->addStatusHistoryComment(
|
| 410 |
+
'Order imported from ChannelUnity', false);
|
| 411 |
+
$history->setIsCustomerNotified(false);
|
| 412 |
+
|
| 413 |
}
|
| 414 |
catch (Exception $x1) {
|
| 415 |
|
| 416 |
try {
|
| 417 |
+
$newOrder->setState('closed', 'closed',
|
| 418 |
+
'Order imported from ChannelUnity', false);
|
| 419 |
}
|
| 420 |
catch (Exception $x2) {
|
| 421 |
}
|
| 422 |
}
|
| 423 |
|
| 424 |
+
// This order will have been paid for, otherwise it won't
|
| 425 |
+
// have imported
|
| 426 |
|
| 427 |
$invoiceId = Mage::getModel('sales/order_invoice_api')
|
| 428 |
->create($newOrder->getIncrementId(), array());
|
| 445 |
$transaction->setOrder($newOrder);
|
| 446 |
$transaction->setTxnType('capture');
|
| 447 |
$transaction->setTxnId((string) $order->OrderId);
|
| 448 |
+
$transaction->setAdditionalInformation('SubscriptionId',
|
| 449 |
+
(string) $dataArray->SubscriptionId);
|
| 450 |
+
$transaction->setAdditionalInformation('RemoteOrderID',
|
| 451 |
+
(string) $order->OrderId);
|
| 452 |
+
$transaction->setAdditionalInformation('ShippingService',
|
| 453 |
+
(string) $order->ShippingInfo->Service);
|
| 454 |
|
| 455 |
$serviceType = (string) $order->ServiceSku;
|
| 456 |
switch ($serviceType) {
|
| 487 |
|
| 488 |
$transaction->setAdditionalInformation('AmazonFBA', 'Yes');
|
| 489 |
// Can't set 'complete' state manually - ideally import tracking info and create shipment in Mage
|
| 490 |
+
|
| 491 |
+
|
| 492 |
+
$newOrder->setData('state', 'complete');
|
| 493 |
+
$newOrder->setStatus('complete');
|
| 494 |
+
$history = $newOrder->addStatusHistoryComment('Order was fulfilled by Amazon', false);
|
| 495 |
+
$history->setIsCustomerNotified(false);
|
| 496 |
+
|
| 497 |
}
|
| 498 |
$transaction->save();
|
| 499 |
|
| 502 |
|
| 503 |
$message = Mage::getModel('giftmessage/message');
|
| 504 |
|
|
|
|
|
|
|
|
|
|
| 505 |
$message->setMessage($order->ShippingInfo->GiftMessage);
|
| 506 |
$message->save();
|
| 507 |
|
| 511 |
}
|
| 512 |
|
| 513 |
$newOrder->setCreatedAt((string) $order->PurchaseDate);
|
| 514 |
+
|
| 515 |
+
//================ Add custom options where applicable ============
|
| 516 |
+
$allItems = $newOrder->getAllItems();
|
| 517 |
+
foreach ($allItems as $item) {
|
| 518 |
+
if (isset($itemOptions[$item->getSku()])) {
|
| 519 |
+
$optionsToAdd = $itemOptions[$item->getSku()];
|
| 520 |
+
|
| 521 |
+
$optionArray = array();
|
| 522 |
+
|
| 523 |
+
foreach ($optionsToAdd as $customSkuToAdd) {
|
| 524 |
+
$productTemp = Mage::getModel('catalog/product')->load($item->getProductId());
|
| 525 |
+
|
| 526 |
+
$tempOption = $productTemp->getOptions();
|
| 527 |
+
foreach ($tempOption as $option) {
|
| 528 |
+
$temp = $option->getData();
|
| 529 |
+
|
| 530 |
+
$values = $option->getValues();
|
| 531 |
+
if (count($values) > 0) {
|
| 532 |
+
foreach ($values as $value) {
|
| 533 |
+
|
| 534 |
+
if ($value["sku"] == $customSkuToAdd) {
|
| 535 |
+
|
| 536 |
+
echo "<Info>Add custom option: $customSkuToAdd</Info>";
|
| 537 |
+
|
| 538 |
+
$optionArray[count($optionArray)]
|
| 539 |
+
= array(
|
| 540 |
+
'label' => $temp["default_title"],
|
| 541 |
+
'value' => $value["title"],
|
| 542 |
+
'print_value' => $value["title"],
|
| 543 |
+
'option_type' => 'radio',
|
| 544 |
+
'custom_view' => false,
|
| 545 |
+
'option_id' => $temp["option_id"],
|
| 546 |
+
'option_value' => $value->getId()
|
| 547 |
+
);
|
| 548 |
+
}
|
| 549 |
+
|
| 550 |
+
}
|
| 551 |
+
}
|
| 552 |
+
}
|
| 553 |
+
|
| 554 |
+
|
| 555 |
+
}
|
| 556 |
+
|
| 557 |
+
$item->setProductOptions(array('options' => $optionArray
|
| 558 |
+
));
|
| 559 |
+
|
| 560 |
+
$item->save();
|
| 561 |
+
}
|
| 562 |
+
}
|
| 563 |
$newOrder->save();
|
| 564 |
|
| 565 |
+
Mage::unregister('cu_order_in_progress');
|
| 566 |
}
|
| 567 |
|
| 568 |
private function createStubProduct($missingSku, $productTitle, $websiteID, $keyorder, $price, $qty, $skuAttribute) {
|
| 594 |
// Default Magento attribute
|
| 595 |
$product->setWeight('0.01');
|
| 596 |
$product->setVisibility(1); // not visible
|
| 597 |
+
$product->setStatus(1); // status = enabled, otherwise price shows as 0.00 in the order
|
| 598 |
$product->setTaxClassId(0); # My default tax class
|
| 599 |
$product->setStockData(array(
|
| 600 |
'is_in_stock' => 1,
|
| 676 |
$ordStatus = $this->CUOrderStatusToMagentoStatus((string) $singleOrder->OrderStatus);
|
| 677 |
|
| 678 |
try {
|
| 679 |
+
$newOrder->setData('state',$ordStatus);
|
| 680 |
|
| 681 |
}
|
| 682 |
catch (Exception $x1) {
|
app/code/community/Camiloo/Channelunity/Model/Products.php
CHANGED
|
@@ -167,8 +167,12 @@
|
|
| 167 |
}
|
| 168 |
}
|
| 169 |
|
| 170 |
-
public function generateCuXmlForSingleProduct($productId, $storeId) {
|
| 171 |
$productXml = "";
|
|
|
|
|
|
|
|
|
|
|
|
|
| 172 |
|
| 173 |
$product = Mage::getModel('catalog/product');
|
| 174 |
$product->setStoreId($storeId)->load($productId);
|
|
@@ -180,7 +184,7 @@
|
|
| 180 |
}
|
| 181 |
|
| 182 |
$stock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($product->getId());
|
| 183 |
-
$qty = $stock->getData('qty');
|
| 184 |
|
| 185 |
$catids = implode(',', $product->getCategoryIds());
|
| 186 |
$categories = $product->getCategoryIds();
|
|
@@ -197,7 +201,7 @@
|
|
| 197 |
|
| 198 |
$productXml = "<Product>\n";
|
| 199 |
$productXml .= " <RemoteId>".$product->getId()."</RemoteId>\n";
|
| 200 |
-
$productXml .= " <ProductType
|
| 201 |
$productXml .= " <Title><![CDATA[{$product->getData('name')} ]]></Title>\n";
|
| 202 |
$productXml .= " <Description><![CDATA[{$product->getData('description')} ]]></Description>\n";
|
| 203 |
$productXml .= " <SKU><![CDATA[{$product->getData('sku')}]]></SKU>\n";
|
|
@@ -257,6 +261,80 @@
|
|
| 257 |
$productXml .= " <SKU><![CDATA[{$cp->getData('sku')}]]></SKU>\n";
|
| 258 |
}
|
| 259 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 260 |
|
| 261 |
$variationXml .= " </Variations>\n";
|
| 262 |
$productXml .= " </RelatedSKUs>\n";
|
|
@@ -265,6 +343,82 @@
|
|
| 265 |
$productXml .= " <Custom>\n";
|
| 266 |
|
| 267 |
// Enumerate all other attribute values
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 268 |
|
| 269 |
$attributeNames = array_keys($product->getData());
|
| 270 |
|
|
@@ -313,7 +467,11 @@
|
|
| 313 |
else {
|
| 314 |
|
| 315 |
if (!is_object($prodDataValue)) {
|
|
|
|
|
|
|
|
|
|
| 316 |
$productXml .= " <$attr><![CDATA[".$prodDataValue."]]></$attr>\n";
|
|
|
|
| 317 |
} else if ('Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Type_Configurable_Attribute_Collection'
|
| 318 |
== get_class($prodDataValue)) {
|
| 319 |
$productXml .= " <$attr><![CDATA[Mage_Core_Model_Mysql4_Collection_Abstract]]></$attr>\n";
|
|
@@ -321,12 +479,6 @@
|
|
| 321 |
}
|
| 322 |
}
|
| 323 |
}
|
| 324 |
-
|
| 325 |
-
$productXml .= " </Custom>\n";
|
| 326 |
-
$productXml .= "</Product>\n";
|
| 327 |
-
|
| 328 |
-
unset($product);
|
| 329 |
-
|
| 330 |
return $productXml;
|
| 331 |
}
|
| 332 |
|
|
@@ -426,7 +578,8 @@
|
|
| 426 |
try {
|
| 427 |
|
| 428 |
// get the highest product ID
|
| 429 |
-
if (version_compare(Mage::getVersion(), "1.6.0.0", ">=")
|
|
|
|
| 430 |
$collectionOfProduct = Mage::getModel('channelunity/collection')->addStoreFilter($storeId);
|
| 431 |
}
|
| 432 |
else {
|
|
@@ -438,7 +591,8 @@
|
|
| 438 |
$totp = $collectionOfProduct->getFirstItem();
|
| 439 |
$totp = $totp->getEntityId();
|
| 440 |
|
| 441 |
-
if (version_compare(Mage::getVersion(), "1.6.0.0", ">=")
|
|
|
|
| 442 |
$collectionOfProduct = Mage::getModel('channelunity/collection')->addStoreFilter($storeId);
|
| 443 |
}
|
| 444 |
else {
|
|
@@ -454,7 +608,7 @@
|
|
| 454 |
$this->maxMemory = str_replace("M", "", $this->maxMemory);
|
| 455 |
$this->maxMemory = $this->maxMemory * 1024 * 1024;
|
| 456 |
} else if ($this->maxMemoryChar == "G") {
|
| 457 |
-
$this->maxMemory = str_replace("G", "", $maxMemory);
|
| 458 |
$this->maxMemory = $this->maxMemory * 1024 * 1024 * 1024;
|
| 459 |
}
|
| 460 |
|
| 167 |
}
|
| 168 |
}
|
| 169 |
|
| 170 |
+
public function generateCuXmlForSingleProduct($productId, $storeId, $reduceStockBy = 0) {
|
| 171 |
$productXml = "";
|
| 172 |
+
$bNeedCustomOptionProducts = false; // custom options needed?
|
| 173 |
+
$skuList = array(); // SKUs of the custom option child products
|
| 174 |
+
$customOptionAttrs = array();
|
| 175 |
+
$customOptionsData = array();
|
| 176 |
|
| 177 |
$product = Mage::getModel('catalog/product');
|
| 178 |
$product->setStoreId($storeId)->load($productId);
|
| 184 |
}
|
| 185 |
|
| 186 |
$stock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($product->getId());
|
| 187 |
+
$qty = $stock->getData('qty') - $reduceStockBy;
|
| 188 |
|
| 189 |
$catids = implode(',', $product->getCategoryIds());
|
| 190 |
$categories = $product->getCategoryIds();
|
| 201 |
|
| 202 |
$productXml = "<Product>\n";
|
| 203 |
$productXml .= " <RemoteId>".$product->getId()."</RemoteId>\n";
|
| 204 |
+
$productXml .= " <ProductType><![CDATA[".$attributeSetName." ]]></ProductType>\n";
|
| 205 |
$productXml .= " <Title><![CDATA[{$product->getData('name')} ]]></Title>\n";
|
| 206 |
$productXml .= " <Description><![CDATA[{$product->getData('description')} ]]></Description>\n";
|
| 207 |
$productXml .= " <SKU><![CDATA[{$product->getData('sku')}]]></SKU>\n";
|
| 261 |
$productXml .= " <SKU><![CDATA[{$cp->getData('sku')}]]></SKU>\n";
|
| 262 |
}
|
| 263 |
}
|
| 264 |
+
else if ($product->getData('has_options') == 1) {
|
| 265 |
+
$bNeedCustomOptionProducts = true;
|
| 266 |
+
|
| 267 |
+
// Product has custom options
|
| 268 |
+
|
| 269 |
+
foreach ($product->getOptions() as $o) {
|
| 270 |
+
$optionType = $o->getType();
|
| 271 |
+
|
| 272 |
+
// Look at only drop down boxes or radio buttons
|
| 273 |
+
|
| 274 |
+
if (($optionType == 'drop_down' || $optionType == 'radio')
|
| 275 |
+
&& $o->getData("is_require") == 1) {
|
| 276 |
+
|
| 277 |
+
$optTitle = $o->getData('title');
|
| 278 |
+
$optTitle = "custom_".ereg_replace("[^A-Za-z0-9_]", "", str_replace(" ", "_", $optTitle));
|
| 279 |
+
|
| 280 |
+
$customOptionsData[$optTitle] = array();
|
| 281 |
+
|
| 282 |
+
$variationXml .= " <Variation><![CDATA[{$optTitle}]]></Variation>\n";
|
| 283 |
+
$customOptionAttrs[] = $optTitle;
|
| 284 |
+
|
| 285 |
+
$values = $o->getValues();
|
| 286 |
+
|
| 287 |
+
if (count($skuList) == 0) {
|
| 288 |
+
|
| 289 |
+
foreach ($values as $k => $v) {
|
| 290 |
+
|
| 291 |
+
$skuList[] = $product->getData('sku')."-".$v->getData('sku');
|
| 292 |
+
|
| 293 |
+
$customOptionsData[count($customOptionAttrs)][$v->getData('sku')] = array();
|
| 294 |
+
$customOptionsData[count($customOptionAttrs)][$v->getData('sku')]["title"] = $v->getData('title');
|
| 295 |
+
$customOptionsData[count($customOptionAttrs)][$v->getData('sku')]["price"] = $v->getData('price');
|
| 296 |
+
$customOptionsData[count($customOptionAttrs)][$v->getData('sku')]["price_type"] = $v->getData('price_type');
|
| 297 |
+
}
|
| 298 |
+
|
| 299 |
+
}
|
| 300 |
+
else {
|
| 301 |
+
// Take a copy of the current SKU list
|
| 302 |
+
// append all the combinations
|
| 303 |
+
|
| 304 |
+
$tempSkuList = array();
|
| 305 |
+
foreach ($values as $k => $v) {
|
| 306 |
+
|
| 307 |
+
$tempSkuList[] = $v->getData('sku');
|
| 308 |
+
|
| 309 |
+
$customOptionsData[count($customOptionAttrs)][$v->getData('sku')] = array();
|
| 310 |
+
$customOptionsData[count($customOptionAttrs)][$v->getData('sku')]["title"] = $v->getData('title');
|
| 311 |
+
$customOptionsData[count($customOptionAttrs)][$v->getData('sku')]["price"] = $v->getData('price');
|
| 312 |
+
$customOptionsData[count($customOptionAttrs)][$v->getData('sku')]["price_type"] = $v->getData('price_type');
|
| 313 |
+
}
|
| 314 |
+
|
| 315 |
+
$newSkuList = array();
|
| 316 |
+
|
| 317 |
+
foreach ($skuList as $oldSku) {
|
| 318 |
+
|
| 319 |
+
foreach ($tempSkuList as $newSku) {
|
| 320 |
+
|
| 321 |
+
$newSkuList[] = $oldSku."-".$newSku;
|
| 322 |
+
}
|
| 323 |
+
}
|
| 324 |
+
|
| 325 |
+
$skuList = $newSkuList;
|
| 326 |
+
}
|
| 327 |
+
|
| 328 |
+
}
|
| 329 |
+
}
|
| 330 |
+
|
| 331 |
+
// Build up the SKU combinations for each combination of options
|
| 332 |
+
foreach ($skuList as $relsku) {
|
| 333 |
+
|
| 334 |
+
$productXml .= " <SKU><![CDATA[{$relsku}]]></SKU>\n";
|
| 335 |
+
}
|
| 336 |
+
|
| 337 |
+
}
|
| 338 |
|
| 339 |
$variationXml .= " </Variations>\n";
|
| 340 |
$productXml .= " </RelatedSKUs>\n";
|
| 343 |
$productXml .= " <Custom>\n";
|
| 344 |
|
| 345 |
// Enumerate all other attribute values
|
| 346 |
+
$productXml .= $this->enumerateCustomAttributesForProduct($product);
|
| 347 |
+
|
| 348 |
+
$productXml .= " </Custom>\n";
|
| 349 |
+
$productXml .= "</Product>\n";
|
| 350 |
+
|
| 351 |
+
// ============ Now generate product elements for all possible custom options ============
|
| 352 |
+
$idIncrement = 1000000;
|
| 353 |
+
|
| 354 |
+
if ($bNeedCustomOptionProducts) {
|
| 355 |
+
|
| 356 |
+
foreach ($skuList as $customSku) {
|
| 357 |
+
|
| 358 |
+
$skuParts = explode("-", str_replace($product->getData('sku'), "temp", $customSku));
|
| 359 |
+
|
| 360 |
+
$productXml .= "<Product>\n";
|
| 361 |
+
$productXml .= " <RemoteId>".(($idIncrement++) + $product->getId())."</RemoteId>\n";
|
| 362 |
+
$productXml .= " <ProductType><![CDATA[".$attributeSetName." ]]></ProductType>\n";
|
| 363 |
+
$productXml .= " <Title><![CDATA[{$product->getData('name')} ]]></Title>\n";
|
| 364 |
+
$productXml .= " <Description><![CDATA[{$product->getData('description')} ]]></Description>\n";
|
| 365 |
+
$productXml .= " <SKU><![CDATA[{$customSku}]]></SKU>\n";
|
| 366 |
+
$productXml .= " <Quantity>{$qty}</Quantity>\n";
|
| 367 |
+
$productXml .= " <Category>{$catids}</Category>\n";
|
| 368 |
+
$productXml .= " <CategoryName><![CDATA[{$catnames} ]]></CategoryName>\n";
|
| 369 |
+
$productXml .= " <Image><![CDATA[{$imageUrl}]]></Image>\n";
|
| 370 |
+
$productXml .= " <RelatedSKUs> </RelatedSKUs> <Variations> </Variations>\n";
|
| 371 |
+
$productXml .= " <Custom>\n";
|
| 372 |
+
|
| 373 |
+
// Enumerate all other attribute values
|
| 374 |
+
$productXml .= $this->enumerateCustomAttributesForProduct($product);
|
| 375 |
+
|
| 376 |
+
$basePrice = $product->getData('price');
|
| 377 |
+
$extraPrice = 0.00;
|
| 378 |
+
|
| 379 |
+
$indexTemp = 1;
|
| 380 |
+
for ( ; $indexTemp < count($skuParts); ) {
|
| 381 |
+
$part = $skuParts[$indexTemp];
|
| 382 |
+
|
| 383 |
+
$keycust = $customOptionAttrs[$indexTemp-1];
|
| 384 |
+
|
| 385 |
+
$custValue = $customOptionsData[$indexTemp][$part]['title'];
|
| 386 |
+
|
| 387 |
+
$priceExtra = $customOptionsData[$indexTemp][$part]['price'];
|
| 388 |
+
$priceType = $customOptionsData[$indexTemp][$part]['price_type'];
|
| 389 |
+
|
| 390 |
+
if ($priceType == "fixed") {
|
| 391 |
+
|
| 392 |
+
$extraPrice += (double)$priceExtra;
|
| 393 |
+
}
|
| 394 |
+
else if ($priceType == "percent") {
|
| 395 |
+
|
| 396 |
+
$extraPrice += $basePrice * (100.0 + $priceExtra)/100.0;
|
| 397 |
+
}
|
| 398 |
+
|
| 399 |
+
$productXml .= " <$keycust><![CDATA[".$custValue."]]></$keycust>\n";
|
| 400 |
+
|
| 401 |
+
$indexTemp++;
|
| 402 |
+
}
|
| 403 |
+
|
| 404 |
+
$basePrice += $extraPrice; // custom options have prices attached
|
| 405 |
+
|
| 406 |
+
$productXml .= " </Custom>\n";
|
| 407 |
+
|
| 408 |
+
|
| 409 |
+
$productXml .= " <Price>$basePrice</Price>\n";
|
| 410 |
+
|
| 411 |
+
$productXml .= "</Product>\n";
|
| 412 |
+
}
|
| 413 |
+
}
|
| 414 |
+
// =======================================================================================
|
| 415 |
+
unset($product);
|
| 416 |
+
|
| 417 |
+
return $productXml;
|
| 418 |
+
}
|
| 419 |
+
|
| 420 |
+
public function enumerateCustomAttributesForProduct($product) {
|
| 421 |
+
$productXml = "";
|
| 422 |
|
| 423 |
$attributeNames = array_keys($product->getData());
|
| 424 |
|
| 467 |
else {
|
| 468 |
|
| 469 |
if (!is_object($prodDataValue)) {
|
| 470 |
+
|
| 471 |
+
$prodDataValue = str_replace("<![CDATA[", "", $prodDataValue);
|
| 472 |
+
$prodDataValue = str_replace("]]>", "", $prodDataValue);
|
| 473 |
$productXml .= " <$attr><![CDATA[".$prodDataValue."]]></$attr>\n";
|
| 474 |
+
|
| 475 |
} else if ('Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Type_Configurable_Attribute_Collection'
|
| 476 |
== get_class($prodDataValue)) {
|
| 477 |
$productXml .= " <$attr><![CDATA[Mage_Core_Model_Mysql4_Collection_Abstract]]></$attr>\n";
|
| 479 |
}
|
| 480 |
}
|
| 481 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 482 |
return $productXml;
|
| 483 |
}
|
| 484 |
|
| 578 |
try {
|
| 579 |
|
| 580 |
// get the highest product ID
|
| 581 |
+
if (version_compare(Mage::getVersion(), "1.6.0.0", ">=")
|
| 582 |
+
&& class_exists("Mage_Catalog_Model_Resource_Product_Collection")) {
|
| 583 |
$collectionOfProduct = Mage::getModel('channelunity/collection')->addStoreFilter($storeId);
|
| 584 |
}
|
| 585 |
else {
|
| 591 |
$totp = $collectionOfProduct->getFirstItem();
|
| 592 |
$totp = $totp->getEntityId();
|
| 593 |
|
| 594 |
+
if (version_compare(Mage::getVersion(), "1.6.0.0", ">=")
|
| 595 |
+
&& class_exists("Mage_Catalog_Model_Resource_Product_Collection")) {
|
| 596 |
$collectionOfProduct = Mage::getModel('channelunity/collection')->addStoreFilter($storeId);
|
| 597 |
}
|
| 598 |
else {
|
| 608 |
$this->maxMemory = str_replace("M", "", $this->maxMemory);
|
| 609 |
$this->maxMemory = $this->maxMemory * 1024 * 1024;
|
| 610 |
} else if ($this->maxMemoryChar == "G") {
|
| 611 |
+
$this->maxMemory = str_replace("G", "", $this->maxMemory);
|
| 612 |
$this->maxMemory = $this->maxMemory * 1024 * 1024 * 1024;
|
| 613 |
}
|
| 614 |
|
app/code/community/Camiloo/Channelunity/controllers/ApiController.php
CHANGED
|
@@ -31,8 +31,8 @@ class Camiloo_Channelunity_ApiController extends Mage_Core_Controller_Front_Acti
|
|
| 31 |
<?xml version="1.0" encoding="utf-8" ?><ChannelUnity><Notification><ID>1334834111876</ID><Timestamp>Thu Apr 19 12:15:11 BST 2012</Timestamp><Type>OrderNotification</Type><Payload><MerchantName>marktest</MerchantName><SourceId>10</SourceId><FriendlyName>English</FriendlyName><URL>http://__.camiloo.co.uk/channelunity/api/index</URL><MainCountry>United Kingdom</MainCountry><FrameworkType>Magento</FrameworkType><WebsiteId>1</WebsiteId><StoreId>1</StoreId><StoreviewId>1</StoreviewId><SubscriptionId>304</SubscriptionId><SkuAttribute>sku</SkuAttribute><Orders>
|
| 32 |
<Order>
|
| 33 |
<ServiceSku>CU_AMZ_UK</ServiceSku>
|
| 34 |
-
<OrderId>
|
| 35 |
-
<PurchaseDate>2012-
|
| 36 |
<Currency>GBP</Currency>
|
| 37 |
<OrderFlags></OrderFlags>
|
| 38 |
<OrderStatus>Processing</OrderStatus>
|
|
@@ -44,9 +44,9 @@ class Camiloo_Channelunity_ApiController extends Mage_Core_Controller_Front_Acti
|
|
| 44 |
<Address2><![CDATA[]]></Address2>
|
| 45 |
<Address3><![CDATA[]]></Address3>
|
| 46 |
<City><![CDATA[Manchester]]></City>
|
| 47 |
-
<State>
|
| 48 |
<PostalCode>M1 1AA</PostalCode>
|
| 49 |
-
<Country><![CDATA[
|
| 50 |
<PhoneNumber><![CDATA[01981 239329]]></PhoneNumber>
|
| 51 |
<ShippingPrice>2.00</ShippingPrice>
|
| 52 |
<ShippingTax>0.00</ShippingTax>
|
| 31 |
<?xml version="1.0" encoding="utf-8" ?><ChannelUnity><Notification><ID>1334834111876</ID><Timestamp>Thu Apr 19 12:15:11 BST 2012</Timestamp><Type>OrderNotification</Type><Payload><MerchantName>marktest</MerchantName><SourceId>10</SourceId><FriendlyName>English</FriendlyName><URL>http://__.camiloo.co.uk/channelunity/api/index</URL><MainCountry>United Kingdom</MainCountry><FrameworkType>Magento</FrameworkType><WebsiteId>1</WebsiteId><StoreId>1</StoreId><StoreviewId>1</StoreviewId><SubscriptionId>304</SubscriptionId><SkuAttribute>sku</SkuAttribute><Orders>
|
| 32 |
<Order>
|
| 33 |
<ServiceSku>CU_AMZ_UK</ServiceSku>
|
| 34 |
+
<OrderId>228-8888888-0277162</OrderId>
|
| 35 |
+
<PurchaseDate>2012-06-10T01:33:10+00:00</PurchaseDate>
|
| 36 |
<Currency>GBP</Currency>
|
| 37 |
<OrderFlags></OrderFlags>
|
| 38 |
<OrderStatus>Processing</OrderStatus>
|
| 44 |
<Address2><![CDATA[]]></Address2>
|
| 45 |
<Address3><![CDATA[]]></Address3>
|
| 46 |
<City><![CDATA[Manchester]]></City>
|
| 47 |
+
<State>Greater Manchester</State>
|
| 48 |
<PostalCode>M1 1AA</PostalCode>
|
| 49 |
+
<Country><![CDATA[GB]]></Country>
|
| 50 |
<PhoneNumber><![CDATA[01981 239329]]></PhoneNumber>
|
| 51 |
<ShippingPrice>2.00</ShippingPrice>
|
| 52 |
<ShippingTax>0.00</ShippingTax>
|
app/code/community/Camiloo/Channelunity/etc/config.xml
CHANGED
|
@@ -219,12 +219,23 @@
|
|
| 219 |
</channelunity>
|
| 220 |
</observers>
|
| 221 |
</catalog_controller_category_delete>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 222 |
</events>
|
| 223 |
</global>
|
| 224 |
<default>
|
| 225 |
<carriers>
|
| 226 |
<channelunitycustomrate>
|
| 227 |
-
<active>
|
|
|
|
|
|
|
| 228 |
<model>channelunity/customrate</model>
|
| 229 |
<title>ChannelUnity Shipping</title>
|
| 230 |
<name>ChannelUnity Rate</name>
|
| 219 |
</channelunity>
|
| 220 |
</observers>
|
| 221 |
</catalog_controller_category_delete>
|
| 222 |
+
<core_config_data_save_after>
|
| 223 |
+
<observers>
|
| 224 |
+
<channelunity>
|
| 225 |
+
<type>model</type>
|
| 226 |
+
<class>channelunity/observer</class>
|
| 227 |
+
<method>configSaveAfter</method>
|
| 228 |
+
</channelunity>
|
| 229 |
+
</observers>
|
| 230 |
+
</core_config_data_save_after>
|
| 231 |
</events>
|
| 232 |
</global>
|
| 233 |
<default>
|
| 234 |
<carriers>
|
| 235 |
<channelunitycustomrate>
|
| 236 |
+
<active>1</active>
|
| 237 |
+
<show_on_frontend>0</show_on_frontend>
|
| 238 |
+
<show_on_backend>0</show_on_backend>
|
| 239 |
<model>channelunity/customrate</model>
|
| 240 |
<title>ChannelUnity Shipping</title>
|
| 241 |
<name>ChannelUnity Rate</name>
|
app/design/adminhtml/default/default/template/channelunity/configheader.phtml
CHANGED
|
@@ -16,7 +16,7 @@
|
|
| 16 |
<h3>ChannelUnity Integration for Magento</h3>
|
| 17 |
Devised and Developed in Manchester, UK by <a href="http://www.camiloo.co.uk/?ref=cu" target="_blank">Camiloo Limited</a><br />
|
| 18 |
<?php
|
| 19 |
-
$xml = Mage::getModel('channelunity/checkforupdates')->getRemoteXMLFileData("http://my.channelunity.com/versioncheck.php?Version=1.0.0.
|
| 20 |
$html = $xml->DisplayMessage[0];
|
| 21 |
echo $html;
|
| 22 |
?>
|
| 16 |
<h3>ChannelUnity Integration for Magento</h3>
|
| 17 |
Devised and Developed in Manchester, UK by <a href="http://www.camiloo.co.uk/?ref=cu" target="_blank">Camiloo Limited</a><br />
|
| 18 |
<?php
|
| 19 |
+
$xml = Mage::getModel('channelunity/checkforupdates')->getRemoteXMLFileData("http://my.channelunity.com/versioncheck.php?Version=1.0.0.8");
|
| 20 |
$html = $xml->DisplayMessage[0];
|
| 21 |
echo $html;
|
| 22 |
?>
|
package.xml
CHANGED
|
@@ -1,21 +1,21 @@
|
|
| 1 |
<?xml version="1.0"?>
|
| 2 |
<package>
|
| 3 |
<name>Camiloo_Channelunity</name>
|
| 4 |
-
<version>1.0.0.
|
| 5 |
<stability>stable</stability>
|
| 6 |
<license uri="http://www.camiloo.co.uk/license.txt">Camiloo EULA</license>
|
| 7 |
<channel>community</channel>
|
| 8 |
<extends/>
|
| 9 |
-
<summary>
|
| 10 |
<description>This module allows Magento to connect to your account on channelunity.com
|
| 11 |
|
| 12 |
-
Should you need any help getting started, please email support@
|
| 13 |
<notes>The ChannelUnity connector kit for Magento.
|
| 14 |
-
|
| 15 |
<authors><author><name>Camiloo Limited</name><user>auto-converted</user><email>hello@camiloo.co.uk</email></author></authors>
|
| 16 |
-
<date>2012-
|
| 17 |
-
<time>
|
| 18 |
-
<contents><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="template"><dir name="channelunity"><file name="configheader.phtml" hash="
|
| 19 |
<compatible/>
|
| 20 |
<dependencies/>
|
| 21 |
</package>
|
| 1 |
<?xml version="1.0"?>
|
| 2 |
<package>
|
| 3 |
<name>Camiloo_Channelunity</name>
|
| 4 |
+
<version>1.0.0.8</version>
|
| 5 |
<stability>stable</stability>
|
| 6 |
<license uri="http://www.camiloo.co.uk/license.txt">Camiloo EULA</license>
|
| 7 |
<channel>community</channel>
|
| 8 |
<extends/>
|
| 9 |
+
<summary>ChannelUnity Integration for Magento.</summary>
|
| 10 |
<description>This module allows Magento to connect to your account on channelunity.com
|
| 11 |
|
| 12 |
+
Should you need any help getting started, please email support@channelunity.com</description>
|
| 13 |
<notes>The ChannelUnity connector kit for Magento.
|
| 14 |
+
Allows products with custom options to be uploaded to ChannelUnity. Prevents order import validation errors.</notes>
|
| 15 |
<authors><author><name>Camiloo Limited</name><user>auto-converted</user><email>hello@camiloo.co.uk</email></author></authors>
|
| 16 |
+
<date>2012-07-02</date>
|
| 17 |
+
<time>22:09:39</time>
|
| 18 |
+
<contents><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="template"><dir name="channelunity"><file name="configheader.phtml" hash="df298d12a6d69f6acdd974742cf91957"/><file name="paymentinfo.phtml" hash="60967f7ab38fe17c879b272eed25f986"/></dir></dir></dir></dir></dir></target><target name="magecommunity"><dir name="Camiloo"><dir name="Channelunity"><dir name="Block"><file name="Configheader.php" hash="6d7de078f04901e94b8b9675bcd9e4ac"/><file name="Paymentform.php" hash="1f3e79556f15a57b9761c3665a103103"/><file name="Paymentinfo.php" hash="6c3c36d92592dd802fb8045dc065d231"/></dir><dir name="controllers"><file name="ApiController.php" hash="3148140b7866c820607b6b08c4ce8a99"/><file name="ApiController.php.old.php" hash="01ff34c2cf5798a82cfc11b19ab6decd"/></dir><dir name="etc"><file name="config.xml" hash="972a911499e3fb5feb873c2164d409c4"/><file name="system.xml" hash="b43f861f8ab3dadca3c122be10790609"/></dir><dir name="Helper"><file name="Data.php" hash="857d7d23882394c33f96e14dece757c2"/></dir><dir name="Model"><file name="Abstract.php" hash="9562198c4f35997f3cc81e35c35819f2"/><file name="Attributes.php" hash="054b33cadc22acda31056e5b4cb8ff56"/><file name="Categories.php" hash="fd3806b220fd579b00bc5ab5fd464170"/><file name="Checkforupdates.php" hash="e2675f59cc61e54ad1a20f76865ce653"/><file name="Collection.php" hash="707e40c83bfc057ab557b5fad21727e5"/><file name="Customrate.php" hash="f6e64e362fa36b3854d8dacfc3e677c2"/><file name="Entity.php" hash="0032a6c24cb75beb2ae073a56c2a1564"/><file name="Observer.php" hash="2d4c49738479b98889e39dc95d8d65e0"/><file name="Ordercreatebackport.php" hash="dd84aa8fc0c4b62022850bfa74bff37f"/><file name="Orders.php" hash="5fae119970401d888973f5afcd7344a4"/><file name="Payment.php" hash="7fe570cf0aaf7c2bcdf1982b6e69caa6"/><file name="Paymentinfo.php" hash="e11658c9fa02420557441f5c8a41f8a0"/><file name="Paymentmethoduk.php" hash="a99409ed4ee5f7e426df4eaf793482d6"/><file name="Products.php" hash="a0f15a0b178de8bafe09de02192b4fb8"/><file name="Stores.php" hash="7f299877f0b62ca9d30a46b333124680"/></dir><dir name="sql"><dir name="channelunity_setup"><file name="install-1.0.0.php" hash="7127fff7219108813aa35dd7596b09d3"/><file name="mysql4-install-0.0.1.php" hash="7ebc892c87b9401bf402a7e1976133e3"/></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Camiloo_Channelunity.xml" hash="cccfbce64ee176372c5afecb8676fab0"/></dir></target></contents>
|
| 19 |
<compatible/>
|
| 20 |
<dependencies/>
|
| 21 |
</package>
|
