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>
|