Version Notes
- Enables syncing of products from the restaurant POS with magento
- Enables sending of orders from magento to the restaurant POS
Download this release
Release Info
Developer | Joris De Smedt |
Extension | Lightspeed_Restaurant_POS_connector |
Version | 0.0.2 |
Comparing to | |
See all releases |
Code changes from version 0.0.1 to 0.0.2
- app/code/local/Lightspeed/Syncproducts/Block/Syncproducts.php +6 -1
- app/code/local/Lightspeed/Syncproducts/Helper/Api.php +82 -16
- app/code/local/Lightspeed/Syncproducts/Helper/Import.php +530 -242
- app/code/local/Lightspeed/Syncproducts/Helper/SyncProcess.php +17 -5
- app/code/local/Lightspeed/Syncproducts/Model/Category/Source.php +1 -1
- app/code/local/Lightspeed/Syncproducts/Model/Order/Observer.php +105 -75
- app/code/local/Lightspeed/Syncproducts/Model/Product/Source.php +2 -2
- app/code/local/Lightspeed/Syncproducts/controllers/SyncproductsController.php +2 -2
- app/design/adminhtml/default/default/template/lightspeed/monitor/monitor.phtml +8 -0
- app/design/adminhtml/default/default/template/lightspeed/page.phtml +3 -3
- app/design/adminhtml/default/default/template/lightspeed/products.phtml +1 -1
- app/etc/modules/Lightspeed_Syncproducts.xml +1 -1
- package.xml +4 -4
app/code/local/Lightspeed/Syncproducts/Block/Syncproducts.php
CHANGED
@@ -74,7 +74,12 @@ class Lightspeed_Syncproducts_Block_Syncproducts extends Mage_Adminhtml_Block_Te
|
|
74 |
|
75 |
public function getPrice($product, $vatIncl){
|
76 |
$priceField = Mage::helper('lightspeed_syncproducts/syncProcess')->getPriceField();
|
77 |
-
if($
|
|
|
|
|
|
|
|
|
|
|
78 |
return $product->{$priceField};
|
79 |
} else {
|
80 |
$priceField .= "WithoutVat";
|
74 |
|
75 |
public function getPrice($product, $vatIncl){
|
76 |
$priceField = Mage::helper('lightspeed_syncproducts/syncProcess')->getPriceField();
|
77 |
+
if ($priceField == "normal") {
|
78 |
+
$priceField = "price";
|
79 |
+
} else {
|
80 |
+
$priceField .= "Price";
|
81 |
+
}
|
82 |
+
if ($vatIncl) {
|
83 |
return $product->{$priceField};
|
84 |
} else {
|
85 |
$priceField .= "WithoutVat";
|
app/code/local/Lightspeed/Syncproducts/Helper/Api.php
CHANGED
@@ -27,8 +27,13 @@ class Lightspeed_Syncproducts_Helper_Api extends Mage_Core_Helper_Abstract{
|
|
27 |
Mage::log($message, null, "lightspeedPut.log");
|
28 |
}
|
29 |
|
|
|
|
|
|
|
|
|
30 |
public function getClientApiToken(){
|
31 |
$this->log('Getting api token...');
|
|
|
32 |
if($this->cachedClientApiToken == null){
|
33 |
$username = Mage::getStoreConfig("lightspeed_settings/lightspeed_account/lightspeed_username");
|
34 |
$password = Mage::getStoreConfig("lightspeed_settings/lightspeed_account/lightspeed_password");
|
@@ -46,23 +51,14 @@ class Lightspeed_Syncproducts_Helper_Api extends Mage_Core_Helper_Abstract{
|
|
46 |
}
|
47 |
|
48 |
protected function getEstablishmentToken($establishmentId){
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
* return $response["data"]->token;
|
53 |
-
* } else {
|
54 |
-
* }
|
55 |
-
*/
|
56 |
-
$token = $this->getClientApiToken();
|
57 |
-
$params = array(
|
58 |
-
'id' => 0,
|
59 |
-
'method' => 'manager.getTokenForEstablishment',
|
60 |
-
'params' => array($token , $establishmentId, 'webmanager')
|
61 |
-
);
|
62 |
-
$response = $this->post(self::RPC, "", $params, true, false);
|
63 |
if($response["status"] == 200){
|
64 |
-
|
|
|
65 |
} else {
|
|
|
66 |
}
|
67 |
}
|
68 |
|
@@ -74,6 +70,14 @@ class Lightspeed_Syncproducts_Helper_Api extends Mage_Core_Helper_Abstract{
|
|
74 |
}
|
75 |
}
|
76 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
77 |
public function getProducts($productGroupId){
|
78 |
$response = $this->get(self::INVENTORY, "productgroup/".$productGroupId."/product", array("amount" => 100));
|
79 |
if($response["status"] == 200){
|
@@ -82,6 +86,22 @@ class Lightspeed_Syncproducts_Helper_Api extends Mage_Core_Helper_Abstract{
|
|
82 |
}
|
83 |
}
|
84 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
85 |
public function getAllProducts(){
|
86 |
$response = $this->get(self::INVENTORY, "product", array("amount" => 100));
|
87 |
if($response["status"] == 200){
|
@@ -163,7 +183,8 @@ class Lightspeed_Syncproducts_Helper_Api extends Mage_Core_Helper_Abstract{
|
|
163 |
}
|
164 |
|
165 |
public function createOrder($order, $establishmentId = null){
|
166 |
-
$this->log('Creating order for establishment: '
|
|
|
167 |
if(isset($establishmentId)){
|
168 |
$token = $this->getEstablishmentToken($establishmentId);
|
169 |
$response = $this->post(self::ONLINE_ORDERING, "customer/".$order["customerId"]."/establishmentorder", $order, false, true, $token);
|
@@ -178,6 +199,18 @@ class Lightspeed_Syncproducts_Helper_Api extends Mage_Core_Helper_Abstract{
|
|
178 |
}
|
179 |
}
|
180 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
181 |
public function getOrders($status, $offset){
|
182 |
$params = array(
|
183 |
"amount" => 15
|
@@ -208,6 +241,7 @@ class Lightspeed_Syncproducts_Helper_Api extends Mage_Core_Helper_Abstract{
|
|
208 |
{
|
209 |
$this->logPost('Creating '.$resource);
|
210 |
$this->logPost(print_r($data, true));
|
|
|
211 |
$url = Mage::getStoreConfig("lightspeed_settings/lightspeed_account/lightspeed_server");
|
212 |
if(!substr($url, -strlen('/'))==='/'){
|
213 |
$url .= '/';
|
@@ -243,6 +277,7 @@ class Lightspeed_Syncproducts_Helper_Api extends Mage_Core_Helper_Abstract{
|
|
243 |
{
|
244 |
$this->logPut('Creating '.$resource);
|
245 |
$this->logPut(print_r($data, true));
|
|
|
246 |
$url = Mage::getStoreConfig("lightspeed_settings/lightspeed_account/lightspeed_server");
|
247 |
if(!substr($url, -strlen('/'))==='/'){
|
248 |
$url .= '/';
|
@@ -269,10 +304,41 @@ class Lightspeed_Syncproducts_Helper_Api extends Mage_Core_Helper_Abstract{
|
|
269 |
return array("data" => json_decode($curl_post_response), "status" => $curl_status);
|
270 |
}
|
271 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
272 |
private function get($api, $resource, array $data = array(), $secure = true, $token = null)
|
273 |
{
|
274 |
$this->logGet('Getting '.$resource);
|
275 |
$this->logGet(print_r($data, true));
|
|
|
276 |
$url = Mage::getStoreConfig("lightspeed_settings/lightspeed_account/lightspeed_server");
|
277 |
if(!substr($url, -strlen('/'))==='/'){
|
278 |
$url .= '/';
|
27 |
Mage::log($message, null, "lightspeedPut.log");
|
28 |
}
|
29 |
|
30 |
+
private function logPatch($message) {
|
31 |
+
Mage::log($message, null, "lightspeedPatch.log");
|
32 |
+
}
|
33 |
+
|
34 |
public function getClientApiToken(){
|
35 |
$this->log('Getting api token...');
|
36 |
+
|
37 |
if($this->cachedClientApiToken == null){
|
38 |
$username = Mage::getStoreConfig("lightspeed_settings/lightspeed_account/lightspeed_username");
|
39 |
$password = Mage::getStoreConfig("lightspeed_settings/lightspeed_account/lightspeed_password");
|
51 |
}
|
52 |
|
53 |
protected function getEstablishmentToken($establishmentId){
|
54 |
+
$username = Mage::getStoreConfig("lightspeed_settings/lightspeed_account/lightspeed_username");
|
55 |
+
$password = Mage::getStoreConfig("lightspeed_settings/lightspeed_account/lightspeed_password");
|
56 |
+
$response = $this->post(self::SECURITY_API, "token",array("username" => $username, "password" => $password, "companyId" => $establishmentId, "deviceId" => "webmanager"), true, false);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
57 |
if($response["status"] == 200){
|
58 |
+
$this->log("Got establishment api token: " . $response["data"]->token);
|
59 |
+
return $response["data"]->token;
|
60 |
} else {
|
61 |
+
$this->log("Error getting establishment api token: ");
|
62 |
}
|
63 |
}
|
64 |
|
70 |
}
|
71 |
}
|
72 |
|
73 |
+
public function getProductGroup($productId){
|
74 |
+
$response = $this->get(self::INVENTORY, "productgroup/".$productId, array("amount" => 50));
|
75 |
+
if($response["status"] == 200){
|
76 |
+
return $response["data"];
|
77 |
+
} else {
|
78 |
+
}
|
79 |
+
}
|
80 |
+
|
81 |
public function getProducts($productGroupId){
|
82 |
$response = $this->get(self::INVENTORY, "productgroup/".$productGroupId."/product", array("amount" => 100));
|
83 |
if($response["status"] == 200){
|
86 |
}
|
87 |
}
|
88 |
|
89 |
+
public function getProduct($productId){
|
90 |
+
$response = $this->get(self::INVENTORY, "product/".$productId, array("amount" => 100));
|
91 |
+
if($response["status"] == 200){
|
92 |
+
return $response["data"];
|
93 |
+
} else {
|
94 |
+
}
|
95 |
+
}
|
96 |
+
|
97 |
+
public function getSubProducts($productId) {
|
98 |
+
$response = $this->get(self::INVENTORY, "product/".$productId."/subproduct", array("amount" => 100));
|
99 |
+
if ($response["status"] == 200) {
|
100 |
+
return $response["data"];
|
101 |
+
} else {
|
102 |
+
}
|
103 |
+
}
|
104 |
+
|
105 |
public function getAllProducts(){
|
106 |
$response = $this->get(self::INVENTORY, "product", array("amount" => 100));
|
107 |
if($response["status"] == 200){
|
183 |
}
|
184 |
|
185 |
public function createOrder($order, $establishmentId = null){
|
186 |
+
$this->log('Creating order' . (($establishmentId !== null) ? ' for establishment: ' . $establishmentId : ''));
|
187 |
+
|
188 |
if(isset($establishmentId)){
|
189 |
$token = $this->getEstablishmentToken($establishmentId);
|
190 |
$response = $this->post(self::ONLINE_ORDERING, "customer/".$order["customerId"]."/establishmentorder", $order, false, true, $token);
|
199 |
}
|
200 |
}
|
201 |
|
202 |
+
public function updateOrder($customerId, $posiosId, $orderPayment, $status) {
|
203 |
+
$this->logPatch('Updating order with posiosId: ' . $posiosId . ' to payment status: ' . $status);
|
204 |
+
|
205 |
+
$response = $this->patch(self::ONLINE_ORDERING, "customer/" . $customerId . "/order/" . $posiosId, array("orderPayment" => $orderPayment, "status" => $status), true, null);
|
206 |
+
$this->logPut($response);
|
207 |
+
|
208 |
+
if($response["status"] == 200){
|
209 |
+
return $response["data"];
|
210 |
+
} else {
|
211 |
+
}
|
212 |
+
}
|
213 |
+
|
214 |
public function getOrders($status, $offset){
|
215 |
$params = array(
|
216 |
"amount" => 15
|
241 |
{
|
242 |
$this->logPost('Creating '.$resource);
|
243 |
$this->logPost(print_r($data, true));
|
244 |
+
$this->logPost(json_encode($data));
|
245 |
$url = Mage::getStoreConfig("lightspeed_settings/lightspeed_account/lightspeed_server");
|
246 |
if(!substr($url, -strlen('/'))==='/'){
|
247 |
$url .= '/';
|
277 |
{
|
278 |
$this->logPut('Creating '.$resource);
|
279 |
$this->logPut(print_r($data, true));
|
280 |
+
$this->logPut(json_encode($data));
|
281 |
$url = Mage::getStoreConfig("lightspeed_settings/lightspeed_account/lightspeed_server");
|
282 |
if(!substr($url, -strlen('/'))==='/'){
|
283 |
$url .= '/';
|
304 |
return array("data" => json_decode($curl_post_response), "status" => $curl_status);
|
305 |
}
|
306 |
|
307 |
+
private function patch($api, $resource, array $data = array(), $secure = true, $token = null) {
|
308 |
+
$this->logPatch('Creating '.$resource);
|
309 |
+
$this->logPatch(print_r($data, true));
|
310 |
+
$this->logPatch(json_encode($data));
|
311 |
+
$url = Mage::getStoreConfig("lightspeed_settings/lightspeed_account/lightspeed_server");
|
312 |
+
if(!substr($url, -strlen('/'))==='/'){
|
313 |
+
$url .= '/';
|
314 |
+
}
|
315 |
+
$url .= $api.$resource;
|
316 |
+
$curl = curl_init($url);
|
317 |
+
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
|
318 |
+
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PATCH');
|
319 |
+
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
|
320 |
+
$headers = array('Content-Type: application/json', 'Accept: application/json');
|
321 |
+
if($secure){
|
322 |
+
if(isset($token)){
|
323 |
+
$headers[] = 'X-Auth-Token: '.$token;
|
324 |
+
} else {
|
325 |
+
$headers[] = 'X-Auth-Token: '.$this->getClientApiToken();
|
326 |
+
}
|
327 |
+
}
|
328 |
+
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
|
329 |
+
$curl_post_response = curl_exec($curl);
|
330 |
+
$curl_status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
|
331 |
+
curl_close($curl);
|
332 |
+
$this->logPatch('Created ' . $resource);
|
333 |
+
$this->logPatch(print_r(array("data" => $curl_post_response, "status" => $curl_status), true));
|
334 |
+
return array("data" => json_decode($curl_post_response), "status" => $curl_status);
|
335 |
+
}
|
336 |
+
|
337 |
private function get($api, $resource, array $data = array(), $secure = true, $token = null)
|
338 |
{
|
339 |
$this->logGet('Getting '.$resource);
|
340 |
$this->logGet(print_r($data, true));
|
341 |
+
$this->logGet(json_encode($data));
|
342 |
$url = Mage::getStoreConfig("lightspeed_settings/lightspeed_account/lightspeed_server");
|
343 |
if(!substr($url, -strlen('/'))==='/'){
|
344 |
$url .= '/';
|
app/code/local/Lightspeed/Syncproducts/Helper/Import.php
CHANGED
@@ -1,47 +1,42 @@
|
|
1 |
<?php
|
2 |
-
class Lightspeed_Syncproducts_Helper_Import extends Mage_Core_Helper_Abstract{
|
3 |
|
4 |
-
|
5 |
-
|
|
|
6 |
}
|
7 |
|
8 |
-
private function logOptions($message){
|
9 |
-
Mage::log($message, null, "lightspeedOptions.log");
|
10 |
}
|
11 |
|
12 |
-
public function importTaxClasses(){
|
13 |
$customerName = Mage::getStoreConfig('lightspeed_settings/lightspeed_sync/lightspeed_customer_tax');
|
14 |
$country = Mage::getStoreConfig('general/country/default');
|
15 |
|
16 |
$apiHelper = Mage::helper('lightspeed_syncproducts/api');
|
17 |
$taxClasses = $apiHelper->getTaxClasses();
|
18 |
|
19 |
-
//Check to see if lightspeed customer class already exists
|
20 |
$lightSpeedCustomerClass = Mage::getModel('tax/class')
|
21 |
->getCollection()
|
22 |
->addFieldToFilter('class_name', $customerName)
|
23 |
->load()
|
24 |
->getFirstItem();
|
25 |
|
26 |
-
if(!$lightSpeedCustomerClass->getId()){
|
27 |
$lightSpeedCustomerClass = Mage::getModel('tax/class')
|
28 |
-
->setData(
|
29 |
-
array(
|
30 |
-
'class_name' => $customerName,
|
31 |
-
'class_type' => 'CUSTOMER'
|
32 |
-
)
|
33 |
-
)
|
34 |
->save();
|
35 |
}
|
36 |
|
37 |
-
foreach($taxClasses as $taxClass){
|
38 |
$taxRate = Mage::getModel('tax/calculation_rate')
|
39 |
->getCollection()
|
40 |
->addFieldToFilter('code', $taxClass->id)
|
41 |
->load()
|
42 |
->getFirstItem();
|
43 |
|
44 |
-
if(!$taxRate->getId()){
|
45 |
$taxRate = Mage::getModel('tax/calculation_rate')
|
46 |
->setData(
|
47 |
array(
|
@@ -81,150 +76,243 @@ class Lightspeed_Syncproducts_Helper_Import extends Mage_Core_Helper_Abstract{
|
|
81 |
}
|
82 |
}
|
83 |
|
84 |
-
public function importCategories(){
|
85 |
$syncHelper = Mage::helper('lightspeed_syncproducts/syncProcess');
|
86 |
$this->log('Start importing categories');
|
87 |
$categories = $syncHelper->getProductGroups();
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
$
|
93 |
-
foreach($categories as $category){
|
94 |
$magentoCategory = null;
|
95 |
-
$this->log('Start importing category '
|
96 |
$magentoCategories = $this->getMagentoCategory($category["id"], $category["name"]);
|
97 |
-
if(isset($magentoCategories) && count($magentoCategories) == 1){
|
98 |
$magentoCategory = $magentoCategories[0];
|
99 |
-
$magentoCategory->setPath($
|
100 |
$this->log('Found magento category');
|
101 |
-
} else if(isset($magentoCategories) && count($magentoCategories) > 0){
|
102 |
-
foreach($magentoCategories as $c){
|
103 |
$magentoCategory = $c;
|
104 |
-
if($c->posiosId == $category["id"]){
|
105 |
break;
|
106 |
}
|
107 |
}
|
108 |
-
$magentoCategory->setPath($
|
109 |
-
$magentoCategory->setPath($
|
110 |
$this->log('Found magento category');
|
111 |
-
}
|
112 |
-
|
113 |
-
$this->log('Did not find magento category');
|
114 |
|
115 |
$magentoCategory = Mage::getModel('catalog/category');
|
116 |
-
$magentoCategory->setPath($
|
117 |
}
|
118 |
|
119 |
$magentoCategory->setName($this->decodeName($category["name"]))
|
120 |
-
->setIsActive(1)
|
121 |
->setDisplayMode('PRODUCTS')
|
122 |
->setIsAnchor(1)
|
123 |
->setCustomDesignApply(1);
|
124 |
$this->log('Adding posios id');
|
125 |
$magentoCategory->setData("posiosId", $category["id"]);
|
126 |
$magentoCategory->save();
|
127 |
-
$this->log('Magento category saved');
|
128 |
$this->importProducts(intval($category["id"]), intval($magentoCategory->getId()));
|
129 |
}
|
|
|
130 |
}
|
131 |
|
132 |
-
public function
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
133 |
$syncHelper = Mage::helper('lightspeed_syncproducts/syncProcess');
|
134 |
-
|
135 |
-
|
|
|
136 |
$productIds = $allProducts[$categoryId];
|
137 |
-
$taxClasses = array();
|
138 |
-
$mediaApi = Mage::getModel("catalog/product_attribute_media_api");
|
139 |
-
$taxInclusivePrices = (Mage::getStoreConfig('lightspeed_settings/lightspeed_sync/lightspeed_use_tax_inclusive') == '1');
|
140 |
-
$useModifiers = (Mage::getStoreConfig('lightspeed_settings/lightspeed_sync/lightspeed_import_modifiers') == '1');
|
141 |
-
foreach($productIds as $productId){
|
142 |
-
$product = $syncHelper->getProduct($productId);
|
143 |
-
|
144 |
-
$taxClassId = null;
|
145 |
-
if(!isset($product->taxClass)){
|
146 |
-
$product->taxClass = "BUILTIN-21.00";
|
147 |
-
}
|
148 |
-
if(!array_key_exists($product->taxClass, $taxClasses)){
|
149 |
-
$taxClassId = Mage::getModel('tax/class')
|
150 |
-
->getCollection()
|
151 |
-
->addFieldToFilter('class_name', $product->taxClass)
|
152 |
-
->load()
|
153 |
-
->getFirstItem()
|
154 |
-
->getId();
|
155 |
-
$taxClasses[$product->taxClass] = $taxClassId;
|
156 |
-
} else {
|
157 |
-
$taxClassId = $taxClasses[$product->taxClass];
|
158 |
-
}
|
159 |
|
160 |
-
|
161 |
-
$
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
$magentoProduct = Mage::getModel('catalog/product')->load($p->getId());
|
167 |
-
if($p->posiosId == $productId){
|
168 |
-
break;
|
169 |
-
}
|
170 |
-
}
|
171 |
-
} else {
|
172 |
-
$magentoProduct = Mage::getModel('catalog/product');
|
173 |
-
$magentoProduct->setVisibility(4);
|
174 |
-
$magentoProduct->setStatus(1);
|
175 |
-
$magentoProduct->setWebsiteIds(array(1));
|
176 |
-
}
|
177 |
-
$stockData = array(
|
178 |
-
'manage_stock' => 0
|
179 |
-
);
|
180 |
-
$magentoProduct->setStockData($stockData);
|
181 |
-
$magentoProduct->setAttributeSetId($magentoProduct->getDefaultAttributeSetId());
|
182 |
-
$magentoProduct->setSku($product->sku);
|
183 |
-
$magentoProduct->setTypeId('simple');
|
184 |
-
$magentoProduct->setName($product->name);
|
185 |
-
$magentoProduct->setDescription($product->info);
|
186 |
-
$magentoProduct->setShortDescription($product->info);
|
187 |
-
$magentoProduct->setCategoryIds(array($magentoCategoryId));
|
188 |
-
$magentoProduct->setPrice($this->getPrice($product, $taxInclusivePrices));
|
189 |
-
$magentoProduct->setWeight(0);
|
190 |
-
$magentoProduct->setTaxClassId($taxClassId);
|
191 |
-
$magentoProduct->setCreatedAt(strtotime('now'));
|
192 |
-
$magentoProduct->setData("posiosId", $productId);
|
193 |
-
|
194 |
-
if($product->imageLocation != ""){
|
195 |
-
$magentoProduct->getOptionInstance()->unsetOptions();
|
196 |
-
$this->deleteImages($magentoProduct, $mediaApi);
|
197 |
-
$destinationName = "imgprod_" . $productId ."_".strtotime('now').".".pathinfo($product->imageLocation, PATHINFO_EXTENSION);;
|
198 |
-
$imgImportDir = Mage::getBaseDir('media') . DS . 'import';
|
199 |
-
if (!file_exists($imgImportDir)) {
|
200 |
-
mkdir($imgImportDir, 0755, true);
|
201 |
-
}
|
202 |
-
$destinationPath = $imgImportDir.DS.$destinationName;
|
203 |
-
if(!file_exists($destinationPath)){
|
204 |
-
$imageLocation = $product->imageLocation;
|
205 |
-
$this->downloadFile($imageLocation, $destinationPath);
|
206 |
-
}
|
207 |
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
|
212 |
-
|
213 |
-
|
214 |
-
|
|
|
215 |
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
222 |
}
|
223 |
}
|
224 |
|
225 |
-
private function
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
226 |
$priceField = Mage::helper('lightspeed_syncproducts/syncProcess')->getPriceField();
|
227 |
-
if($
|
|
|
|
|
|
|
|
|
|
|
|
|
228 |
return $product->{$priceField};
|
229 |
} else {
|
230 |
$priceField .= "WithoutVat";
|
@@ -232,65 +320,310 @@ class Lightspeed_Syncproducts_Helper_Import extends Mage_Core_Helper_Abstract{
|
|
232 |
}
|
233 |
}
|
234 |
|
235 |
-
private function
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
236 |
$products = $categories = Mage::getModel('catalog/product')
|
237 |
->getCollection()
|
238 |
->addAttributeToSelect('*')
|
239 |
-
->addFieldToFilter(array(array('attribute'=>'posiosId','eq'
|
240 |
|
241 |
$ret = array();
|
242 |
|
243 |
-
foreach($products as $product){
|
244 |
$ret[] = $product;
|
245 |
}
|
|
|
246 |
return $ret;
|
247 |
}
|
248 |
|
249 |
-
|
250 |
-
private function getMagentoCategory($posiosId, $name){
|
251 |
-
|
252 |
$categories = Mage::getModel('catalog/category')
|
253 |
->getCollection()
|
254 |
->addAttributeToSelect('*')
|
255 |
->addIsActiveFilter()
|
256 |
-
->addFieldToFilter(array(array('attribute'=>'posiosId','eq'
|
257 |
|
258 |
$ret = array();
|
259 |
-
|
260 |
-
foreach($categories as $category){
|
261 |
$ret[] = $category;
|
262 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
263 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
264 |
return $ret;
|
265 |
}
|
266 |
|
267 |
-
public function syncCustomers($syncField){
|
268 |
$magentoCustomers = $this->getMagentoCustomers($syncField);
|
269 |
-
foreach($magentoCustomers as $magentoCustomer){
|
270 |
$this->importCustomer($magentoCustomer, null, null, null);
|
271 |
}
|
272 |
}
|
273 |
|
274 |
-
public function importCustomer($magentoCustomer, $billingAddress, $shippingAddress, $establishmentId){
|
275 |
-
$customer = array();
|
276 |
|
277 |
-
if(!isset($billingAddress)){
|
278 |
$billingAddress = Mage::getModel('customer/address')->load($magentoCustomer->getData("default_billing"));
|
279 |
}
|
280 |
|
281 |
-
if(!isset($shippingAddress)){
|
282 |
$shippingAddress = Mage::getModel('customer/address')->load($magentoCustomer->getData("default_shipping"));
|
283 |
}
|
284 |
|
285 |
-
if(!isset($billingAddress)){
|
286 |
$billingAddress = $shippingAddress;
|
287 |
}
|
288 |
|
289 |
-
if(!isset($shippingAddress)){
|
290 |
$shippingAddress = $billingAddress;
|
291 |
}
|
292 |
|
293 |
-
|
294 |
$customer["firstName"] = $magentoCustomer->getData("firstname");
|
295 |
$customer["lastName"] = $magentoCustomer->getData("lastname");
|
296 |
$customer["email"] = $magentoCustomer->getData("email");
|
@@ -311,34 +644,33 @@ class Lightspeed_Syncproducts_Helper_Import extends Mage_Core_Helper_Abstract{
|
|
311 |
|
312 |
$posiosId = $magentoCustomer->getData('posiosId');
|
313 |
$apiHelper = Mage::helper('lightspeed_syncproducts/api');
|
314 |
-
if(isset($posiosId)){
|
315 |
-
if(isset($establishmentId)){
|
316 |
$apiHelper->saveCustomer($customer, $posiosId, null);
|
317 |
-
$establishmentCustomer= $apiHelper->getCustomer($posiosId, $establishmentId);
|
318 |
$apiHelper->saveCustomer($customer, $establishmentCustomer->id, $establishmentId);
|
319 |
$posiosId = $establishmentCustomer->id;
|
320 |
} else {
|
321 |
-
$customer["id"] = (int)$posiosId;
|
322 |
$apiHelper->saveCustomer($customer, $posiosId, null);
|
323 |
}
|
324 |
} else {
|
325 |
$posiosId = $apiHelper->createCustomer($customer, null);
|
326 |
-
$magentoCustomer->setData('posiosId', (int)$posiosId);
|
327 |
-
$magentoCustomer->getResource()->saveAttribute($magentoCustomer,'posiosId');
|
328 |
-
if(isset($establishmentId)){
|
329 |
-
$establishmentCustomer= $apiHelper->getCustomer($posiosId, $establishmentId);
|
330 |
$posiosId = $establishmentCustomer->id;
|
331 |
}
|
332 |
}
|
333 |
return $posiosId;
|
334 |
}
|
335 |
-
|
336 |
-
private function getCustomerIdForEstablishment($attributeValue, $establishmentId){
|
337 |
$this->log('Parsing establishment posios id...');
|
338 |
-
if(strpos($attributeValue, (
|
339 |
$this->log('Establishment id found...');
|
340 |
-
preg_match('/'
|
341 |
-
if(count($matches) > 0){
|
342 |
return $matches[1];
|
343 |
} else {
|
344 |
return false;
|
@@ -347,10 +679,8 @@ class Lightspeed_Syncproducts_Helper_Import extends Mage_Core_Helper_Abstract{
|
|
347 |
$this->log('Establishment id not found...');
|
348 |
return false;
|
349 |
}
|
350 |
-
|
351 |
}
|
352 |
-
|
353 |
-
private function downloadFile($url, $fullPath){
|
354 |
$fp = fopen($fullPath, 'w');
|
355 |
$ch = curl_init($url);
|
356 |
curl_setopt($ch, CURLOPT_FILE, $fp);
|
@@ -359,25 +689,21 @@ class Lightspeed_Syncproducts_Helper_Import extends Mage_Core_Helper_Abstract{
|
|
359 |
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookies');
|
360 |
$data = curl_exec($ch);
|
361 |
|
362 |
-
if(fwrite($fp
|
363 |
-
{
|
364 |
return true;
|
365 |
-
}
|
366 |
-
else
|
367 |
-
{
|
368 |
return false;
|
369 |
}
|
370 |
}
|
371 |
-
|
372 |
-
|
373 |
-
$this->log('Parse street '.print_r($street, true));
|
374 |
$arr = is_array($street) ? $street : explode("\n", $street);
|
375 |
$street = implode(" ", $arr);
|
376 |
|
377 |
-
$result = array();
|
378 |
$lastSpacePosition = strrpos($street, " ");
|
379 |
-
if($lastSpacePosition > 0){
|
380 |
-
$number = substr($street, $lastSpacePosition+1);
|
381 |
$street = substr($street, 0, $lastSpacePosition);
|
382 |
} else {
|
383 |
$number = $street;
|
@@ -387,41 +713,43 @@ class Lightspeed_Syncproducts_Helper_Import extends Mage_Core_Helper_Abstract{
|
|
387 |
$result[0] = $street;
|
388 |
$result[1] = $number;
|
389 |
|
390 |
-
if(!isset($result[0])){
|
391 |
$result[0] = "";
|
392 |
}
|
393 |
|
394 |
-
if(!isset($result[1])){
|
395 |
$result[1] = "";
|
396 |
}
|
397 |
|
398 |
-
$this->log('Parsed street '.print_r($result, true));
|
399 |
return $result;
|
400 |
}
|
401 |
-
|
402 |
-
|
403 |
-
|
404 |
-
->
|
405 |
-
|
406 |
-
|
407 |
-
|
408 |
-
|
409 |
-
|
|
|
|
|
|
|
|
|
410 |
}
|
411 |
-
$ret = array();
|
412 |
-
foreach($users as $user){
|
413 |
$ret[] = $user;
|
414 |
}
|
415 |
return $ret;
|
416 |
}
|
417 |
-
|
418 |
-
private function decodeName($name){
|
419 |
$name = str_replace('@', ' ', $name);
|
420 |
$name = str_replace('!', '.', $name);
|
421 |
return $name;
|
422 |
}
|
423 |
-
|
424 |
-
private function addModifications($magentoProduct, $lightspeedProduct, $taxInclusivePrices){
|
425 |
$store = Mage::app()->getStore('default');
|
426 |
$taxCalculation = Mage::getModel('tax/calculation');
|
427 |
$request = $taxCalculation->getRateRequest(null, null, null, $store);
|
@@ -434,8 +762,8 @@ class Lightspeed_Syncproducts_Helper_Import extends Mage_Core_Helper_Abstract{
|
|
434 |
$oldOptions = $magentoProduct->getOptions();
|
435 |
$optionsToDelete = null;
|
436 |
if (count($oldOptions) > 0) {
|
437 |
-
$optionsToDelete = array();
|
438 |
-
foreach($oldOptions as $option){
|
439 |
$optionsData = $option->getData();
|
440 |
$optionsData['is_delete'] = '1';
|
441 |
$optionsToDelete[] = $optionsData;
|
@@ -445,9 +773,9 @@ class Lightspeed_Syncproducts_Helper_Import extends Mage_Core_Helper_Abstract{
|
|
445 |
|
446 |
$optionInstance = $magentoProduct->getOptionInstance()->unsetOptions();
|
447 |
|
448 |
-
$index
|
449 |
$sku = $lightspeedProduct->sku;
|
450 |
-
foreach($lightspeedProduct->additions as $addition){
|
451 |
$index2 = 0;
|
452 |
$option = array(
|
453 |
'title' => $addition->name,
|
@@ -466,9 +794,9 @@ class Lightspeed_Syncproducts_Helper_Import extends Mage_Core_Helper_Abstract{
|
|
466 |
'sku' => $addition->id
|
467 |
);
|
468 |
} else {
|
469 |
-
foreach($addition->values as $additionValue){
|
470 |
$price = $additionValue->price;
|
471 |
-
if(!$taxInclusivePrices){
|
472 |
$price -= $taxCalculation->calcTaxAmount($additionValue->price, $percent, true, false);
|
473 |
}
|
474 |
$option['values'][] = array(
|
@@ -486,65 +814,32 @@ class Lightspeed_Syncproducts_Helper_Import extends Mage_Core_Helper_Abstract{
|
|
486 |
}
|
487 |
$magentoProduct->setOptionInstance($optionInstance);
|
488 |
}
|
489 |
-
|
490 |
-
|
491 |
-
if(!isset($option->values) || count($option->values) == 0){
|
492 |
return 'area';
|
493 |
-
} elseif($option->multiselect){
|
494 |
return 'multiple';
|
495 |
} else {
|
496 |
return 'drop_down';
|
497 |
}
|
498 |
}
|
499 |
-
|
500 |
-
|
501 |
-
if(!isset($option->values) || count($option->values) == 0){
|
502 |
return false;
|
503 |
-
}else if(!$option->multiselect){
|
504 |
return true;
|
505 |
} else {
|
506 |
return $option->minSelectedAmount > 0;
|
507 |
}
|
508 |
}
|
509 |
|
510 |
-
private function
|
511 |
-
|
512 |
-
$apiHelper = Mage::helper('lightspeed_syncproducts/api');
|
513 |
-
$subProducts = $apiHelper->getSubProducts($lightspeedProduct->id);
|
514 |
-
|
515 |
-
$ret = array();
|
516 |
-
|
517 |
-
foreach ($subProducts as $subProduct) {
|
518 |
-
$sub = $syncHelper->getProduct($subProduct->id);
|
519 |
-
if (!$sub) {
|
520 |
-
$sub = $apiHelper->getProduct($subProduct->id);
|
521 |
-
}
|
522 |
-
if (array_key_exists($magentoCategoryId, $sub->groupIds)) {
|
523 |
-
$subCategoryId = $magentoCategoryId;
|
524 |
-
} else {
|
525 |
-
$lightspeedCategory = $syncHelper->getProductGroup($sub->groupIds[0]);
|
526 |
-
if (!$lightspeedCategory) {
|
527 |
-
$lightspeedCategory = $apiHelper->getProductGroup($sub->groupIds[0]);
|
528 |
-
$subCategory = $this->importCategory(array('id' => $lightspeedCategory->id, 'name' => $lightspeedCategory->name));
|
529 |
-
} else {
|
530 |
-
$subCategory = $this->importCategory($lightspeedCategory);
|
531 |
-
}
|
532 |
-
$subCategoryId = $subCategory->getId();
|
533 |
-
}
|
534 |
-
$magentoSubProduct = $this->createProduct($sub, $this->getTaxClassId($sub, $taxClasses), $subCategoryId);
|
535 |
-
$ret[] = array('magento' => $magentoSubProduct, 'lightspeed' => $sub);
|
536 |
-
}
|
537 |
-
return $ret;
|
538 |
-
}
|
539 |
-
|
540 |
-
private function deleteImages ($magentoProduct, $mediaApi){
|
541 |
-
if($magentoProduct->getId()){
|
542 |
$items = $mediaApi->items($magentoProduct->getId());
|
543 |
-
foreach($items as $item) {
|
544 |
$mediaApi->remove($magentoProduct->getId(), $item['file']);
|
545 |
}
|
546 |
}
|
547 |
-
|
548 |
}
|
549 |
|
550 |
public function reorder($orderId) {
|
@@ -571,15 +866,8 @@ class Lightspeed_Syncproducts_Helper_Import extends Mage_Core_Helper_Abstract{
|
|
571 |
|
572 |
$reOrderId = $newOrder->getId();
|
573 |
return $reOrderId;
|
574 |
-
|
575 |
} catch (Exception $e) {
|
576 |
-
Mage::log("Order #{$incId} Reorder Error : {$e->getMessage()}",null,"reorder.log");
|
577 |
}
|
578 |
}
|
579 |
-
|
580 |
-
|
581 |
-
|
582 |
-
|
583 |
-
|
584 |
-
|
585 |
}
|
1 |
<?php
|
|
|
2 |
|
3 |
+
class Lightspeed_Syncproducts_Helper_Import extends Mage_Core_Helper_Abstract {
|
4 |
+
private function log($message) {
|
5 |
+
Mage::log($message, null, "lightspeed.log", true);
|
6 |
}
|
7 |
|
8 |
+
private function logOptions($message) {
|
9 |
+
Mage::log($message, null, "lightspeedOptions.log", true);
|
10 |
}
|
11 |
|
12 |
+
public function importTaxClasses() {
|
13 |
$customerName = Mage::getStoreConfig('lightspeed_settings/lightspeed_sync/lightspeed_customer_tax');
|
14 |
$country = Mage::getStoreConfig('general/country/default');
|
15 |
|
16 |
$apiHelper = Mage::helper('lightspeed_syncproducts/api');
|
17 |
$taxClasses = $apiHelper->getTaxClasses();
|
18 |
|
19 |
+
// Check to see if lightspeed customer class already exists
|
20 |
$lightSpeedCustomerClass = Mage::getModel('tax/class')
|
21 |
->getCollection()
|
22 |
->addFieldToFilter('class_name', $customerName)
|
23 |
->load()
|
24 |
->getFirstItem();
|
25 |
|
26 |
+
if (!$lightSpeedCustomerClass->getId()) {
|
27 |
$lightSpeedCustomerClass = Mage::getModel('tax/class')
|
28 |
+
->setData(array('class_name' => $customerName, 'class_type' => 'CUSTOMER'))
|
|
|
|
|
|
|
|
|
|
|
29 |
->save();
|
30 |
}
|
31 |
|
32 |
+
foreach ($taxClasses as $taxClass) {
|
33 |
$taxRate = Mage::getModel('tax/calculation_rate')
|
34 |
->getCollection()
|
35 |
->addFieldToFilter('code', $taxClass->id)
|
36 |
->load()
|
37 |
->getFirstItem();
|
38 |
|
39 |
+
if (!$taxRate->getId()) {
|
40 |
$taxRate = Mage::getModel('tax/calculation_rate')
|
41 |
->setData(
|
42 |
array(
|
76 |
}
|
77 |
}
|
78 |
|
79 |
+
public function importCategories() {
|
80 |
$syncHelper = Mage::helper('lightspeed_syncproducts/syncProcess');
|
81 |
$this->log('Start importing categories');
|
82 |
$categories = $syncHelper->getProductGroups();
|
83 |
+
|
84 |
+
$parentCategory = $this->getParentCategory();
|
85 |
+
$parentCategoryPath = $parentCategory->getPath();
|
86 |
+
|
87 |
+
foreach ($categories as $category) {
|
|
|
88 |
$magentoCategory = null;
|
89 |
+
$this->log('Start importing category: ' . $category["name"]);
|
90 |
$magentoCategories = $this->getMagentoCategory($category["id"], $category["name"]);
|
91 |
+
if (isset($magentoCategories) && count($magentoCategories) == 1) {
|
92 |
$magentoCategory = $magentoCategories[0];
|
93 |
+
$magentoCategory->setPath($parentCategoryPath . '/' . $magentoCategory->getId());
|
94 |
$this->log('Found magento category');
|
95 |
+
} else if (isset($magentoCategories) && count($magentoCategories) > 0) {
|
96 |
+
foreach ($magentoCategories as $c) {
|
97 |
$magentoCategory = $c;
|
98 |
+
if ($c->posiosId == $category["id"]) {
|
99 |
break;
|
100 |
}
|
101 |
}
|
102 |
+
$magentoCategory->setPath($parentCategoryPath);
|
103 |
+
$magentoCategory->setPath($parentCategoryPath . '/' . $magentoCategory->getId());
|
104 |
$this->log('Found magento category');
|
105 |
+
} else {
|
106 |
+
$this->log('Did not find magento category: ' . $category["name"] . '. ParentCategoryPath: ' . $parentCategoryPath);
|
|
|
107 |
|
108 |
$magentoCategory = Mage::getModel('catalog/category');
|
109 |
+
$magentoCategory->setPath($parentCategoryPath);
|
110 |
}
|
111 |
|
112 |
$magentoCategory->setName($this->decodeName($category["name"]))
|
113 |
+
->setIsActive(1) // activate your category
|
114 |
->setDisplayMode('PRODUCTS')
|
115 |
->setIsAnchor(1)
|
116 |
->setCustomDesignApply(1);
|
117 |
$this->log('Adding posios id');
|
118 |
$magentoCategory->setData("posiosId", $category["id"]);
|
119 |
$magentoCategory->save();
|
|
|
120 |
$this->importProducts(intval($category["id"]), intval($magentoCategory->getId()));
|
121 |
}
|
122 |
+
|
123 |
}
|
124 |
|
125 |
+
public function getParentCategory() {
|
126 |
+
$parentCategoryId = Mage::getStoreConfig('lightspeed_settings/lightspeed_sync/lightspeed_parent_category');
|
127 |
+
|
128 |
+
if (!isset($parentCategoryId) || ((int) $parentCategoryId) == -1) {
|
129 |
+
$parentCategoryId = 2;
|
130 |
+
}
|
131 |
+
|
132 |
+
$parentCategory = Mage::getModel('catalog/category')->load((int) $parentCategoryId);
|
133 |
+
|
134 |
+
return $parentCategory;
|
135 |
+
}
|
136 |
+
|
137 |
+
public function importCategory($category) {
|
138 |
+
$magentoCategory = null;
|
139 |
+
|
140 |
+
$magentoCategory = Mage::getModel('catalog/category');
|
141 |
+
|
142 |
+
$parentCategory = $this->getParentCategory();
|
143 |
+
$magentoCategory->setPath($parentCategory->getPath());
|
144 |
+
|
145 |
+
$magentoCategory->setName($this->decodeName($category["name"]))
|
146 |
+
->setIsActive(1) // activate your category
|
147 |
+
->setDisplayMode('PRODUCTS')
|
148 |
+
->setIsAnchor(1)
|
149 |
+
->setCustomDesignApply(1);
|
150 |
+
|
151 |
+
$this->log('Adding posios id');
|
152 |
+
$magentoCategory->setData("posiosId", $category["id"]);
|
153 |
+
|
154 |
+
try {
|
155 |
+
$magentoCategory->save();
|
156 |
+
} catch (Exception $e) {
|
157 |
+
$magentoCategory->getResource()->save($magentoCategory);
|
158 |
+
}
|
159 |
+
|
160 |
+
return $magentoCategory;
|
161 |
+
}
|
162 |
+
|
163 |
+
public function importProducts($categoryId, $magentoCategoryId) {
|
164 |
$syncHelper = Mage::helper('lightspeed_syncproducts/syncProcess');
|
165 |
+
$allProducts = $syncHelper->getProductIds();
|
166 |
+
|
167 |
+
if (array_key_exists($categoryId, $allProducts)) {
|
168 |
$productIds = $allProducts[$categoryId];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
169 |
|
170 |
+
foreach ($productIds as $productId) {
|
171 |
+
$this->createProduct($productId, $magentoCategoryId);
|
172 |
+
}
|
173 |
+
$this->reindexPrice();
|
174 |
+
}
|
175 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
176 |
|
177 |
+
private function createProduct($productId, $magentoCategoryId) {
|
178 |
+
$syncHelper = Mage::helper('lightspeed_syncproducts/syncProcess');
|
179 |
+
$product = $syncHelper->getProduct($productId);
|
180 |
|
181 |
+
if (!$product) {
|
182 |
+
$apiHelper = Mage::helper('lightspeed_syncproducts/api');
|
183 |
+
$product = $apiHelper->getProduct($productId);
|
184 |
+
}
|
185 |
|
186 |
+
$taxInclusivePrices = (Mage::getStoreConfig('lightspeed_settings/lightspeed_sync/lightspeed_use_tax_inclusive') == '1');
|
187 |
+
$useModifiers = (Mage::getStoreConfig('lightspeed_settings/lightspeed_sync/lightspeed_import_modifiers') == '1');
|
188 |
+
|
189 |
+
$magentoProduct = $this->createMagentoProduct($product, $magentoCategoryId, $taxInclusivePrices);
|
190 |
+
|
191 |
+
if ($product->productType == "CHOICE") {
|
192 |
+
$this->createChoice($magentoProduct, $productId);
|
193 |
+
$magentoProduct->setPriceType(0);
|
194 |
+
}
|
195 |
+
|
196 |
+
if ($product->productType == "GROUP") {
|
197 |
+
$this->createGroup($magentoProduct, $productId);
|
198 |
+
$magentoProduct->setPriceType(0);
|
199 |
+
}
|
200 |
+
|
201 |
+
if ($product->imageLocation != "") {
|
202 |
+
$this->getImageForProduct($product, $magentoProduct, $productId);
|
203 |
+
}
|
204 |
+
|
205 |
+
if ($useModifiers && isset($product->additions) && count($product->additions) > 0) {
|
206 |
+
$this->addModifications($magentoProduct, $product, $taxInclusivePrices);
|
207 |
+
}
|
208 |
+
|
209 |
+
$this->reindexPrice();
|
210 |
+
|
211 |
+
try {
|
212 |
+
$magentoProduct->save();
|
213 |
+
} catch (Exception $e) {
|
214 |
+
$magentoProduct->getResource()->save($magentoProduct);
|
215 |
}
|
216 |
}
|
217 |
|
218 |
+
private function getTaxClassId($product) {
|
219 |
+
$taxClassId = null;
|
220 |
+
$taxClasses = array ();
|
221 |
+
$taxClass = $this->getTaxClass();
|
222 |
+
|
223 |
+
if (!isset($product->taxClass)) {
|
224 |
+
$product->taxClass = "BUILTIN-21.00";
|
225 |
+
}
|
226 |
+
if (!array_key_exists($product->{$taxClass}, $taxClasses)) {
|
227 |
+
$taxClassId = Mage::getModel('tax/class')
|
228 |
+
->getCollection()
|
229 |
+
->addFieldToFilter('class_name', $product->{$taxClass})
|
230 |
+
->load()
|
231 |
+
->getFirstItem()
|
232 |
+
->getId();
|
233 |
+
$taxClasses[$product->{$taxClass}] = $taxClassId;
|
234 |
+
} else {
|
235 |
+
$taxClassId = $taxClasses[$product->{$taxClass}];
|
236 |
+
}
|
237 |
+
return $taxClassId;
|
238 |
+
}
|
239 |
+
|
240 |
+
private function createMagentoProduct($product, $magentoCategoryId, $taxInclusivePrices) {
|
241 |
+
$this->log("Create magento product with categoryId: " . $magentoCategoryId);
|
242 |
+
$productId = $product->id;
|
243 |
+
$taxClassId = $this->getTaxClassId($product);
|
244 |
+
|
245 |
+
$magentoProducts = $this->getMagentoProduct($productId);
|
246 |
+
|
247 |
+
$magentoProduct = null;
|
248 |
+
if (isset($magentoProducts) && count($magentoProducts) > 0) {
|
249 |
+
$magentoProduct = Mage::getModel('catalog/product')->load($magentoProducts[0]->getId());
|
250 |
+
} else {
|
251 |
+
$this->log('No magento products found');
|
252 |
+
$magentoProduct = Mage::getModel('catalog/product');
|
253 |
+
$magentoProduct->setVisibility(4);
|
254 |
+
$magentoProduct->setStatus(1);
|
255 |
+
$magentoProduct->setWebsiteIds(array(1));
|
256 |
+
}
|
257 |
+
|
258 |
+
$stockData = array('manage_stock' => 0);
|
259 |
+
$magentoProduct->setStockData($stockData);
|
260 |
+
$magentoProduct->setAttributeSetId($magentoProduct->getDefaultAttributeSetId());
|
261 |
+
$magentoProduct->setSku($product->sku);
|
262 |
+
$magentoProduct->setTypeId('simple');
|
263 |
+
$magentoProduct->setName($product->name);
|
264 |
+
$magentoProduct->setDescription($product->info);
|
265 |
+
$magentoProduct->setShortDescription($product->info);
|
266 |
+
$magentoProduct->setCategoryIds(array($magentoCategoryId));
|
267 |
+
|
268 |
+
if ($product->productType != "CHOICE") {
|
269 |
+
$magentoProduct->setPrice($this->getPrice($product, $taxInclusivePrices));
|
270 |
+
$magentoProduct->setTaxClassId($taxClassId);
|
271 |
+
}
|
272 |
+
|
273 |
+
$magentoProduct->setWeight(0);
|
274 |
+
$magentoProduct->setCreatedAt(strtotime('now'));
|
275 |
+
$magentoProduct->setData("posiosId", $productId);
|
276 |
+
|
277 |
+
return $magentoProduct;
|
278 |
+
}
|
279 |
+
|
280 |
+
private function getImageForProduct($product, $magentoProduct, $productId) {
|
281 |
+
$mediaApi = Mage::getModel("catalog/product_attribute_media_api");
|
282 |
+
$magentoProduct->getOptionInstance()->unsetOptions();
|
283 |
+
$this->deleteImages($magentoProduct, $mediaApi);
|
284 |
+
$destinationName = "imgprod_" . $productId . "_" . strtotime('now') . "." . pathinfo($product->imageLocation, PATHINFO_EXTENSION);
|
285 |
+
|
286 |
+
$imgImportDir = Mage::getBaseDir('media') . DS . 'import';
|
287 |
+
if (!file_exists($imgImportDir)) {
|
288 |
+
mkdir($imgImportDir, 0755, true);
|
289 |
+
}
|
290 |
+
$destinationPath = $imgImportDir . DS . $destinationName;
|
291 |
+
if (!file_exists($destinationPath)) {
|
292 |
+
$imageLocation = $product->imageLocation;
|
293 |
+
$this->downloadFile($imageLocation, $destinationPath);
|
294 |
+
}
|
295 |
+
|
296 |
+
$magentoProduct->setMediaGallery(array (
|
297 |
+
'images' => array (),
|
298 |
+
'values' => array ()
|
299 |
+
));
|
300 |
+
$magentoProduct->addImageToMediaGallery($destinationPath, array (
|
301 |
+
'image',
|
302 |
+
'small_image',
|
303 |
+
'thumbnail'
|
304 |
+
), false, false);
|
305 |
+
}
|
306 |
+
|
307 |
+
private function getPrice($product, $vatIncl) {
|
308 |
$priceField = Mage::helper('lightspeed_syncproducts/syncProcess')->getPriceField();
|
309 |
+
if ($priceField == "normal") {
|
310 |
+
$priceField = "price";
|
311 |
+
} else {
|
312 |
+
$priceField .= "Price";
|
313 |
+
}
|
314 |
+
|
315 |
+
if ($vatIncl) {
|
316 |
return $product->{$priceField};
|
317 |
} else {
|
318 |
$priceField .= "WithoutVat";
|
320 |
}
|
321 |
}
|
322 |
|
323 |
+
private function getTaxClass() {
|
324 |
+
$priceField = Mage::helper('lightspeed_syncproducts/syncProcess')->getPriceField();
|
325 |
+
if ($priceField == "normal") {
|
326 |
+
return "taxClass";
|
327 |
+
}
|
328 |
+
|
329 |
+
return $priceField . "TaxClass";
|
330 |
+
}
|
331 |
+
|
332 |
+
private function createChoice($magentoProduct, $productId){
|
333 |
+
$subProducts = $this->createSubProducts($productId);
|
334 |
+
$bundleInfo = array('name' => 'Options', 'values' => array());
|
335 |
+
|
336 |
+
foreach($subProducts as $subProduct){
|
337 |
+
if($subProduct['lightspeed']->productType != 'CHOICE' && $subProduct['lightspeed']->productType != 'GROUP'){
|
338 |
+
$bundleInfo['values'][] = $subProduct['magento'];
|
339 |
+
}
|
340 |
+
}
|
341 |
+
|
342 |
+
$bundle = $this->createBundleOptionsAndSelections(array($bundleInfo));
|
343 |
+
|
344 |
+
$magentoProduct->setTypeId('bundle');
|
345 |
+
|
346 |
+
Mage::unregister('product');
|
347 |
+
Mage::register('product', $magentoProduct);
|
348 |
+
|
349 |
+
$magentoProduct->setCanSaveConfigurableAttributes(false);
|
350 |
+
|
351 |
+
$magentoProduct->setCanSaveCustomOptions(true);
|
352 |
+
$magentoProduct->setCanSaveBundleSelections(true);
|
353 |
+
$magentoProduct->setAffectBundleProductSelections(true);
|
354 |
+
|
355 |
+
$magentoProduct->setBundleOptionsData($bundle['options']);
|
356 |
+
$magentoProduct->setBundleSelectionsData($bundle['selections']);
|
357 |
+
|
358 |
+
try {
|
359 |
+
$magentoProduct->save();
|
360 |
+
} catch (Exception $e) {
|
361 |
+
$magentoProduct->getResource()->save($magentoProduct);
|
362 |
+
}
|
363 |
+
}
|
364 |
+
|
365 |
+
private function reindex() {
|
366 |
+
$indexCollection = Mage::getModel('index/process')->getCollection();
|
367 |
+
foreach ($indexCollection as $index) {
|
368 |
+
$index->reindexAll();
|
369 |
+
}
|
370 |
+
}
|
371 |
+
|
372 |
+
private function reindexPrice() {
|
373 |
+
$process = Mage::getModel('index/process')->load(2);
|
374 |
+
$process->reindexAll();
|
375 |
+
}
|
376 |
+
|
377 |
+
private function reindexItem($product) {
|
378 |
+
$stockItem = mage::getmodel('cataloginventory/stock_item')->loadbyproduct($product->getid());
|
379 |
+
$stockItem->setforcereindexrequired(true);
|
380 |
+
mage::getsingleton('index/indexer')->processEntityAction($stockItem, Mage_CatalogInventory_Model_Stock_Item::ENTITY, Mage_Index_Model_Event::TYPE_SAVE);
|
381 |
+
$product->setforcereindexrequired(true)->setischangedcategories(true);
|
382 |
+
mage::getsingleton('index/indexer')->processEntityAction($product, Mage_Catalog_Model_Product::ENTITY, Mage_Index_Model_Event::TYPE_SAVE);
|
383 |
+
}
|
384 |
+
|
385 |
+
private function createGroup($magentoProduct, $productId) {
|
386 |
+
$subProducts = $this->createSubProducts($productId);
|
387 |
+
|
388 |
+
$bundleInfo = array();
|
389 |
+
|
390 |
+
foreach($subProducts as $subProduct){
|
391 |
+
$bundleTemp = array('name' => $subProduct['lightspeed']->name, 'values' => array());
|
392 |
+
if($subProduct['lightspeed']->productType != 'CHOICE' && $subProduct['lightspeed']->productType != 'GROUP'){
|
393 |
+
$bundleTemp['values'][] = $subProduct['magento'];
|
394 |
+
}
|
395 |
+
$bundleInfo[] = $bundleTemp;
|
396 |
+
}
|
397 |
+
|
398 |
+
$bundle = $this->createBundleOptionsAndSelections($bundleInfo);
|
399 |
+
|
400 |
+
$magentoProduct->setTypeId('bundle');
|
401 |
+
|
402 |
+
Mage::unregister('product');
|
403 |
+
Mage::register('product', $magentoProduct);
|
404 |
+
|
405 |
+
$magentoProduct->setCanSaveConfigurableAttributes(false);
|
406 |
+
|
407 |
+
$magentoProduct->setCanSaveCustomOptions(true);
|
408 |
+
$magentoProduct->setCanSaveBundleSelections(true);
|
409 |
+
$magentoProduct->setAffectBundleProductSelections(true);
|
410 |
+
|
411 |
+
$magentoProduct->setBundleOptionsData($bundle['options']);
|
412 |
+
$magentoProduct->setBundleSelectionsData($bundle['selections']);
|
413 |
+
|
414 |
+
try {
|
415 |
+
$magentoProduct->save();
|
416 |
+
} catch (Exception $e) {
|
417 |
+
$magentoProduct->getResource()->save($magentoProduct);
|
418 |
+
}
|
419 |
+
}
|
420 |
+
|
421 |
+
private function createBundleOptionsAndSelections($options){
|
422 |
+
$bundleOptions = array();
|
423 |
+
$bundleSelections = array();
|
424 |
+
$index = 0;
|
425 |
+
|
426 |
+
foreach($options as $option){
|
427 |
+
$key = strtolower($option['name']);
|
428 |
+
$bundleOptions[$key] = array(
|
429 |
+
'title' => $option['name'],
|
430 |
+
'option_id' => '',
|
431 |
+
'delete' => '',
|
432 |
+
'type' => 'radio',
|
433 |
+
'required' => '1',
|
434 |
+
'position' => $index
|
435 |
+
);
|
436 |
+
$index2 = 0;
|
437 |
+
$bundleSelections[$key] = array();
|
438 |
+
foreach($option['values'] as $product){
|
439 |
+
$bundleSelections[$key][] = array(
|
440 |
+
'product_id' => $product["id"],
|
441 |
+
'selection_id' => '',
|
442 |
+
'delete' => '',
|
443 |
+
'selection_price_value' => $product["price"],
|
444 |
+
'selection_price_type' => 0,
|
445 |
+
'selection_qty' => 1,
|
446 |
+
'selection_can_change_qty' => 0,
|
447 |
+
'position' => $index2,
|
448 |
+
'is_default' => $index2 == 0 ? 1 : 0,
|
449 |
+
'sku' => 'options_'.$index2.'_'.time(),
|
450 |
+
);
|
451 |
+
$index2++;
|
452 |
+
}
|
453 |
+
$index++;
|
454 |
+
}
|
455 |
+
|
456 |
+
return array('options' => $bundleOptions, 'selections' => $bundleSelections);
|
457 |
+
}
|
458 |
+
|
459 |
+
private function createSubProducts($productId) {
|
460 |
+
$syncHelper = Mage::helper('lightspeed_syncproducts/syncProcess');
|
461 |
+
$apiHelper = Mage::helper('lightspeed_syncproducts/api');
|
462 |
+
$subProducts = $apiHelper->getSubProducts($productId);
|
463 |
+
$taxInclusivePrices = (Mage::getStoreConfig('lightspeed_settings/lightspeed_sync/lightspeed_use_tax_inclusive') == '1');
|
464 |
+
|
465 |
+
$allCategories = $apiHelper->getProductGroups();
|
466 |
+
|
467 |
+
$ret = array();
|
468 |
+
|
469 |
+
foreach ($subProducts as $sub) {
|
470 |
+
$subProduct = $syncHelper->getProduct($sub->id);
|
471 |
+
|
472 |
+
if (!$subProduct){
|
473 |
+
$subProduct = $apiHelper->getProduct($sub->id);
|
474 |
+
}
|
475 |
+
|
476 |
+
$subCategory = $this->findCategory($allCategories, $subProduct->groupIds);
|
477 |
+
$magentoSubCategory = $this->getMagentoCategory($subCategory->categoryId, $subCategory->name);
|
478 |
+
|
479 |
+
if (!$magentoSubCategory) {
|
480 |
+
$magentoSubCategory = $this->importCategory(array('id' => $subCategory->id, 'name' => $subCategory->name));
|
481 |
+
}
|
482 |
+
|
483 |
+
// Is sometimes an array sometimes not.
|
484 |
+
if (is_array($magentoSubCategory)) {
|
485 |
+
$magentoSubCategory = $magentoSubCategory[0];
|
486 |
+
}
|
487 |
+
|
488 |
+
$magentoSubProduct = $this->createMagentoProduct($subProduct, $magentoSubCategory->getId(), $taxInclusivePrices);
|
489 |
+
|
490 |
+
try {
|
491 |
+
$magentoSubProduct->save();
|
492 |
+
} catch (Exception $e) {
|
493 |
+
$magentoSubProduct->getResource()->save($magentoSubProduct);
|
494 |
+
}
|
495 |
+
|
496 |
+
$ret[] = array('magento' => array("id" => $magentoSubProduct->getId(), "price" => $magentoSubProduct->getPrice()), 'lightspeed' => $subProduct);
|
497 |
+
}
|
498 |
+
return $ret;
|
499 |
+
}
|
500 |
+
|
501 |
+
private function findCategory($allCategories, $groupIds) {
|
502 |
+
foreach ($groupIds as $id) {
|
503 |
+
foreach ($allCategories as $category) {
|
504 |
+
if (!$category->shortcutCategory && $category->id == $id) {
|
505 |
+
return $category;
|
506 |
+
}
|
507 |
+
}
|
508 |
+
}
|
509 |
+
}
|
510 |
+
|
511 |
+
|
512 |
+
private function createComboSubProducts($productId, $lightspeedProduct, $taxClasses, $magentoCategoryId){
|
513 |
+
$syncHelper = Mage::helper('lightspeed_syncproducts/syncProcess');
|
514 |
+
$apiHelper = Mage::helper('lightspeed_syncproducts/api');
|
515 |
+
$subProducts = $apiHelper->getSubProducts($id);
|
516 |
+
$index = 0;
|
517 |
+
|
518 |
+
$bundleSelections = array();
|
519 |
+
|
520 |
+
foreach($subProducts as $subProduct){
|
521 |
+
$sub = $syncHelper->getProduct($subProduct->id);
|
522 |
+
if(!isset($sub)){
|
523 |
+
$sub = $apiHelper->getProduct($subProduct->id);
|
524 |
+
}
|
525 |
+
if(array_key_exists($magentoCategoryId, $sub->groupIds)){
|
526 |
+
$subCategoryId = $magentoCategoryId;
|
527 |
+
} else {
|
528 |
+
$lightspeedCategory = $syncHelper->getProductgetProductGroup($sub->groupIds[0]);
|
529 |
+
if(!$lightspeedCategory){
|
530 |
+
$lightspeedCategory = $apiHelper->getProductGroup($sub->groupIds[0]);
|
531 |
+
$subCategory = $this->importCategory(array('id' => $lightspeedCategory->id, 'name'=> $lightspeedCategory->name));
|
532 |
+
} else {
|
533 |
+
$subCategory = $this->importCategory($lightspeedCategory);
|
534 |
+
}
|
535 |
+
$subCategoryId = $subCategory->getId();
|
536 |
+
}
|
537 |
+
$magentoSubProduct = $this->createProduct($subCategoryId, $this->getTaxClassId($sub, $taxClasses), $subCategoryId);
|
538 |
+
$bundleSelections[$index] = array();
|
539 |
+
$bundleSelections[$index][] = array(
|
540 |
+
'product_id' => $magentoSubProduct->getId(),
|
541 |
+
'delete' => '',
|
542 |
+
'selection_price_value' => $sub->price,
|
543 |
+
'selection_price_type' => 0,
|
544 |
+
'selection_qty' => 1,
|
545 |
+
'selection_can_change_qty' => 0,
|
546 |
+
'position' => $index,
|
547 |
+
'is_default' => $index == 0 ? 1 : 0,
|
548 |
+
'sku' => 'options_'.$index.'_'.time(),
|
549 |
+
);
|
550 |
+
$index++;
|
551 |
+
}
|
552 |
+
return $bundleSelections;
|
553 |
+
}
|
554 |
+
|
555 |
+
private function getMagentoProduct($id) {
|
556 |
$products = $categories = Mage::getModel('catalog/product')
|
557 |
->getCollection()
|
558 |
->addAttributeToSelect('*')
|
559 |
+
->addFieldToFilter(array(array('attribute' => 'posiosId', 'eq' => $id)));
|
560 |
|
561 |
$ret = array();
|
562 |
|
563 |
+
foreach ($products as $product) {
|
564 |
$ret[] = $product;
|
565 |
}
|
566 |
+
|
567 |
return $ret;
|
568 |
}
|
569 |
|
570 |
+
private function getMagentoCategory($posiosId, $name) {
|
|
|
|
|
571 |
$categories = Mage::getModel('catalog/category')
|
572 |
->getCollection()
|
573 |
->addAttributeToSelect('*')
|
574 |
->addIsActiveFilter()
|
575 |
+
->addFieldToFilter(array(array('attribute' => 'posiosId', 'eq' => $posiosId), array('attribute' => 'name', 'eq' => $name )));
|
576 |
|
577 |
$ret = array();
|
578 |
+
foreach ($categories as $category) {
|
|
|
579 |
$ret[] = $category;
|
580 |
}
|
581 |
+
return $ret;
|
582 |
+
}
|
583 |
+
|
584 |
+
private function getMagentoCategoryById($posiosId) {
|
585 |
+
$categories = Mage::getModel('catalog/category')
|
586 |
+
->getCollection()
|
587 |
+
->addAttributeToSelect('*')
|
588 |
+
->addIsActiveFilter()
|
589 |
+
->addFieldToFilter(array(array('attribute' => 'posiosId', 'eq' => $posiosId)));
|
590 |
|
591 |
+
$ret = array();
|
592 |
+
foreach ($categories as $category) {
|
593 |
+
if ($category->getData('posiosId') == $posiosId) {
|
594 |
+
$ret = $category;
|
595 |
+
break;
|
596 |
+
}
|
597 |
+
}
|
598 |
return $ret;
|
599 |
}
|
600 |
|
601 |
+
public function syncCustomers($syncField) {
|
602 |
$magentoCustomers = $this->getMagentoCustomers($syncField);
|
603 |
+
foreach ($magentoCustomers as $magentoCustomer) {
|
604 |
$this->importCustomer($magentoCustomer, null, null, null);
|
605 |
}
|
606 |
}
|
607 |
|
608 |
+
public function importCustomer($magentoCustomer, $billingAddress, $shippingAddress, $establishmentId) {
|
609 |
+
$customer = array ();
|
610 |
|
611 |
+
if (!isset($billingAddress)) {
|
612 |
$billingAddress = Mage::getModel('customer/address')->load($magentoCustomer->getData("default_billing"));
|
613 |
}
|
614 |
|
615 |
+
if (!isset($shippingAddress)) {
|
616 |
$shippingAddress = Mage::getModel('customer/address')->load($magentoCustomer->getData("default_shipping"));
|
617 |
}
|
618 |
|
619 |
+
if (!isset($billingAddress)) {
|
620 |
$billingAddress = $shippingAddress;
|
621 |
}
|
622 |
|
623 |
+
if (!isset($shippingAddress)) {
|
624 |
$shippingAddress = $billingAddress;
|
625 |
}
|
626 |
|
|
|
627 |
$customer["firstName"] = $magentoCustomer->getData("firstname");
|
628 |
$customer["lastName"] = $magentoCustomer->getData("lastname");
|
629 |
$customer["email"] = $magentoCustomer->getData("email");
|
644 |
|
645 |
$posiosId = $magentoCustomer->getData('posiosId');
|
646 |
$apiHelper = Mage::helper('lightspeed_syncproducts/api');
|
647 |
+
if (isset($posiosId)) {
|
648 |
+
if (isset($establishmentId)) {
|
649 |
$apiHelper->saveCustomer($customer, $posiosId, null);
|
650 |
+
$establishmentCustomer = $apiHelper->getCustomer($posiosId, $establishmentId);
|
651 |
$apiHelper->saveCustomer($customer, $establishmentCustomer->id, $establishmentId);
|
652 |
$posiosId = $establishmentCustomer->id;
|
653 |
} else {
|
654 |
+
$customer["id"] = (int) $posiosId;
|
655 |
$apiHelper->saveCustomer($customer, $posiosId, null);
|
656 |
}
|
657 |
} else {
|
658 |
$posiosId = $apiHelper->createCustomer($customer, null);
|
659 |
+
$magentoCustomer->setData('posiosId', (int) $posiosId);
|
660 |
+
$magentoCustomer->getResource()->saveAttribute($magentoCustomer, 'posiosId');
|
661 |
+
if (isset($establishmentId)) {
|
662 |
+
$establishmentCustomer = $apiHelper->getCustomer($posiosId, $establishmentId);
|
663 |
$posiosId = $establishmentCustomer->id;
|
664 |
}
|
665 |
}
|
666 |
return $posiosId;
|
667 |
}
|
668 |
+
private function getCustomerIdForEstablishment($attributeValue, $establishmentId) {
|
|
|
669 |
$this->log('Parsing establishment posios id...');
|
670 |
+
if (strpos($attributeValue, ( string ) $establishmentId) !== false) {
|
671 |
$this->log('Establishment id found...');
|
672 |
+
preg_match('/' . $establishmentId . '_(.*?);/', $attributeValue, $matches);
|
673 |
+
if (count($matches) > 0) {
|
674 |
return $matches[1];
|
675 |
} else {
|
676 |
return false;
|
679 |
$this->log('Establishment id not found...');
|
680 |
return false;
|
681 |
}
|
|
|
682 |
}
|
683 |
+
private function downloadFile($url, $fullPath) {
|
|
|
684 |
$fp = fopen($fullPath, 'w');
|
685 |
$ch = curl_init($url);
|
686 |
curl_setopt($ch, CURLOPT_FILE, $fp);
|
689 |
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookies');
|
690 |
$data = curl_exec($ch);
|
691 |
|
692 |
+
if (fwrite($fp, $data)) {
|
|
|
693 |
return true;
|
694 |
+
} else {
|
|
|
|
|
695 |
return false;
|
696 |
}
|
697 |
}
|
698 |
+
private function parseMagentoStreet($street) {
|
699 |
+
$this->log('Parse street ' . print_r($street, true));
|
|
|
700 |
$arr = is_array($street) ? $street : explode("\n", $street);
|
701 |
$street = implode(" ", $arr);
|
702 |
|
703 |
+
$result = array ();
|
704 |
$lastSpacePosition = strrpos($street, " ");
|
705 |
+
if ($lastSpacePosition > 0) {
|
706 |
+
$number = substr($street, $lastSpacePosition + 1);
|
707 |
$street = substr($street, 0, $lastSpacePosition);
|
708 |
} else {
|
709 |
$number = $street;
|
713 |
$result[0] = $street;
|
714 |
$result[1] = $number;
|
715 |
|
716 |
+
if (!isset($result[0])) {
|
717 |
$result[0] = "";
|
718 |
}
|
719 |
|
720 |
+
if (!isset($result[1])) {
|
721 |
$result[1] = "";
|
722 |
}
|
723 |
|
724 |
+
$this->log('Parsed street ' . print_r($result, true));
|
725 |
return $result;
|
726 |
}
|
727 |
+
private function getMagentoCustomers($syncField) {
|
728 |
+
$users = mage::getModel('customer/customer')->getCollection()->addAttributeToSelect('*');
|
729 |
+
if ('existing' == $syncField) {
|
730 |
+
$users->addFieldToFilter(array (
|
731 |
+
array (
|
732 |
+
'attribute' => 'posiosId',
|
733 |
+
'neq' => 'NULL'
|
734 |
+
)
|
735 |
+
));
|
736 |
+
} else if ('new' == $syncField) {
|
737 |
+
$users->addAttributeToFilter('posiosId', array (
|
738 |
+
'null' => true
|
739 |
+
), 'left');
|
740 |
}
|
741 |
+
$ret = array ();
|
742 |
+
foreach ($users as $user) {
|
743 |
$ret[] = $user;
|
744 |
}
|
745 |
return $ret;
|
746 |
}
|
747 |
+
private function decodeName($name) {
|
|
|
748 |
$name = str_replace('@', ' ', $name);
|
749 |
$name = str_replace('!', '.', $name);
|
750 |
return $name;
|
751 |
}
|
752 |
+
private function addModifications($magentoProduct, $lightspeedProduct, $taxInclusivePrices) {
|
|
|
753 |
$store = Mage::app()->getStore('default');
|
754 |
$taxCalculation = Mage::getModel('tax/calculation');
|
755 |
$request = $taxCalculation->getRateRequest(null, null, null, $store);
|
762 |
$oldOptions = $magentoProduct->getOptions();
|
763 |
$optionsToDelete = null;
|
764 |
if (count($oldOptions) > 0) {
|
765 |
+
$optionsToDelete = array ();
|
766 |
+
foreach ($oldOptions as $option) {
|
767 |
$optionsData = $option->getData();
|
768 |
$optionsData['is_delete'] = '1';
|
769 |
$optionsToDelete[] = $optionsData;
|
773 |
|
774 |
$optionInstance = $magentoProduct->getOptionInstance()->unsetOptions();
|
775 |
|
776 |
+
$index = 0;
|
777 |
$sku = $lightspeedProduct->sku;
|
778 |
+
foreach ($lightspeedProduct->additions as $addition) {
|
779 |
$index2 = 0;
|
780 |
$option = array(
|
781 |
'title' => $addition->name,
|
794 |
'sku' => $addition->id
|
795 |
);
|
796 |
} else {
|
797 |
+
foreach ($addition->values as $additionValue) {
|
798 |
$price = $additionValue->price;
|
799 |
+
if (!$taxInclusivePrices) {
|
800 |
$price -= $taxCalculation->calcTaxAmount($additionValue->price, $percent, true, false);
|
801 |
}
|
802 |
$option['values'][] = array(
|
814 |
}
|
815 |
$magentoProduct->setOptionInstance($optionInstance);
|
816 |
}
|
817 |
+
private function getOptionType($option) {
|
818 |
+
if (!isset($option->values) || count($option->values) == 0) {
|
|
|
819 |
return 'area';
|
820 |
+
} elseif ($option->multiselect) {
|
821 |
return 'multiple';
|
822 |
} else {
|
823 |
return 'drop_down';
|
824 |
}
|
825 |
}
|
826 |
+
private function isRequired($option) {
|
827 |
+
if (!isset($option->values) || count($option->values) == 0) {
|
|
|
828 |
return false;
|
829 |
+
} else if (!$option->multiselect) {
|
830 |
return true;
|
831 |
} else {
|
832 |
return $option->minSelectedAmount > 0;
|
833 |
}
|
834 |
}
|
835 |
|
836 |
+
private function deleteImages($magentoProduct, $mediaApi) {
|
837 |
+
if ($magentoProduct->getId()) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
838 |
$items = $mediaApi->items($magentoProduct->getId());
|
839 |
+
foreach ($items as $item) {
|
840 |
$mediaApi->remove($magentoProduct->getId(), $item['file']);
|
841 |
}
|
842 |
}
|
|
|
843 |
}
|
844 |
|
845 |
public function reorder($orderId) {
|
866 |
|
867 |
$reOrderId = $newOrder->getId();
|
868 |
return $reOrderId;
|
|
|
869 |
} catch (Exception $e) {
|
870 |
+
Mage::log("Order #{$incId} Reorder Error : {$e->getMessage()}", null, "reorder.log");
|
871 |
}
|
872 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
873 |
}
|
app/code/local/Lightspeed/Syncproducts/Helper/SyncProcess.php
CHANGED
@@ -1,6 +1,10 @@
|
|
1 |
<?php
|
2 |
class Lightspeed_Syncproducts_Helper_SyncProcess extends Mage_Core_Helper_Abstract{
|
3 |
|
|
|
|
|
|
|
|
|
4 |
private function getSyncSession(){
|
5 |
$session = Mage::getSingleton('adminhtml/session')->getLightspeedSync();
|
6 |
if($session == null){
|
@@ -21,16 +25,25 @@ class Lightspeed_Syncproducts_Helper_SyncProcess extends Mage_Core_Helper_Abstra
|
|
21 |
$this->setSyncSession($this->getSyncSession()->setPriceField($priceField));
|
22 |
}
|
23 |
|
24 |
-
public function getProductGroups()
|
25 |
-
{
|
26 |
return $this->getSyncSession()->getProductGroups();
|
27 |
}
|
28 |
|
|
|
|
|
|
|
|
|
|
|
29 |
public function setProductGroups($productGroups)
|
30 |
{
|
31 |
$this->setSyncSession($this->getSyncSession()->setProductGroups($productGroups));
|
32 |
}
|
33 |
|
|
|
|
|
|
|
|
|
|
|
34 |
public function getProductIds()
|
35 |
{
|
36 |
return $this->getSyncSession()->getProductIds();
|
@@ -58,13 +71,12 @@ class Lightspeed_Syncproducts_Helper_SyncProcess extends Mage_Core_Helper_Abstra
|
|
58 |
|
59 |
public function addProducts($products)
|
60 |
{
|
61 |
-
|
62 |
$this->addProduct($product);
|
63 |
}
|
64 |
}
|
65 |
|
66 |
-
public function getProduct($id)
|
67 |
-
{
|
68 |
$products = $this->getSyncSession()->getProducts();
|
69 |
return $products[$id];
|
70 |
}
|
1 |
<?php
|
2 |
class Lightspeed_Syncproducts_Helper_SyncProcess extends Mage_Core_Helper_Abstract{
|
3 |
|
4 |
+
private function log($message) {
|
5 |
+
Mage::log($message, null, "lightspeed.log", true);
|
6 |
+
}
|
7 |
+
|
8 |
private function getSyncSession(){
|
9 |
$session = Mage::getSingleton('adminhtml/session')->getLightspeedSync();
|
10 |
if($session == null){
|
25 |
$this->setSyncSession($this->getSyncSession()->setPriceField($priceField));
|
26 |
}
|
27 |
|
28 |
+
public function getProductGroups() {
|
|
|
29 |
return $this->getSyncSession()->getProductGroups();
|
30 |
}
|
31 |
|
32 |
+
public function getProductGroup($id) {
|
33 |
+
$groups = $this->getSyncSession()->getProductGroups();
|
34 |
+
return $groups[$id];
|
35 |
+
}
|
36 |
+
|
37 |
public function setProductGroups($productGroups)
|
38 |
{
|
39 |
$this->setSyncSession($this->getSyncSession()->setProductGroups($productGroups));
|
40 |
}
|
41 |
|
42 |
+
/**
|
43 |
+
* An associative array of category ids
|
44 |
+
* Key: Category Id
|
45 |
+
* Value: Array of product ids
|
46 |
+
*/
|
47 |
public function getProductIds()
|
48 |
{
|
49 |
return $this->getSyncSession()->getProductIds();
|
71 |
|
72 |
public function addProducts($products)
|
73 |
{
|
74 |
+
foreach($products as $product){
|
75 |
$this->addProduct($product);
|
76 |
}
|
77 |
}
|
78 |
|
79 |
+
public function getProduct($id) {
|
|
|
80 |
$products = $this->getSyncSession()->getProducts();
|
81 |
return $products[$id];
|
82 |
}
|
app/code/local/Lightspeed/Syncproducts/Model/Category/Source.php
CHANGED
@@ -29,7 +29,7 @@ class Lightspeed_Syncproducts_Model_Category_Source {
|
|
29 |
$ret[] = array("value" => $category->getId(), "label" => $category->getName());
|
30 |
}
|
31 |
}
|
32 |
-
$this->setSyncSession($this->getSyncSession()->
|
33 |
$this->setSyncSession($this->getSyncSession()->setLastUpdate(time()));
|
34 |
} else {
|
35 |
$ret = array();
|
29 |
$ret[] = array("value" => $category->getId(), "label" => $category->getName());
|
30 |
}
|
31 |
}
|
32 |
+
$this->setSyncSession($this->getSyncSession()->setProductGroups($ret));
|
33 |
$this->setSyncSession($this->getSyncSession()->setLastUpdate(time()));
|
34 |
} else {
|
35 |
$ret = array();
|
app/code/local/Lightspeed/Syncproducts/Model/Order/Observer.php
CHANGED
@@ -1,8 +1,7 @@
|
|
1 |
<?php
|
2 |
class Lightspeed_Syncproducts_Model_Order_Observer {
|
3 |
|
4 |
-
public function __construct()
|
5 |
-
{
|
6 |
}
|
7 |
|
8 |
private function log($message){
|
@@ -11,33 +10,99 @@ class Lightspeed_Syncproducts_Model_Order_Observer {
|
|
11 |
|
12 |
public function syncOrder($magentoOrder){
|
13 |
$this->log('Start order syncing');
|
|
|
14 |
$order = array();
|
15 |
$order["id"] = 0;
|
16 |
$order["description"] = "auto-generated order by magento-plugin for invoice ";
|
17 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
18 |
$useEstablishment = false;
|
19 |
$establishmentField = Mage::getStoreConfig('lightspeed_settings/lightspeed_establishments/lightspeed_establishment_field');
|
20 |
-
if(!isset($establishmentField) || $establishmentField == '0'){
|
21 |
$establishmentId = null;
|
22 |
} else {
|
23 |
$establishmentId = $magentoOrder->getData($establishmentField);
|
24 |
if(isset($establishmentId)){
|
25 |
$establishmentId = (int)$establishmentId;
|
26 |
-
$order['companyId'] = (int)$establishmentId;
|
27 |
$useEstablishment = true;
|
|
|
|
|
28 |
}
|
29 |
}
|
30 |
|
31 |
-
$this->log(
|
|
|
|
|
32 |
|
33 |
-
|
34 |
-
$
|
35 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
36 |
|
37 |
-
|
38 |
-
|
|
|
39 |
$orderItems = array();
|
40 |
-
$items = Mage::getModel("sales/order_item")->getCollection()->addFieldToFilter("order_id"
|
41 |
$taxes = array();
|
42 |
$useModifiers = (Mage::getStoreConfig('lightspeed_settings/lightspeed_sync/lightspeed_import_modifiers') == '1');
|
43 |
foreach($items as $orderItem){
|
@@ -72,36 +137,12 @@ class Lightspeed_Syncproducts_Model_Order_Observer {
|
|
72 |
}
|
73 |
$item['modifiers'] = $modifiers;
|
74 |
}
|
75 |
-
|
76 |
-
|
77 |
$orderItems[] = $item;
|
78 |
}
|
|
|
|
|
79 |
|
80 |
-
|
81 |
-
$deliveryProduct = explode('_',Mage::getStoreConfig('lightspeed_settings/lightspeed_sync/lightspeed_delivery_costs'));
|
82 |
-
if(count($deliveryProduct) > 1){
|
83 |
-
if(false){
|
84 |
-
$deliveryCostProduct["productPlu"] = $deliveryProduct[1];
|
85 |
-
} else {
|
86 |
-
$deliveryCostProduct["productId"] = $deliveryProduct[0];
|
87 |
-
}
|
88 |
-
$deliveryCostProduct["amount"] = 1;
|
89 |
-
$deliveryCostProduct["unitPrice"] = (float)$magentoOrder->getShippingAmount();
|
90 |
-
$deliveryCostProduct["unitPriceWithoutVat"] = (float)$magentoOrder->getShippingAmount();
|
91 |
-
$deliveryCostProduct["totalPrice"] = (float)$magentoOrder->getShippingAmount();
|
92 |
-
$deliveryCostProduct["totalPriceWithoutVat"] = (float)$magentoOrder->getShippingAmount();
|
93 |
-
$orderItems[] = $deliveryCostProduct;
|
94 |
-
}
|
95 |
-
|
96 |
-
|
97 |
-
$order["orderItems"] = $orderItems;
|
98 |
-
$paymentMethod = $magentoOrder->getPayment()->getMethod();
|
99 |
-
if($paymentMethod != "checkmo" && $paymentMethod != "free"){
|
100 |
-
$paymentId = Mage::getStoreConfig('lightspeed_settings/lightspeed_payment/lightspeed_payment_'.$paymentMethod);
|
101 |
-
$payment = Mage::helper('lightspeed_syncproducts/api')->getPaymentType($paymentId);
|
102 |
-
$order["orderPayment"] = array("amount" => (float)$magentoOrder->getGrandTotal(), "paymentTypeId"=>(int)$payment->id, "paymentTypeTypeId"=>(int)$payment->typeId);
|
103 |
-
}
|
104 |
-
|
105 |
$taxInfo = $magentoOrder->getFullTaxInfo();
|
106 |
$orderTaxInfo = array();
|
107 |
foreach($taxInfo as $taxItem){
|
@@ -111,59 +152,48 @@ class Lightspeed_Syncproducts_Model_Order_Observer {
|
|
111 |
$orderTaxInfo[] = array("tax" => (float)$taxItem["amount"], "taxRate" => $taxItem["percent"], "totalWithoutTax" => $total, "totalWithTax" => $totalInclTax);
|
112 |
}
|
113 |
|
114 |
-
|
115 |
-
$order["orderTaxInfo"] = $orderTaxInfo;
|
116 |
-
}
|
117 |
-
|
118 |
-
$this->log('Going to create an order for establishment: ' .$establishmentId);
|
119 |
-
$posiosId = Mage::helper('lightspeed_syncproducts/api')->createOrder($order, $establishmentId);
|
120 |
-
$magentoOrder->setData('posiosId', $posiosId);
|
121 |
-
$magentoOrder->save();
|
122 |
-
|
123 |
-
$this->log('Order synced');
|
124 |
-
}
|
125 |
-
|
126 |
-
protected function getCustomerId($customer, $establishmentId, $order){
|
127 |
-
$this->log('Start syncing user...');
|
128 |
-
if(!isset($establishmentId)){
|
129 |
-
$lightspeedId = $customer->getData("posiosId");
|
130 |
-
if(isset($lightspeedId)){
|
131 |
-
return (int)$lightspeedId;
|
132 |
-
} else {
|
133 |
-
return (int)(Mage::helper('lightspeed_syncproducts/import')->importCustomer($customer, $order->getBillingAddress(), $order->getShippingAddress(), null));
|
134 |
-
}
|
135 |
-
} else {
|
136 |
-
$this->log('Start syncing user... using establishment');
|
137 |
-
$this->log('Got establishment id: ' .$establishmentId);
|
138 |
-
return (int)(Mage::helper('lightspeed_syncproducts/import')->importCustomer($customer, $order->getBillingAddress(), $order->getShippingAddress(), $establishmentId));
|
139 |
-
}
|
140 |
-
|
141 |
}
|
142 |
|
143 |
|
144 |
-
public function syncOrderAfterPayment($event){
|
145 |
$invoice = $event->getInvoice();
|
146 |
$magentoOrder = $invoice->getOrder();
|
147 |
-
|
148 |
$paymentMethod = $magentoOrder->getPayment()->getMethod();
|
149 |
-
|
|
|
150 |
if($paymentMethod != "checkmo"){
|
151 |
-
$this->
|
152 |
}
|
153 |
}
|
154 |
|
155 |
-
public function syncOrderAfterPlacement
|
156 |
$magentoOrder = $event->getOrder();
|
157 |
|
158 |
$paymentMethod = $magentoOrder->getPayment()->getMethod();
|
159 |
$this->log("Order placed with: ".$paymentMethod);
|
|
|
|
|
160 |
|
161 |
-
|
162 |
-
|
163 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
164 |
}
|
165 |
|
166 |
-
private function getDeliveryTimestamp($order){
|
167 |
try{
|
168 |
$mod = Mage::getModel("invoiceogone/deliverytime");
|
169 |
if($mod){
|
@@ -208,4 +238,4 @@ class Lightspeed_Syncproducts_Model_Order_Observer {
|
|
208 |
}
|
209 |
return $modifiers;
|
210 |
}
|
211 |
-
}
|
1 |
<?php
|
2 |
class Lightspeed_Syncproducts_Model_Order_Observer {
|
3 |
|
4 |
+
public function __construct() {
|
|
|
5 |
}
|
6 |
|
7 |
private function log($message){
|
10 |
|
11 |
public function syncOrder($magentoOrder){
|
12 |
$this->log('Start order syncing');
|
13 |
+
$paymentMethod = $magentoOrder->getPayment()->getMethod();
|
14 |
$order = array();
|
15 |
$order["id"] = 0;
|
16 |
$order["description"] = "auto-generated order by magento-plugin for invoice ";
|
17 |
|
18 |
+
if ($magentoOrder->getCustomerComment()) {
|
19 |
+
$order["note"] = $magentoOrder->getCustomerComment();
|
20 |
+
}
|
21 |
+
|
22 |
+
$establishmentId = $this->getEstablishmentId($magentoOrder);
|
23 |
+
if ($establishmentId !== null) {
|
24 |
+
$order['companyId'] = $establishmentId;
|
25 |
+
}
|
26 |
+
|
27 |
+
$customer= mage::getModel('customer/customer')->load($magentoOrder->getCustomerId());
|
28 |
+
$order["customerId"] = $this->getCustomerId($customer, $establishmentId, $magentoOrder);
|
29 |
+
|
30 |
+
$order["deliveryDate"] = $this->getDeliveryTimestamp($magentoOrder);
|
31 |
+
$order["type"] = $this->getShippingType($magentoOrder->getShippingMethod(true)->getCarrierCode());
|
32 |
+
|
33 |
+
$deliveryCostProduct = array();
|
34 |
+
$deliveryProduct = explode('_', Mage::getStoreConfig('lightspeed_settings/lightspeed_sync/lightspeed_delivery_costs'));
|
35 |
+
if (count($deliveryProduct) > 1) {
|
36 |
+
if (false) {
|
37 |
+
$deliveryCostProduct["productPlu"] = $deliveryProduct[1];
|
38 |
+
} else {
|
39 |
+
$deliveryCostProduct["productId"] = $deliveryProduct[0];
|
40 |
+
}
|
41 |
+
$deliveryCostProduct["amount"] = 1;
|
42 |
+
$deliveryCostProduct["unitPrice"] = (float)$magentoOrder->getShippingAmount();
|
43 |
+
$deliveryCostProduct["unitPriceWithoutVat"] = (float)$magentoOrder->getShippingAmount();
|
44 |
+
$deliveryCostProduct["totalPrice"] = (float)$magentoOrder->getShippingAmount();
|
45 |
+
$deliveryCostProduct["totalPriceWithoutVat"] = (float)$magentoOrder->getShippingAmount();
|
46 |
+
$orderItems[] = $deliveryCostProduct;
|
47 |
+
}
|
48 |
+
|
49 |
+
$orderWithTaxes = $this->createOrderWithTaxes($magentoOrder);
|
50 |
+
$orderItems = $orderWithTaxes[0];
|
51 |
+
$orderTaxInfo = $this->getOrderTaxInfo($magentoOrder, $orderWithTaxes[1]);
|
52 |
+
$order["orderItems"] = $orderItems;
|
53 |
+
|
54 |
+
if(count($orderTaxInfo) > 0){
|
55 |
+
$order["orderTaxInfo"] = $orderTaxInfo;
|
56 |
+
}
|
57 |
+
|
58 |
+
if ($paymentMethod === "checkmo" || $paymentMethod === "free") {
|
59 |
+
$order["status"] = "ACCEPTED";
|
60 |
+
} else {
|
61 |
+
$order["status"] = "WAITING_FOR_PAYMENT";
|
62 |
+
}
|
63 |
+
|
64 |
+
$this->log('Going to create an order' . (($establishmentId !== null) ? ' for establishment: ' . $establishmentId : ''));
|
65 |
+
$posiosId = Mage::helper('lightspeed_syncproducts/api')->createOrder($order, $establishmentId);
|
66 |
+
$magentoOrder->setData('posiosId', $posiosId);
|
67 |
+
$magentoOrder->save();
|
68 |
+
|
69 |
+
$this->log('Order synced');
|
70 |
+
}
|
71 |
+
|
72 |
+
protected function getEstablishmentId($magentoOrder) {
|
73 |
$useEstablishment = false;
|
74 |
$establishmentField = Mage::getStoreConfig('lightspeed_settings/lightspeed_establishments/lightspeed_establishment_field');
|
75 |
+
if(!isset($establishmentField) || $establishmentField == '0' || empty($establishmentField)) {
|
76 |
$establishmentId = null;
|
77 |
} else {
|
78 |
$establishmentId = $magentoOrder->getData($establishmentField);
|
79 |
if(isset($establishmentId)){
|
80 |
$establishmentId = (int)$establishmentId;
|
|
|
81 |
$useEstablishment = true;
|
82 |
+
} else {
|
83 |
+
$establishmentId = null;
|
84 |
}
|
85 |
}
|
86 |
|
87 |
+
$this->log($useEstablishment ? 'Using establishments' : 'Not using establishments');
|
88 |
+
return $establishmentId;
|
89 |
+
}
|
90 |
|
91 |
+
protected function getCustomerId($customer, $establishmentId, $order){
|
92 |
+
$this->log('Start syncing user...');
|
93 |
+
if(!isset($establishmentId)){
|
94 |
+
return (int)(Mage::helper('lightspeed_syncproducts/import')->importCustomer($customer, $order->getBillingAddress(), $order->getShippingAddress(), null));
|
95 |
+
} else {
|
96 |
+
$this->log('Start syncing user... using establishment');
|
97 |
+
$this->log('Got establishment id: ' .$establishmentId);
|
98 |
+
return (int)(Mage::helper('lightspeed_syncproducts/import')->importCustomer($customer, $order->getBillingAddress(), $order->getShippingAddress(), $establishmentId));
|
99 |
+
}
|
100 |
|
101 |
+
}
|
102 |
+
|
103 |
+
protected function createOrderWithTaxes($magentoOrder) {
|
104 |
$orderItems = array();
|
105 |
+
$items = Mage::getModel("sales/order_item")->getCollection()->addFieldToFilter("order_id", $magentoOrder->getEntityId());
|
106 |
$taxes = array();
|
107 |
$useModifiers = (Mage::getStoreConfig('lightspeed_settings/lightspeed_sync/lightspeed_import_modifiers') == '1');
|
108 |
foreach($items as $orderItem){
|
137 |
}
|
138 |
$item['modifiers'] = $modifiers;
|
139 |
}
|
|
|
|
|
140 |
$orderItems[] = $item;
|
141 |
}
|
142 |
+
return array($orderItems, $taxes);
|
143 |
+
}
|
144 |
|
145 |
+
protected function getOrderTaxInfo($magentoOrder, $taxes) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
146 |
$taxInfo = $magentoOrder->getFullTaxInfo();
|
147 |
$orderTaxInfo = array();
|
148 |
foreach($taxInfo as $taxItem){
|
152 |
$orderTaxInfo[] = array("tax" => (float)$taxItem["amount"], "taxRate" => $taxItem["percent"], "totalWithoutTax" => $total, "totalWithTax" => $totalInclTax);
|
153 |
}
|
154 |
|
155 |
+
return $orderTaxInfo;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
156 |
}
|
157 |
|
158 |
|
159 |
+
public function syncOrderAfterPayment($event) {
|
160 |
$invoice = $event->getInvoice();
|
161 |
$magentoOrder = $invoice->getOrder();
|
|
|
162 |
$paymentMethod = $magentoOrder->getPayment()->getMethod();
|
163 |
+
|
164 |
+
$this->log("Payment placed with: " . $paymentMethod);
|
165 |
if($paymentMethod != "checkmo"){
|
166 |
+
$this->updatePayment($magentoOrder, $paymentMethod, "ACCEPTED");
|
167 |
}
|
168 |
}
|
169 |
|
170 |
+
public function syncOrderAfterPlacement($event) {
|
171 |
$magentoOrder = $event->getOrder();
|
172 |
|
173 |
$paymentMethod = $magentoOrder->getPayment()->getMethod();
|
174 |
$this->log("Order placed with: ".$paymentMethod);
|
175 |
+
$this->syncOrder($magentoOrder);
|
176 |
+
}
|
177 |
|
178 |
+
protected function updatePayment($magentoOrder, $paymentMethod, $status) {
|
179 |
+
$this->log('Going to update order to status: ' . $status);
|
180 |
+
|
181 |
+
$customer = Mage::getModel('customer/customer')->load($magentoOrder->getCustomerId());
|
182 |
+
$customerId = $customer->getData('posiosId');
|
183 |
+
$posiosId = $magentoOrder->getData("posiosId");
|
184 |
+
|
185 |
+
$paymentId = Mage::getStoreConfig('lightspeed_settings/lightspeed_payment/lightspeed_payment_'.$paymentMethod);
|
186 |
+
$payment = Mage::helper('lightspeed_syncproducts/api')->getPaymentType($paymentId);
|
187 |
+
|
188 |
+
$orderPayment = array(
|
189 |
+
"amount" => (float)$magentoOrder->getGrandTotal(),
|
190 |
+
"paymentTypeId"=>(int)$payment->id,
|
191 |
+
"paymentTypeTypeId"=>(int)$payment->typeId
|
192 |
+
);
|
193 |
+
Mage::helper('lightspeed_syncproducts/api')->updateOrder($customerId, $posiosId, $orderPayment, $status);
|
194 |
}
|
195 |
|
196 |
+
private function getDeliveryTimestamp($order) {
|
197 |
try{
|
198 |
$mod = Mage::getModel("invoiceogone/deliverytime");
|
199 |
if($mod){
|
238 |
}
|
239 |
return $modifiers;
|
240 |
}
|
241 |
+
}
|
app/code/local/Lightspeed/Syncproducts/Model/Product/Source.php
CHANGED
@@ -20,8 +20,8 @@ class Lightspeed_Syncproducts_Model_Product_Source {
|
|
20 |
$products = Mage::helper('lightspeed_syncproducts/api')->getAllProducts();
|
21 |
$ret = array(array("value"=>-1, "label" => "-- Please select a product --"));
|
22 |
if(isset($products) && count($products) > 0){
|
23 |
-
foreach($products as $
|
24 |
-
$ret[] = array("value" => $
|
25 |
}
|
26 |
$this->setSyncSession($this->getSyncSession()->setProducts($ret));
|
27 |
$this->setSyncSession($this->getSyncSession()->setLastUpdate(time()));
|
20 |
$products = Mage::helper('lightspeed_syncproducts/api')->getAllProducts();
|
21 |
$ret = array(array("value"=>-1, "label" => "-- Please select a product --"));
|
22 |
if(isset($products) && count($products) > 0){
|
23 |
+
foreach($products as $product){
|
24 |
+
$ret[] = array("value" => $product->id.'_'.$product->sku, "label" => $product->name);
|
25 |
}
|
26 |
$this->setSyncSession($this->getSyncSession()->setProducts($ret));
|
27 |
$this->setSyncSession($this->getSyncSession()->setLastUpdate(time()));
|
app/code/local/Lightspeed/Syncproducts/controllers/SyncproductsController.php
CHANGED
@@ -3,7 +3,7 @@ class Lightspeed_Syncproducts_SyncproductsController extends Mage_Adminhtml_Cont
|
|
3 |
{
|
4 |
|
5 |
private function log($message){
|
6 |
-
Mage::log($message, null, "lightspeed.log");
|
7 |
}
|
8 |
|
9 |
|
@@ -29,7 +29,7 @@ class Lightspeed_Syncproducts_SyncproductsController extends Mage_Adminhtml_Cont
|
|
29 |
$productGroups = array();
|
30 |
foreach($this->getRequest()->getPost() as $name => $id){
|
31 |
if($name != "form_key"){
|
32 |
-
$productGroups[] = array("name" => $name, "id" => $id);
|
33 |
}
|
34 |
}
|
35 |
Mage::helper('lightspeed_syncproducts/syncProcess')->setProductGroups($productGroups);
|
3 |
{
|
4 |
|
5 |
private function log($message){
|
6 |
+
Mage::log($message, null, "lightspeed.log", true);
|
7 |
}
|
8 |
|
9 |
|
29 |
$productGroups = array();
|
30 |
foreach($this->getRequest()->getPost() as $name => $id){
|
31 |
if($name != "form_key"){
|
32 |
+
$productGroups[$id] = array("name" => $name, "id" => $id);
|
33 |
}
|
34 |
}
|
35 |
Mage::helper('lightspeed_syncproducts/syncProcess')->setProductGroups($productGroups);
|
app/design/adminhtml/default/default/template/lightspeed/monitor/monitor.phtml
CHANGED
@@ -71,6 +71,8 @@
|
|
71 |
<tr class="headings">
|
72 |
<th>Order id</th>
|
73 |
<th>Lightspeed Receipt Id</th>
|
|
|
|
|
74 |
<th>Customer</th>
|
75 |
<th>Total Price</th>
|
76 |
<th>Type</th>
|
@@ -89,6 +91,12 @@
|
|
89 |
<?php endif; ?>
|
90 |
</td>
|
91 |
<td><?php echo $orders[$index]->receiptId; ?></td>
|
|
|
|
|
|
|
|
|
|
|
|
|
92 |
<td><?php echo (isset($orders[$index]->customerName) ? $orders[$index]->customerName : '-'); ?></td>
|
93 |
<td><?php echo $orders[$index]->totalPrice; ?></td>
|
94 |
<td><?php echo $orders[$index]->type; ?></td>
|
71 |
<tr class="headings">
|
72 |
<th>Order id</th>
|
73 |
<th>Lightspeed Receipt Id</th>
|
74 |
+
<th>Creation Date</th>
|
75 |
+
<th>Delivery Date</th>
|
76 |
<th>Customer</th>
|
77 |
<th>Total Price</th>
|
78 |
<th>Type</th>
|
91 |
<?php endif; ?>
|
92 |
</td>
|
93 |
<td><?php echo $orders[$index]->receiptId; ?></td>
|
94 |
+
<?php
|
95 |
+
$creationDate = new DateTime($orders[$index]->creationDate);
|
96 |
+
$deliveryDate = new DateTime($orders[$index]->deliveryDate);
|
97 |
+
?>
|
98 |
+
<td><?php echo $creationDate->format('d/m/y H:m:s'); ?></td>
|
99 |
+
<td><?php echo $deliveryDate->format('d/m/y H:m:s'); ?></td>
|
100 |
<td><?php echo (isset($orders[$index]->customerName) ? $orders[$index]->customerName : '-'); ?></td>
|
101 |
<td><?php echo $orders[$index]->totalPrice; ?></td>
|
102 |
<td><?php echo $orders[$index]->type; ?></td>
|
app/design/adminhtml/default/default/template/lightspeed/page.phtml
CHANGED
@@ -22,12 +22,12 @@
|
|
22 |
</ul>
|
23 |
<button id="goToLightspeedConfig" title="Go to configuration" type="button" class="scalable" onclick="setLocation('<?php echo $this->getConfigUrl() ?>')" style=""><span><span><span>Go to configuration</span></span></span></button>
|
24 |
<?php else: ?>
|
25 |
-
<p>
|
26 |
<form method="post" action="<?php echo $this->getLightSpeedUrl('categories') ?>">
|
27 |
<input name="form_key" type="hidden" value="<?php echo Mage::getSingleton('core/session')->getFormKey() ?>" />
|
28 |
<select id="priceField" name="priceField">
|
29 |
-
<option value="
|
30 |
-
<option value="
|
31 |
</select>
|
32 |
<button id="startSyncing" title="Start syncing" type="submit" class="scalable"><span><span><span>Start Syncing</span></span></span></button>
|
33 |
</form>
|
22 |
</ul>
|
23 |
<button id="goToLightspeedConfig" title="Go to configuration" type="button" class="scalable" onclick="setLocation('<?php echo $this->getConfigUrl() ?>')" style=""><span><span><span>Go to configuration</span></span></span></button>
|
24 |
<?php else: ?>
|
25 |
+
<p>Which price do you want to use to import your products?</p>
|
26 |
<form method="post" action="<?php echo $this->getLightSpeedUrl('categories') ?>">
|
27 |
<input name="form_key" type="hidden" value="<?php echo Mage::getSingleton('core/session')->getFormKey() ?>" />
|
28 |
<select id="priceField" name="priceField">
|
29 |
+
<option value="delivery">Delivery price</option>
|
30 |
+
<option value="takeaway">Take-away price</option>
|
31 |
</select>
|
32 |
<button id="startSyncing" title="Start syncing" type="submit" class="scalable"><span><span><span>Start Syncing</span></span></span></button>
|
33 |
</form>
|
app/design/adminhtml/default/default/template/lightspeed/products.phtml
CHANGED
@@ -29,7 +29,7 @@
|
|
29 |
<ul class="lightspeed">
|
30 |
<?php if(isset($group["products"])):?>
|
31 |
<?php foreach($group["products"] as $product):?>
|
32 |
-
<?php if($product->visible && $product->productType == ""):?>
|
33 |
<li>
|
34 |
<input class="productCheckbox" type="checkbox" id="<?php echo $product->id;?>" name="<?php echo $product->id;?>" value="<?php echo $group["id"]; ?>"/>
|
35 |
<label for="<?php echo $product->id;?>"><?php echo $product->name.' ('.$product->sku.')'.' - '.$this->formatPrice($this->getPrice($product, false)).' ('.$this->formatPrice($this->getPrice($product, true)).' VAT Incl.)'; ?></label>
|
29 |
<ul class="lightspeed">
|
30 |
<?php if(isset($group["products"])):?>
|
31 |
<?php foreach($group["products"] as $product):?>
|
32 |
+
<?php if($product->visible && $product->name != "LINE" && $product->name != "SPACER" && $product->productType == ""):?>
|
33 |
<li>
|
34 |
<input class="productCheckbox" type="checkbox" id="<?php echo $product->id;?>" name="<?php echo $product->id;?>" value="<?php echo $group["id"]; ?>"/>
|
35 |
<label for="<?php echo $product->id;?>"><?php echo $product->name.' ('.$product->sku.')'.' - '.$this->formatPrice($this->getPrice($product, false)).' ('.$this->formatPrice($this->getPrice($product, true)).' VAT Incl.)'; ?></label>
|
app/etc/modules/Lightspeed_Syncproducts.xml
CHANGED
@@ -13,4 +13,4 @@
|
|
13 |
<codePool>local</codePool>
|
14 |
</Lightspeed_Syncproducts>
|
15 |
</modules>
|
16 |
-
</config>
|
13 |
<codePool>local</codePool>
|
14 |
</Lightspeed_Syncproducts>
|
15 |
</modules>
|
16 |
+
</config>
|
package.xml
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>Lightspeed_Restaurant_POS_connector</name>
|
4 |
-
<version>0.0.
|
5 |
<stability>devel</stability>
|
6 |
<license>Commercial Agreement</license>
|
7 |
<channel>community</channel>
|
@@ -11,9 +11,9 @@
|
|
11 |
<notes>- Enables syncing of products from the restaurant POS with magento
|
12 |
- Enables sending of orders from magento to the restaurant POS</notes>
|
13 |
<authors><author><name>Joris De Smedt</name><user>Joris</user><email>Joris.DeSmedt@lightspeedhq.com</email></author><author><name>Jonas Ostir</name><user>Jonas</user><email>Jonas.Ostir@lightspeedhq.com</email></author><author><name>Jasper Decaestecker</name><user>Jasper</user><email>Jasper.Decaestecker@lightspeedhq.com</email></author></authors>
|
14 |
-
<date>2016-03-
|
15 |
-
<time>
|
16 |
-
<contents><target name="magelocal"><dir name="Lightspeed"><dir name="Syncproducts"><dir name="Block"><file name="Establishmentfields.php" hash="97031eaa7c37a349cd5a1fb34c2ef408"/><file name="Monitor.php" hash="3f5b0f22ccb4a508f5cea3ab272e7f5e"/><file name="Paymentfields.php" hash="1265f7f5477387d1305d688b8c9d4d66"/><file name="Shippingfields.php" hash="8ef23f94d7a1f2b3ddbbd6a72a53e2ca"/><file name="Synccustomers.php" hash="7c710f95acef3f772dcb3d99a86d2fb7"/><file name="Syncproducts.php" hash="4e5d63a29743f47a2f6c9b9a8100fd0a"/></dir><dir name="Helper"><file name="Api.php" hash="00c6964690922c968ec2c8f5d6c4dbb4"/><file name="Data.php" hash="1b25115bfc303bf13112ba02b3e211ec"/><file name="Import.php" hash="7ce602165cac36b345f4fbf33e6f7060"/><file name="SyncProcess.php" hash="503a516db8d8477c406fe847803cbb90"/></dir><dir name="Model"><dir name="Category"><file name="Source.php" hash="22567cc25a6fc352178453f1215e3571"/></dir><dir name="Log"><file name="Log.php" hash="44a15a74ace916156472a7ea85b44957"/><dir name="Resource"><file name="Collection.php" hash="2693857dad446782543b1bbfe54e7114"/><file name="Log.php" hash="246eacb54d9d9398c91d0477833c20d8"/><file name="Setup.php" hash="9c1aa20cd2403572f19c8a50d5711f68"/></dir></dir><dir name="Order"><file name="Observer.php" hash="25fb5ebffa5a2c33eabe5f8895efade6"/></dir><dir name="Payment"><file name="Source.php" hash="f451b12b2716f5687bc3a079dc5fb1a9"/></dir><dir name="Product"><file name="Source.php" hash="fcff69d743b3345b1886c76b3ed43c34"/></dir><dir name="Tax"><file name="Source.php" hash="5245dccc5ae49e4b1a4ec4244e64e6d8"/></dir></dir><dir name="controllers"><file name="MonitorController.php" hash="5d70985a2cb498e17c44dfade63eea1d"/><file name="SynccustomersController.php" hash="60f6f3fe1d4321b98ff3646023f9575c"/><file name="SyncproductsController.php" hash="17bd24e1a8abe79a19dc38ca99ab9000"/></dir><dir name="etc"><file name="adminhtml.xml" hash="59f6515ebb69f3c751b9a7d148ac2abe"/><file name="config.xml" hash="3f2f2170440995ad26da3d9ddef04f92"/><file name="system.xml" hash="a8237da4d81857880fd9242461c5b81b"/></dir><dir name="sql"><dir name="syncproducts_setup"><file name="mysql4-install-1.0.0.0.1.php" hash="56fa3461cebee665b11d43ee52aff996"/><file name="mysql4-install-1.0.0.0.2.php" hash="98e81da9b27ec7b587d3c20451b2e075"/><file name="mysql4-install-1.0.0.0.3.php" hash="b48a3bfc685e76fd3ca902bfdd04bc86"/><file name="mysql4-install-1.0.0.0.4.php" hash="d860a4c8912619a1bd6566e8c61bb4b0"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="etc"><file name="theme.xml" hash="b2a8d19b50efdccb7294cb2fe0640bd9"/></dir><dir name="layout"><file name="admin.xml" hash="7673095003a923321a6cd3578a953d71"/><file name="adminnotification.xml" hash="85a3fddad5ac4c86c647af7fe9cb93aa"/><file name="api2.xml" hash="1553c8fc8975d4d3731d9ef1a980481c"/><file name="authorizenet.xml" hash="29398fbaa4aee1701b299030d1fdaa65"/><file name="bundle.xml" hash="a6f325767991615fb6f55b089f5cdb68"/><file name="captcha.xml" hash="773f4b12d14b8c15951f37379666a5d0"/><file name="catalog.xml" hash="cce43dab0c12d58cd0ffcb1d15e95265"/><file name="centinel.xml" hash="ad5d8ca958576c1d72e696e68f0cd7af"/><file name="cms.xml" hash="5d53f0cea555323cea366c694b0b8b50"/><file name="compiler.xml" hash="4324e94b02f151fb51b71d6861582e21"/><file name="connect.xml" hash="745dc82e3b474824618c0ec987d4c3cd"/><file name="currencysymbol.xml" hash="3b3f5366a1fa4071690c8aac7f7b0688"/><file name="customer.xml" hash="30a904f4f4c8115ad5bad942b1c5b35e"/><file name="dataflow.xml" hash="cd1cbca5ec5de17a6c1fcffd471de45a"/><file name="downloadable.xml" hash="40d181b85a0a3e2a96b932677ade5100"/><file name="giftmessage.xml" hash="4917df8ba7e9f4ac8e4c89cdca626952"/><file name="importexport.xml" hash="243a7394b4414e92cc79916a31a62b76"/><file name="index.xml" hash="c7090c9ed0e718692035ace720ba594c"/><file name="lightspeed_syncproducts.xml" hash="71f0b81a015e007c1b5e03a7f58a5088"/><file name="main.xml" hash="33327a2728bbab9fd5b5ebd8d6d95a35"/><file name="moneybookers.xml" hash="15da5e881a50e29328a473c02bb66af2"/><file name="newsletter.xml" hash="eec98653b5a1697abd2427cc5765a3f2"/><file name="oauth.xml" hash="021b577a885658a30e7e214111673662"/><file name="pagecache.xml" hash="351f149efad7a2fd6855f78cb22d99e0"/><file name="promo.xml" hash="5de780df32953fa4196acc7d5945d594"/><file name="report.xml" hash="298eeb94c7fab08e5170be3044a2218b"/><file name="rss.xml" hash="11f7ad61a6454b6480bd6e61c45552fd"/><file name="sales.xml" hash="dfd156d90f1f41aa9bce30a2d00aef0f"/><file name="search.xml" hash="07c52129f77b32c5f8822612dc3a52f2"/><file name="tag.xml" hash="9115a18f7a5afb3ebe3282a00c6f5cc3"/><file name="tax.xml" hash="f26e2e81e90a4e1793f7a1c8f0384ca2"/><file name="widget.xml" hash="a8c277f25878e9abf97d3db9a328173d"/><file name="xmlconnect.xml" hash="ba732d2baa971c0f07014f54b6296d5e"/><file name=".DS_Store" hash="194577a7e20bdcc7afbb718f502c134c"/></dir><dir name="locale"><dir name="en_US"><file name="translate.csv" hash="735c9ec66d1309f1206294f075fdcdd1"/></dir></dir><dir name="template"><file name="access_denied.phtml" hash="8dbb6e9cd97de65e449307a722aadd7c"/><dir name="api"><file name="role_users_grid_js.phtml" hash="58b17ab917d3fbe0cf4d39efe1eff5a2"/><file name="roleinfo.phtml" hash="0d3e851caa0cfe495ed3c7583bcb0e9b"/><file name="roles.phtml" hash="34455eccb50176e4418a631cd58b13cc"/><file name="rolesedit.phtml" hash="a654b87bde63333de332a10dea633ee0"/><file name="rolesusers.phtml" hash="2d0bfd53f80587ede5076a09316730bc"/><file name="user_roles_grid_js.phtml" hash="d62e060ed6bc165a2dda7e925118fd33"/><file name="userinfo.phtml" hash="1da041adaeda5cf3fbffcda2c2fe8162"/><file name="usernroles.phtml" hash="518c15f5653d318d621fa009328e8ff4"/><file name="userroles.phtml" hash="8e1c821bfc5a304027aaab52b6fa6ad9"/><file name="users.phtml" hash="8870de77fdf9064b40199c3657409250"/></dir><dir name="api2"><dir name="attribute"><file name="buttons.phtml" hash="1d8c7fa3ecd2a34bb71d058c977807de"/><file name="resource.phtml" hash="6fa291254e6f5633438e073d4bbf476c"/></dir><dir name="permissions"><dir name="user"><dir name="edit"><dir name="tab"><dir name="roles"><file name="js.phtml" hash="23cbf23b2bd60241b3f2ba84037013d7"/></dir></dir></dir></dir></dir><dir name="role"><file name="buttons.phtml" hash="7977aedb0697363be95f111b1daac14f"/><file name="users_grid_js.phtml" hash="54ad901cfa9eec64e4b6fa5b906154c5"/></dir></dir><dir name="authorizenet"><dir name="directpost"><file name="iframe.phtml" hash="b60d2ae78aa8b51a6189f0ec2126ffb5"/><file name="info.phtml" hash="0576d40d650c271b1aeaa7afea925562"/></dir></dir><dir name="backup"><file name="dialogs.phtml" hash="b2be33d149636aa4202bd9484a4895be"/><file name="left.phtml" hash="941469c86247edb83906948620702dc8"/><file name="list.phtml" hash="4f9cabcf6ee200da26abca1863b8c8e5"/></dir><dir name="bundle"><dir name="product"><dir name="composite"><dir name="fieldset"><dir name="options"><file name="bundle.phtml" hash="3e68cf91a42b1d6fb8352a904be3e05c"/><dir name="type"><file name="checkbox.phtml" hash="29716d05f391ee379764b61ffea4a7af"/><file name="multi.phtml" hash="6442017f21afef7f88e3e1580c93c16c"/><file name="radio.phtml" hash="a2ee9d9c2ee7b5f49a0e55f5fb3bacd7"/><file name="select.phtml" hash="bb7efbaafc5fac7f08b6300999c65c26"/></dir></dir></dir></dir><dir name="edit"><dir name="bundle"><dir name="option"><file name="search.phtml" hash="174d6ce47791eb3af38a531097e0169c"/><file name="selection.phtml" hash="3a5e0b53a85d802f8f585f30d9d91b6c"/></dir><file name="option.phtml" hash="d5cf246d803062a0f2e389e609bf7d75"/></dir><file name="bundle.phtml" hash="b6b81d2ec1b4cbcf42b84177355c3e69"/></dir></dir><dir name="sales"><dir name="creditmemo"><dir name="create"><dir name="items"><file name="renderer.phtml" hash="584d1e49407f54691ec39dbfb6753650"/></dir></dir><dir name="view"><dir name="items"><file name="renderer.phtml" hash="d7c3bd4fda964206bdf0e3f35ea2ca0b"/></dir></dir></dir><dir name="invoice"><dir name="create"><dir name="items"><file name="renderer.phtml" hash="092f6d7b581afb8318b3739e2ae4676a"/></dir></dir><dir name="view"><dir name="items"><file name="renderer.phtml" hash="25ff3d9c62580dc64633a83d00cbe837"/></dir></dir></dir><dir name="order"><dir name="view"><dir name="items"><file name="renderer.phtml" hash="0ac8d28e86364682468c0aa62a6556a0"/></dir></dir></dir><dir name="shipment"><dir name="create"><dir name="items"><file name="renderer.phtml" hash="54900b64d810ea023e6cb7fd3047c478"/></dir></dir><dir name="view"><dir name="items"><file name="renderer.phtml" hash="23a1dbe1789bdea7f89828a522fa2e6d"/></dir></dir></dir></dir></dir><dir name="captcha"><file name="zend.phtml" hash="b9136f6fde3ca8db1910dba7164755e6"/></dir><dir name="catalog"><dir name="category"><dir name="checkboxes"><file name="tree.phtml" hash="fa73258285c3f5136eb2259c5e9c32ce"/></dir><dir name="edit"><file name="form.phtml" hash="da4caa491156e9ec93648e257676daf7"/></dir><file name="edit.phtml" hash="89720b660be938c17214d375efe1eac6"/><file name="tree.phtml" hash="03c888ab242fc217947f6be538352852"/><dir name="widget"><file name="tree.phtml" hash="7935d6ed9f73fe8ce65d459cee761e67"/></dir></dir><dir name="form"><dir name="renderer"><dir name="fieldset"><file name="element.phtml" hash="2a8a73d131f5f2b814fa3eda859732b5"/></dir></dir></dir><dir name="product"><dir name="attribute"><file name="js.phtml" hash="87e87066a6672421f382939493730cdb"/><dir name="new"><file name="created.phtml" hash="c291386f1246516dabe303e6fba5f25a"/></dir><file name="options.phtml" hash="70c79d6d98b5a37d64977aff9f7ef070"/><dir name="set"><dir name="main"><dir name="tree"><file name="attribute.phtml" hash="a157d7da671fc65feccaf80828920af7"/><file name="group.phtml" hash="3e277218d8db83269704c78414149e8a"/></dir></dir><file name="main.phtml" hash="dbfe23d0e768b6917e00f57dfd77c376"/><dir name="toolbar"><file name="add.phtml" hash="77642e01f1d3d3ab5a8bc498e06196d4"/><file name="main.phtml" hash="f19159c8a6f042068c6adb244342da3a"/></dir></dir></dir><dir name="composite"><file name="configure.phtml" hash="df9c13c584cf69d114bab301b624a663"/><dir name="fieldset"><file name="configurable.phtml" hash="8b031155a3fd892a99002fb14d95f739"/><file name="grouped.phtml" hash="280fa7fa681fbdbcd906ac0eae252d34"/><dir name="options"><file name="js.phtml" hash="2e6606df0fc6a85e6830c4770727e9ab"/><dir name="type"><file name="date.phtml" hash="5d531f14f863441b18baed53eb843d06"/><file name="default.phtml" hash="f7023ea6e084a02acbc1967e113cfbdb"/><file name="file.phtml" hash="31ea434be8436027c52ee13121819d07"/><file name="select.phtml" hash="0ea9745d78b48989af24cce83d98086d"/><file name="text.phtml" hash="af5f02e802e2f0683e625acf2a7524f2"/></dir></dir><file name="options.phtml" hash="e446617e5bbb69e86808802bf5e74a94"/><file name="qty.phtml" hash="e50ce8515f9525e7002e3bd575598c48"/></dir></dir><file name="created.phtml" hash="44c428d1e480d560f854e4fded34fb7e"/><dir name="edit"><dir name="action"><file name="attribute.phtml" hash="038b9519cd81a2e0415f07d8ab44c324"/><file name="inventory.phtml" hash="e3f76e2aba03c8d99654c0ab13ede9a9"/><file name="websites.phtml" hash="022606c920bb19cfcf059e0d8aab2f42"/></dir><file name="categories.phtml" hash="9ddf60da59842cc2eada068668262c6f"/><dir name="options"><file name="option.phtml" hash="171b7d40a2c0384da6f80bc6464c4613"/><dir name="type"><file name="date.phtml" hash="46387e35a71e2db682d2667dd734da39"/><file name="file.phtml" hash="bc063b0c0648eda20a9fc6f2fb74f6b4"/><file name="select.phtml" hash="3d3b73db244d990365f654b0808d8aa3"/><file name="text.phtml" hash="7d4d97b724efdb0f8a722c8e5266b5e5"/></dir></dir><file name="options.phtml" hash="2fbbce0689d701afc08a8034d88f4df0"/><dir name="price"><file name="group.phtml" hash="aae224d67f0316e568acbc64ec437ee6"/><file name="tier.phtml" hash="25566f8552d2cc5901b5de64d3c32d0e"/></dir><file name="serializer.phtml" hash="7b4ec92b7931d8cb3275550b103ae67b"/><dir name="super"><file name="config.phtml" hash="478a64b5d0fbac6984dcc35057f86898"/></dir><file name="websites.phtml" hash="8cf36120d48b173cfe64562b58c0b078"/></dir><file name="edit.phtml" hash="2fcacd48a3d918a369b04edecc4fd711"/><dir name="helper"><file name="gallery.phtml" hash="3fd2327364752b437a9423671f127149"/></dir><file name="js.phtml" hash="8db2dfe0008ca19ff9c92477ce02c4b3"/><file name="price.phtml" hash="2a2a08d4b3a7f940cc691c65f1eb7f05"/><dir name="tab"><file name="alert.phtml" hash="9504feb264a7e9508c0ebb3b2b7d0d4c"/><file name="inventory.phtml" hash="107d0981170b03b0945fa1407e0d224c"/></dir><dir name="widget"><dir name="chooser"><file name="container.phtml" hash="f6df2480b1b2a231a825c588de46f950"/></dir></dir></dir><file name="product.phtml" hash="3417d9e8324e0a5177cb2607b3b80a3e"/><dir name="wysiwyg"><file name="js.phtml" hash="cd97c9fc1595ada331b1ab52b1e082b1"/></dir></dir><dir name="centinel"><dir name="authentication"><file name="complete.phtml" hash="39753ca8c4bb8a4256937ea3473edd3d"/><file name="start.phtml" hash="3aeb35151c1307005518eed58c4b93c8"/></dir><dir name="validation"><file name="form.phtml" hash="5ec27390f38732612313d97341440ad1"/></dir></dir><dir name="cms"><dir name="browser"><dir name="content"><file name="files.phtml" hash="27a67f8a7d84cd381888954c918ce49b"/><file name="newfolder.phtml" hash="79f5c4e6ea869183fadcae2f28a2ca98"/><file name="uploader.phtml" hash="8644b1acefb64b4eead9246f62512d5d"/></dir><file name="content.phtml" hash="4793e1a90ef3830bf7f0966db6b32dd2"/><file name="js.phtml" hash="648b7152e7b4928e0f5bf96969b1faa9"/><file name="tree.phtml" hash="0e35c8acf6a78f5b8d0ac0e3f51cb26f"/></dir><dir name="page"><dir name="edit"><dir name="form"><dir name="renderer"><file name="content.phtml" hash="1c668e7828761ef2e9b7502e77f024a9"/></dir></dir></dir></dir></dir><file name="coming.phtml" hash="9a9e3443216823df9b850a09746a693f"/><dir name="compiler"><file name="process.phtml" hash="87dac1553883293128960c8180678b96"/></dir><dir name="connect"><dir name="extension"><dir name="custom"><file name="authors.phtml" hash="3c07396912ba301635fea098d58db910"/><file name="contents.phtml" hash="70b8105701963239291cd9ade20560d1"/><file name="depends.phtml" hash="96cb091ca8dc3711a559646af1f05a87"/><file name="load.phtml" hash="69358a9869e5539f670c7919f2d3c9bd"/><file name="package.phtml" hash="9636d710c062379de2c79a31e6f55c35"/><file name="release.phtml" hash="cdb74462f1b92b4a7691c18b1f962242"/></dir></dir></dir><dir name="currencysymbol"><file name="grid.phtml" hash="0fbd928a449619caa1851a668208ee0c"/></dir><dir name="customer"><dir name="edit"><file name="js.phtml" hash="f279dd3107bf597c070dbd2cf8575d4f"/><dir name="tab"><dir name="account"><dir name="form"><dir name="renderer"><file name="group.phtml" hash="bf9c409b08e3d4cbddae4549d25389fc"/></dir></dir></dir><dir name="view"><dir name="grid"><file name="item.phtml" hash="24761bd6239d6e15bd40c97ac97695f6"/></dir></dir></dir></dir><file name="online.phtml" hash="4b977f5f6011af8b1821ee0a137a7cc6"/><dir name="sales"><dir name="order"><dir name="create"><dir name="address"><dir name="form"><dir name="renderer"><file name="vat.phtml" hash="d64535d30e050d8076b9fdfa8e60245f"/></dir></dir></dir></dir></dir></dir><dir name="system"><dir name="config"><file name="validatevat.phtml" hash="72790f671038f5d6792f0ae6f562ccbd"/></dir></dir><dir name="tab"><file name="addresses.phtml" hash="dc8015dce2c7bed3dbd6c42b94d6ba78"/><file name="cart.phtml" hash="c6afbc059beda2934118179bd89c9694"/><file name="newsletter.phtml" hash="fb1a9455e4cf0e3630d63ef4fdf0d89f"/><dir name="view"><file name="sales.phtml" hash="7b9ac3b6cc20d6daf2a3e9d31ec97fb3"/></dir><file name="view.phtml" hash="b584ae9122c996c4814db5804a29ee83"/><file name="wishlist.phtml" hash="1f233e6ca971df7f52c870a1a4fc4e5b"/></dir></dir><dir name="dashboard"><dir name="graph"><file name="disabled.phtml" hash="18092101a40e6dcf67dd3eb139a058d5"/></dir><file name="graph.phtml" hash="80be9cf21076a06f3c69064d9a5b65ec"/><file name="grid.phtml" hash="21dec746d3b0cc0164a3d2ec46745705"/><file name="index.phtml" hash="69843e35012550256797a8cf10a6ed21"/><file name="salebar.phtml" hash="b404c2a4f40491d94768898e335801a8"/><file name="searches.phtml" hash="6254c3a5c6e3c5c2b1c433b6fd09eb55"/><dir name="store"><file name="switcher.phtml" hash="2cd8a97f1276ddad0dc3b4cbc7030554"/></dir><file name="totalbar.phtml" hash="95e23bc92daf5cd12393e48bd8af12ec"/></dir><dir name="directory"><dir name="js"><file name="optional_zip_countries.phtml" hash="53eaa267c9b2fd6fa6a53009d8f17010"/></dir></dir><dir name="downloadable"><dir name="product"><dir name="composite"><dir name="fieldset"><file name="downloadable.phtml" hash="5c3f62e8e08f270c271825af6f3d4ee3"/></dir></dir><dir name="edit"><dir name="downloadable"><file name="links.phtml" hash="4c4c76f7b420914552e367e156cfb1f3"/><file name="samples.phtml" hash="238b5442b588cfaefc2987f5d76abe6d"/></dir><file name="downloadable.phtml" hash="0163aee7b9f802c339d26a0dc023ee54"/></dir></dir><dir name="sales"><dir name="items"><dir name="column"><dir name="downloadable"><dir name="creditmemo"><file name="name.phtml" hash="c4611218e11c936a3624a6f4cbbc9254"/></dir><dir name="invoice"><file name="name.phtml" hash="dd49d4ef21ec21e7ff0310978c3e985c"/></dir><file name="name.phtml" hash="d68d9f1a03cc6f9d9545799bc0f109c7"/></dir></dir></dir><dir name="order"><dir name="creditmemo"><dir name="create"><dir name="items"><dir name="renderer"><file name="downloadable.phtml" hash="e7899062fca699d8cd6855681f0f642b"/></dir></dir></dir><dir name="view"><dir name="items"><dir name="renderer"><file name="downloadable.phtml" hash="cc85dc116c67d384803366d811b659d7"/></dir></dir></dir></dir><dir name="invoice"><dir name="create"><dir name="items"><dir name="renderer"><file name="downloadable.phtml" hash="646b8325a080e54c3b01a5a21ee1fa64"/></dir></dir></dir><dir name="view"><dir name="items"><dir name="renderer"><file name="downloadable.phtml" hash="75f191a185c82115f0f285d6c094a8f3"/></dir></dir></dir></dir><dir name="view"><dir name="items"><dir name="renderer"><file name="downloadable.phtml" hash="200b68f81046fa75745c97783aa1c1e4"/></dir></dir></dir></dir></dir></dir><dir name="eav"><dir name="attribute"><dir name="edit"><file name="js.phtml" hash="a157d7da671fc65feccaf80828920af7"/></dir><file name="options.phtml" hash="414f83241511cb480959025492b93c97"/></dir></dir><dir name="email"><dir name="order"><file name="items.phtml" hash="39a3265dd1f23e43869b1a6487dbb837"/></dir></dir><file name="empty.phtml" hash="dc11dfd0a5513f204d8e64a0dd59b524"/><file name="example.phtml" hash="61e7365b1f6244769c3d2adc7fff6eac"/><file name="forgotpassword.phtml" hash="f1af60dd28db0cb0f481dd03a6b79017"/><file name="formkey.phtml" hash="a8780d1ab5742c2638ef088348e1cd40"/><dir name="giftmessage"><file name="form.phtml" hash="f05444a74cdde5113d58f703206ad53a"/><file name="giftoptionsform.phtml" hash="5ebeee5470c2f2da347b698c880358d1"/><file name="helper.phtml" hash="7159c25a0de65125e827de94b6299184"/><file name="popup.phtml" hash="b9ca836a9c200ee818b894bdc229e8ae"/><dir name="sales"><dir name="order"><dir name="create"><file name="giftoptions.phtml" hash="ad7a91503f97c8de1a5c254274cabaa9"/><file name="items.phtml" hash="afdca0d2b223201f34953862ea418eca"/></dir><dir name="view"><file name="giftoptions.phtml" hash="b3a39ac91dcbf4a78518ac7f9f1dc9fa"/><file name="items.phtml" hash="ad31a2367a8cad6018501e330ab63cb5"/></dir></dir></dir></dir><dir name="googlebase"><file name="captcha.phtml" hash="3cdec2b2ca6475de28f26004fc6de41f"/><file name="items.phtml" hash="207706cb901b8a7609d87d26c5951885"/><dir name="types"><dir name="edit"><file name="attributes.phtml" hash="a748071be3b4f0d6e8008e8be6ef532d"/></dir></dir></dir><dir name="importexport"><file name="busy.phtml" hash="3116333a8dd1b8b80346a5386d0694ec"/><dir name="export"><dir name="form"><file name="after.phtml" hash="9ff8469c60617ad8a569db6407cc7209"/><file name="before.phtml" hash="9bc3ccd96ce6f1799c4341343dd667a3"/></dir></dir><dir name="import"><dir name="form"><file name="after.phtml" hash="02b8ccd08d418a4a89f01fbb7cf8eb03"/><file name="before.phtml" hash="d438c8353286ae30aa866a1991e7c6b5"/></dir><dir name="frame"><file name="result.phtml" hash="76baced1d8506842c9e87427c11dcdf1"/></dir></dir><dir name="lightspeed"><file name="categories.phtml" hash="6c2905f729f186fddd0d4eb5b68acb65"/><dir name="customers"><file name="check.phtml" hash="daec9f837cdbb9c740843672e745ac4b"/><file name="sync.phtml" hash="e55c4578f669ac024a88f4c5e0bcc5e9"/></dir><dir name="monitor"><file name="monitor.phtml" hash="384c794e3fa84f8c47100f8579cb115c"/></dir><file name="page.phtml" hash="053652a6ecac5ae793a7c23cdb046d92"/><file name="products.phtml" hash="09554a5954e1e20e13bac7fcb45cfba2"/><file name="sync.phtml" hash="b38023e87be3b1633817c56f8b213bdf"/></dir><file name=".DS_Store" hash="b497e4fce9dc252218c1af9e2a0df6eb"/></dir><dir name="index"><file name="notifications.phtml" hash="224cb079bcb09cc517da8247d1a7da1c"/></dir><dir name="lightspeed"><file name="categories.phtml" hash="6c2905f729f186fddd0d4eb5b68acb65"/><dir name="customers"><file name="check.phtml" hash="daec9f837cdbb9c740843672e745ac4b"/><file name="sync.phtml" hash="e55c4578f669ac024a88f4c5e0bcc5e9"/></dir><dir name="monitor"><file name="monitor.phtml" hash="384c794e3fa84f8c47100f8579cb115c"/></dir><file name="page.phtml" hash="9ee1c8d919c3c95e3c538569c650e051"/><file name="products.phtml" hash="09554a5954e1e20e13bac7fcb45cfba2"/><file name="sync.phtml" hash="b38023e87be3b1633817c56f8b213bdf"/></dir><file name="login.phtml" hash="0642ed2ee75e4bb2a5549905750d570c"/><dir name="media"><file name="editor.phtml" hash="658547871bb249cb0fcae2a9d05e97f9"/><file name="uploader.phtml" hash="4aed2efa2ed120d967f6cf339d6beaf8"/></dir><dir name="moneybookers"><file name="info.phtml" hash="129add6d696aff3d3def0a0671db7eea"/><file name="jsinit.phtml" hash="4f054ef6c3b05db8ce3519103ecf7765"/><dir name="pdf"><file name="info.phtml" hash="7a3f167f935442b14ccde7be113b3c81"/></dir></dir><dir name="newsletter"><dir name="preview"><file name="iframeswitcher.phtml" hash="663f87fcf437290d05e90e0adccfca26"/><file name="store.phtml" hash="72e36ce86d6fe641a2b6e0fdf675ca79"/></dir><dir name="problem"><file name="list.phtml" hash="7e516288963bd5d49595b84614d4ec65"/></dir><dir name="queue"><file name="edit.phtml" hash="115fbefb8b54415db43b38522e28d4c4"/><file name="list.phtml" hash="d1e4b20f8ab5224a4c8e08bf7cdceb2e"/><file name="preview.phtml" hash="323c45a711ac6be32aa6e2ca36ff4551"/></dir><dir name="subscriber"><file name="list.phtml" hash="ddabfee01da30c7311f1d4c98fbeccf4"/></dir><dir name="template"><file name="edit.phtml" hash="9f8a908476e5a7a5af4f3e03c13e6e8e"/><file name="list.phtml" hash="09dcd6515f2a46e0854d108f83d35339"/><file name="preview.phtml" hash="323c45a711ac6be32aa6e2ca36ff4551"/></dir></dir><dir name="notification"><file name="baseurl.phtml" hash="cacaef919143ecd32187d389b08e762e"/><file name="security.phtml" hash="b8784f8ed7672a18cd4ba26e7f9eb74f"/><file name="survey.phtml" hash="4c2e781aaa7109468dc89047159ea3d4"/><file name="toolbar.phtml" hash="51d0d5f4bdbbe4ecc6359536fdb02382"/><file name="window.phtml" hash="5c5ce2129c39758ccd09ae9116a930bb"/></dir><dir name="oauth"><dir name="authorize"><file name="button-simple.phtml" hash="117aced81051bd60de9718237634e66b"/><file name="button.phtml" hash="76264c7d8704103847c58765aa931e14"/><file name="confirm-simple.phtml" hash="6a1638b84aadb8368aef8f4919c3dbec"/><file name="confirm.phtml" hash="f7da9d938f3efdd4d8e3d3a56c0cf583"/><dir name="form"><file name="login-simple.phtml" hash="4b2578daba5463fc530110d5c62cd741"/><file name="login.phtml" hash="e66084f2c20ac508c468eeedb0d6026a"/></dir><file name="head-simple.phtml" hash="9a3abd6e496e054ed315eb278e329a04"/><file name="reject-simple.phtml" hash="1e0067172b8595c6d0001fac93672b97"/><file name="reject.phtml" hash="91a7d29534f38376ac357141bfb02efd"/></dir></dir><file name="overlay_popup.phtml" hash="a5404331cced7214f15524c415c0c5db"/><dir name="page"><file name="footer.phtml" hash="80a45ed883e7bc2a01fe59d106cd2599"/><file name="head.phtml" hash="9ba28cfed2dabd3c35fac9b2d1dc0827"/><file name="header.phtml" hash="4fe6ff37a9fd4db9258e2dd23143513c"/><dir name="js"><file name="calendar.phtml" hash="3cbee9d7437830be4e8f9e41960b8680"/><file name="translate.phtml" hash="ff25b364ee31cc27bc623b4d7d6e2b06"/></dir><file name="menu.phtml" hash="3ac62270650d6146471e331768b9e8d1"/><file name="notices.phtml" hash="a7fa8fba6776316f9be17fa808b6e9e9"/></dir><file name="page.phtml" hash="05333e0c9d770cd1bc3787c1ba4f9a06"/><dir name="pagecache"><dir name="cache"><file name="additional.phtml" hash="90f0eb69aad30bdaceb49cfd6a1df59d"/></dir></dir><dir name="paygate"><dir name="form"><file name="cc.phtml" hash="ef0f6c5d2282f924c722fb295ecd07f8"/></dir><dir name="info"><file name="cc.phtml" hash="3fc02bf7bd7eac20457fc8de2c9457cc"/><file name="pdf.phtml" hash="558564125d66c00d4c6fb79f28895225"/></dir></dir><dir name="payment"><dir name="form"><file name="banktransfer.phtml" hash="ef4ac65f20269428e95d9f16bf306fe5"/><file name="cashondelivery.phtml" hash="70ba292ccc49e87d3448a69d1887df2c"/><file name="cc.phtml" hash="98db95948ddad5e27dc76535eea40eca"/><file name="ccsave.phtml" hash="3a13ba9f67915e1f5873086d4172b9f9"/><file name="checkmo.phtml" hash="9e833f944a08df5c5ff9b04bfd8d9c94"/><file name="purchaseorder.phtml" hash="6f148958ad67d5cc599a955b0e9285d0"/></dir><dir name="info"><file name="banktransfer.phtml" hash="c7f76af0b328dc41128869c9d1b3195c"/><file name="checkmo.phtml" hash="161bdb06bd62d3cfad35f985cc887b3b"/><file name="default.phtml" hash="b12db53fe3c2461ac5963e5d05863a2f"/><dir name="pdf"><file name="checkmo.phtml" hash="a7d1ca034ca4238f9829e4f2c3ab4cbb"/><file name="default.phtml" hash="5574388a4d3f40e642b8cc3ea10e4a42"/><file name="purchaseorder.phtml" hash="03a3ea70c575cb9d4415994c99c2e020"/></dir><file name="purchaseorder.phtml" hash="2bc26c9700709063ede40b916118f676"/></dir></dir><dir name="paypal"><dir name="system"><dir name="config"><file name="api_wizard.phtml" hash="e9690ef79e6b23f95bbdf96e40721f14"/><file name="bml_api_wizard.phtml" hash="cbe794ee0f082aaed569c4780b504f2d"/><dir name="fieldset"><file name="global.phtml" hash="0ce4f7d47c8a867a9ce909e261eb8205"/><file name="hint.phtml" hash="31d746b96738bb5e15ee3f9f6c613517"/><file name="store.phtml" hash="182f87a672c9a25902be7cd793a3ac05"/></dir><dir name="payflowlink"><file name="advanced.phtml" hash="f81c1a9c50dc38f2833a85acacf7b2be"/><file name="info.phtml" hash="7b47740279105badcd1e08c71dfe81d3"/></dir></dir></dir></dir><dir name="permissions"><file name="role_users_grid_js.phtml" hash="215f2ffd5872108b7159e5a35634d4b8"/><file name="roleinfo.phtml" hash="b8a7b2fdc45edc6d177be148e93f0e2f"/><file name="roles.phtml" hash="53bc9a1b7ee14d98f0b72fcc6a7491fe"/><file name="rolesedit.phtml" hash="cdac83e055a7da96de2cb243316125b3"/><file name="rolesusers.phtml" hash="2d0bfd53f80587ede5076a09316730bc"/><file name="user_roles_grid_js.phtml" hash="726a22972e5ec79f593c8871f50fcfa6"/><file name="userinfo.phtml" hash="1da041adaeda5cf3fbffcda2c2fe8162"/><file name="usernroles.phtml" hash="518c15f5653d318d621fa009328e8ff4"/><file name="userroles.phtml" hash="8e1c821bfc5a304027aaab52b6fa6ad9"/><file name="users.phtml" hash="8870de77fdf9064b40199c3657409250"/></dir><dir name="poll"><dir name="answers"><file name="list.phtml" hash="4999a949e32f39087f8975b399a08751"/></dir></dir><file name="popup.phtml" hash="a069010c0f0311f9d6e6322750023866"/><dir name="promo"><file name="fieldset.phtml" hash="83ac20ed14982decf61d6e65bb07619f"/><file name="form.phtml" hash="d2a18f9e2b5578edde09e3707404c1fc"/><file name="js.phtml" hash="fc01078068f318f1aee5bde2530407f9"/><file name="salesrulejs.phtml" hash="5eeb2669c75573ef0112c87abd34098e"/></dir><dir name="rating"><file name="detailed.phtml" hash="b1ebb6c9a4c2d08568daa47e33cb4280"/><file name="options.phtml" hash="e90d63a2fcc078931683fa1c700083f9"/><dir name="stars"><file name="detailed.phtml" hash="bb8772c93d4419861af3c57e6ad2ad82"/><file name="summary.phtml" hash="878eadadd04ce7206a5c8c1ad90ab902"/></dir></dir><dir name="report"><dir name="grid"><file name="container.phtml" hash="24e8cfe8d80c71f3430a26a44df39f97"/></dir><file name="grid.phtml" hash="193fc15705373736c4118270f79ad9c0"/><dir name="refresh"><file name="statistics.phtml" hash="472946c951ae6d965cc34ee1d52ca17d"/></dir><dir name="store"><dir name="switcher"><file name="enhanced.phtml" hash="35aab2de64b3417d549581e016df7f35"/></dir><file name="switcher.phtml" hash="51040ebe87541ee796d5f51cbd8cdd9d"/></dir><file name="wishlist.phtml" hash="1b5ed25c6834e7f5ff656c47408aa487"/></dir><file name="resetforgottenpassword.phtml" hash="c01ef130305d45399a7ad4a1958c72a5"/><dir name="review"><file name="add.phtml" hash="fb1e779aad372d7435b41226042cacbd"/></dir><dir name="sales"><dir name="billing"><dir name="agreement"><file name="form.phtml" hash="d0a3e2443090d3dca66cfef73b31d2a8"/><dir name="view"><file name="form.phtml" hash="d6cc19317501ecd1d67ae6299a7e7188"/><dir name="tab"><file name="info.phtml" hash="41525e41dd9e3fe641c2a4b70f722ff5"/></dir></dir></dir></dir><dir name="items"><dir name="column"><file name="name.phtml" hash="8e9b5ff7f0acc1eb06b802a866043cf8"/><file name="qty.phtml" hash="96d1fbdc48f5a6cfb6879f6015ea62ee"/></dir><dir name="renderer"><file name="default.phtml" hash="c26cd43ec2cd2ff54209db73e17ee171"/></dir></dir><dir name="order"><dir name="address"><file name="form.phtml" hash="44a18fffebbec3ebab7493489cf48b5a"/></dir><dir name="comments"><file name="view.phtml" hash="2aa276a623a6f309136a63cb971d9c1b"/></dir><dir name="create"><file name="abstract.phtml" hash="87668e6cc7397218af85de2b9e770570"/><dir name="billing"><dir name="method"><file name="form.phtml" hash="930b2738464a3a5b5da779b0125b88a0"/></dir></dir><file name="comment.phtml" hash="0dfebe1ea6ec32ff596c0e91dc1f8d9a"/><dir name="coupons"><file name="form.phtml" hash="beca380a8170e69071c7bdcdc6f06c19"/></dir><file name="data.phtml" hash="7db4f7332721ef625847d2ce3d6861b5"/><dir name="form"><file name="account.phtml" hash="9c17cb854e65deaf8f7605c0262ac826"/><file name="address.phtml" hash="a39f4d9908495608e142fcfc62d88eee"/></dir><file name="form.phtml" hash="9066acccf338a81cd84b2afb0ae9f656"/><file name="giftmessage.phtml" hash="b82f727379470052a926bca46dfbcf26"/><dir name="items"><file name="grid.phtml" hash="a0a9130cd73597c00db6b16d62a60eac"/></dir><file name="items.phtml" hash="e6f666ef1fadecf339cddb56b9a4a22e"/><file name="js.phtml" hash="070905621cc5e005aee00185787e6596"/><dir name="newsletter"><file name="form.phtml" hash="fda1dfda324e3504007885f02e70e415"/></dir><dir name="shipping"><dir name="method"><file name="form.phtml" hash="75ca0c223dce8f4dd6f3a82d0e160c08"/></dir></dir><dir name="sidebar"><file name="items.phtml" hash="cbe0b83ed35975bbdaeac1c901a0f8cf"/></dir><file name="sidebar.phtml" hash="ca43f47d8ad22cd90991e3ddf40da8d2"/><dir name="store"><file name="select.phtml" hash="5c5cd4bc086ac1cc3d4a99fdbe8ae0fc"/></dir><dir name="totals"><file name="default.phtml" hash="d50e95571ba6e599160b0269b4c1936d"/><file name="grandtotal.phtml" hash="dd83cae73f716fa26f50d3f52eb533d5"/><file name="shipping.phtml" hash="f688ddab52d23e3d056b95637d999283"/><file name="subtotal.phtml" hash="15650eb3269d23bad4761b6c05f515be"/><file name="tax.phtml" hash="d403970281e8c0f41cb656726f5bdf20"/></dir><file name="totals.phtml" hash="1f84c9377b5102fca3231cd51fb48008"/></dir><dir name="creditmemo"><dir name="create"><file name="form.phtml" hash="fd31573fd94b63f13bf3d5d350c21401"/><dir name="items"><dir name="renderer"><file name="configurable.phtml" hash="ffb752bf6f32409396be59434a965bc2"/><file name="default.phtml" hash="adb50020439923a0232445cc33b58003"/></dir></dir><file name="items.phtml" hash="1e677bf2d70e2eaa494aeb2fdfbe211d"/><dir name="totals"><file name="adjustments.phtml" hash="fa445704929d5bb0f3e2465584e89f24"/></dir></dir><dir name="view"><file name="form.phtml" hash="d873be3310e2f1524430368d6eb2a7fa"/><dir name="items"><dir name="renderer"><file name="configurable.phtml" hash="34bf19c4063a40eaf849080f303cfb10"/><file name="default.phtml" hash="b6c87fe470f369940c8c1a03d927243c"/></dir></dir><file name="items.phtml" hash="a057ec966b7022ec8e3ea20952e2b738"/></dir></dir><file name="giftoptions.phtml" hash="74ebf2c0d71d23f1c2c8d91175ad4df3"/><dir name="invoice"><dir name="create"><file name="form.phtml" hash="926bef890025d9b248112a23949a6750"/><dir name="items"><dir name="renderer"><file name="configurable.phtml" hash="02f58599963fae9d27a34552f6abb294"/><file name="default.phtml" hash="f4065d2d8ea1a9850e830eb26388c0a6"/></dir></dir><file name="items.phtml" hash="6dcaf7f5f7734e88116c435fc71004e0"/><file name="tracking.phtml" hash="566631df2b5d5a16f67249b61f9d21b7"/></dir><dir name="view"><file name="form.phtml" hash="1d69647f7a5a2c89efaadc8dbebbdc3e"/><dir name="items"><dir name="renderer"><file name="configurable.phtml" hash="7d6e204bcda72334dd5c0f622d1c535f"/><file name="default.phtml" hash="aa7640104e8a4a80be8e6ffb7e8bab9c"/></dir></dir><file name="items.phtml" hash="651f3646b367feaafdc6d70fc283abcf"/></dir></dir><dir name="shipment"><dir name="create"><file name="form.phtml" hash="77393d34182eb3f5aa2257996a2ca9c8"/><dir name="items"><dir name="renderer"><file name="configurable.phtml" hash="a9510c86033a30c28782d503b9c8df94"/><file name="default.phtml" hash="ba641caca82c5fa00c1a3b8717647e39"/></dir></dir><file name="items.phtml" hash="7a5a4534ca8f727ced59507cddc7855b"/><file name="tracking.phtml" hash="2d34c20f28e5be469228f3da6c1327d9"/></dir><dir name="packaging"><file name="grid.phtml" hash="ad13677e15f6481a0bda2ba8ab928a80"/><file name="packed.phtml" hash="ba7f36367b2854c98a7f0098d7219d60"/><file name="popup.phtml" hash="597d1d138f060d158b497948399cc036"/></dir><dir name="tracking"><file name="info.phtml" hash="2aec3d18414878b753ec00d1d26e0e05"/></dir><dir name="view"><file name="form.phtml" hash="442dd7140c7f31a9bbb225298e97c803"/><dir name="items"><dir name="renderer"><file name="configurable.phtml" hash="54c457d7901696737ff5906525a69506"/><file name="default.phtml" hash="c04ca11fb71b0642b4ae069621044e26"/></dir></dir><file name="items.phtml" hash="8d47f0716c2c080099a2a86c31cd52a6"/><file name="tracking.phtml" hash="93ead449bb36daa60060a472e1d42449"/></dir></dir><file name="totalbar.phtml" hash="5f553203db2750af47abd5e330c91c9a"/><dir name="totals"><file name="discount.phtml" hash="793dbeb633c82d96a9cd92fc32cb9370"/><file name="due.phtml" hash="64d06e23b183849d233aee89d8e37a71"/><file name="footer.phtml" hash="59238c18df4dabf46daebbd9329f3407"/><file name="grand.phtml" hash="396bfac5f835909cc895a85e80604591"/><file name="item.phtml" hash="975aac85e2766d73bb4e78fbdc123709"/><file name="main.phtml" hash="caaf7b05d5077f53592fccb0742b6caa"/><file name="paid.phtml" hash="3f42df36e0c4135e1794669f4291faa3"/><file name="refunded.phtml" hash="8e1b7650d3072ac5aeb0fad19dcad94a"/><file name="shipping.phtml" hash="dad1657c7897b74d3a077644e92267d3"/><file name="subtotal.phtml" hash="fb1f2b69dd118429786fc085b278e061"/><file name="tax.phtml" hash="0add32eb968e2a22757fb488b52ebaf9"/></dir><file name="totals.phtml" hash="2bc4905f6a18eaa8f16a7a267d1d7bc0"/><dir name="view"><file name="form.phtml" hash="884140eea2a8a201e3d539679c74bd4e"/><file name="giftmessage.phtml" hash="7e2b6103ca41ad0cfa94857c842b3e4e"/><file name="history.phtml" hash="20495fd35df40d30f5cd4f47116ff179"/><file name="info.phtml" hash="d5f3d7b3a34acd6437c93b217071b6d1"/><dir name="items"><dir name="renderer"><file name="default.phtml" hash="4290d9fc416005e6444f1463a41c1797"/></dir></dir><file name="items.phtml" hash="a586817b7d4f5b8aa4d60e9f607460d0"/><dir name="tab"><file name="history.phtml" hash="15c9939b4e5fc15fd6649c30e5257732"/><file name="info.phtml" hash="0bb126376322b50b5d32e44252325d3e"/></dir><file name="tracking.phtml" hash="3aa2a781868975b8615b5007ffe09f3f"/></dir></dir><dir name="payment"><dir name="form"><dir name="billing"><file name="agreement.phtml" hash="2e8b1322d4a929079328f7be68251d71"/></dir></dir></dir><dir name="recurring"><dir name="profile"><dir name="view"><file name="info.phtml" hash="853feb45734a4e7e868397f1adcd8212"/></dir><file name="view.phtml" hash="e8b4d1332f373b5e0b763c74cee132c4"/></dir></dir><dir name="transactions"><file name="detail.phtml" hash="38ff7fc99ab3e84b2e21088fbb06ba67"/></dir></dir><dir name="store"><dir name="switcher"><file name="enhanced.phtml" hash="680de650bc4085e8f144829ef2d52fde"/><dir name="form"><dir name="renderer"><dir name="fieldset"><file name="element.phtml" hash="bbcffed4e9742cb62a82c1c8922848fb"/></dir><file name="fieldset.phtml" hash="aeac068e6fcb9d4f83a3cf69a7d217ae"/></dir></dir></dir><file name="switcher.phtml" hash="8bccfeb8fbe9550667d68c59ffd88a6a"/></dir><dir name="system"><file name="autocomplete.phtml" hash="5116487eadd3c9abf768c53a510e8a0c"/><dir name="cache"><file name="additional.phtml" hash="1e324c3bd984986e1cd5e4b2407b0a65"/><file name="edit.phtml" hash="0b52b9e2f71bc243c13a28fe2f3dc44d"/><file name="notifications.phtml" hash="3cb6f19a2447b8762e0b37ccf9d3f9ef"/></dir><dir name="config"><file name="edit.phtml" hash="b5c5c0f45db92ea28ebef52ecab443ab"/><dir name="form"><dir name="field"><file name="array.phtml" hash="4056bba6c2d7052908496cde812b3ad7"/></dir></dir><file name="js.phtml" hash="4c803af5e8d4cceaef2d9a024544aaa3"/><file name="switcher.phtml" hash="71957dfe39d3c9d407f2e2dde60ee627"/><dir name="system"><dir name="storage"><dir name="media"><file name="synchronize.phtml" hash="642fdd06a98e60c022b17a2c21d6c150"/></dir></dir></dir><file name="tabs.phtml" hash="b2a0b0d6e6ef78a3331058d436c85d58"/></dir><dir name="convert"><dir name="profile"><file name="process.phtml" hash="c264449f64200faafd23f13ee4c280a8"/><file name="run.phtml" hash="1385574623381ae6190a5036a5f6c494"/><file name="upload.phtml" hash="490ae85dbc033921f9d4dfb6bcddbda0"/><file name="wizard.phtml" hash="406af7e65822d682792bb67c7ba46b46"/></dir></dir><dir name="currency"><dir name="rate"><file name="matrix.phtml" hash="3b7d6dcc201d3c410134549d031a13cf"/><file name="services.phtml" hash="3f02ebcd0453499120d53cf6ed5605c8"/></dir><file name="rates.phtml" hash="d4817348c3546f2de375693680c1d5f3"/></dir><dir name="design"><file name="edit.phtml" hash="c372c796fdb2c2df861466d0683db4bb"/><file name="index.phtml" hash="07b64f5b045f5f7a21d62c33cc941b08"/></dir><dir name="email"><dir name="template"><file name="edit.phtml" hash="449b79b474e8162cf60e5d87bbc05d62"/><file name="list.phtml" hash="a58d24b14b0c605666004e8686fc4db4"/><file name="preview.phtml" hash="161d807801ee3f54f6bb374a2d3320f0"/></dir></dir><file name="info.phtml" hash="058d4471564fd61cdcd209841a64559c"/><dir name="shipping"><file name="applicable_country.phtml" hash="4054118945c82eb4d62020d5835faf16"/><file name="ups.phtml" hash="954ed961b8b5afeb767d05dc42fbd5a0"/></dir><dir name="store"><file name="cell.phtml" hash="5e536a3648f041e5266fe304b20f1973"/><file name="container.phtml" hash="c193a3659949c7a3853c485c317d17c0"/><file name="tree.phtml" hash="2dfe92243c31aede2f59b803a477682f"/></dir><dir name="variable"><file name="js.phtml" hash="60bfbb9a1d34993f49848fd66810dcd4"/></dir></dir><dir name="tag"><dir name="edit"><file name="container.phtml" hash="6f1ed70983a5e0e962dd143fc9d888c2"/></dir><file name="index.phtml" hash="1d13f70f97adf04129914dddd20fb21d"/></dir><dir name="tax"><dir name="class"><dir name="page"><file name="edit.phtml" hash="79fa2f76476b4e4d83fd14f5b58ef2ba"/></dir></dir><file name="importExport.phtml" hash="c64e789dbfde6e988b2e7a552300f3c3"/><file name="notifications.phtml" hash="400027105fb5d2dc50fe3b53160f99e8"/><dir name="rate"><file name="form.phtml" hash="3a01fc7ae1295acd9344b028b464fbdc"/><file name="title.phtml" hash="cd2580f98a026221b90dd9dc9072f7b6"/></dir><dir name="toolbar"><dir name="class"><file name="add.phtml" hash="902868a4362beaaa4429a382d50a94b6"/><file name="save.phtml" hash="c8114ea2171a06a4298d3f5a47468362"/></dir><dir name="rate"><file name="add.phtml" hash="1b9e3098f50d7032d9bf261f822f234c"/><file name="save.phtml" hash="43046c416cc95a85983b07625c819e0f"/></dir><dir name="rule"><file name="add.phtml" hash="50b8df0f2174ea2e7dbea6a32273cd9a"/><file name="save.phtml" hash="a8e4768185ded9a788ebbaf2539ea9ee"/></dir></dir></dir><dir name="urlrewrite"><file name="categories.phtml" hash="f4745e0c1f3ed8592155425fb167ee72"/><file name="edit.phtml" hash="aeeb3d475b577c2e94d72276fd7b173d"/><file name="selector.phtml" hash="8464a51d50b6a9d34504e51d0637c62c"/></dir><dir name="usa"><dir name="dhl"><file name="unitofmeasure.phtml" hash="e023266efeaa2447d84205387b010dd0"/></dir></dir><dir name="weee"><dir name="renderer"><file name="tax.phtml" hash="3ddf217b5c08adbf68229497ced24f1d"/></dir></dir><dir name="widget"><file name="accordion.phtml" hash="7eebf8248a85fab5e6c105c85aeca828"/><file name="breadcrumbs.phtml" hash="4dcf1e68d9e86398c0838b6088c5259d"/><dir name="form"><file name="container.phtml" hash="9571f84ae785e22c936b2e0a34f5dc53"/><dir name="element"><file name="gallery.phtml" hash="dae0d464587c7d0b51945fb98a05d710"/></dir><file name="element.phtml" hash="3e7a4f6485d35baf57b28ae242eed5aa"/><dir name="renderer"><file name="element.phtml" hash="b528817c5810af724758a22e8456db4c"/><dir name="fieldset"><file name="element.phtml" hash="56c51c40d97220912c1e29567bcfe54e"/></dir><file name="fieldset.phtml" hash="3c9a1ea4b4d297d52a17082ffcb2ded1"/></dir></dir><file name="form.phtml" hash="233a22bfa09819c4a2f6c7c9ac6df1ba"/><dir name="grid"><file name="container.phtml" hash="c193a3659949c7a3853c485c317d17c0"/><file name="massaction.phtml" hash="be2d3dfdb7315621f7384785c110e5d0"/><file name="serializer.phtml" hash="53dc425f39abc542fe08cac9bd5aeb89"/></dir><file name="grid.phtml" hash="0f037697e1fd988112cb995bd871f7b2"/><dir name="instance"><dir name="edit"><file name="layout.phtml" hash="117fe57fc7a179da8c049b1eef8d4244"/></dir><file name="js.phtml" hash="297a6f76398e0565ead47c4acbd93028"/></dir><file name="tabs.phtml" hash="86399d7972f4f6d7fa75b1a477b8de6d"/><file name="tabshoriz.phtml" hash="c28ed0f33f7ed4e417044fb67d2eefdf"/><file name="tabsleft.phtml" hash="6908e52aec15512a0d0d23230dcbe9e6"/><dir name="view"><file name="container.phtml" hash="5ed3bd2509e46ab2f282084a1f1b39b0"/></dir></dir><dir name="xmlconnect"><dir name="edit"><dir name="tab"><file name="content.phtml" hash="266811c484d964f25c5745fe5835122e"/><dir name="design"><file name="autocomplete.phtml" hash="64f05165d9d130c4c0bb5f4645c2e96a"/><file name="image_edit.phtml" hash="2ea2905b08c0d539be36bbc48a3d57ce"/><file name="images_android.phtml" hash="24211b28d85f842f232651c3837f1dd1"/><file name="images_ipad.phtml" hash="4a44837d7af2eab709c4fcd75c7cd747"/><file name="images_iphone.phtml" hash="4383dad1a3cb18ff0582741b72df2d1e"/><dir name="preview"><file name="banner_rotator.phtml" hash="48e801691835c055f5b03335fce1fde2"/><file name="catalog_android.phtml" hash="5e1698370f1a6c389f504c19a357d75b"/><file name="catalog_hor_ipad.phtml" hash="c7df4c4839644104a1f644c3c6fb9e35"/><file name="catalog_ipad.phtml" hash="16de7a7d82fcd02f4e34e781d8528077"/><file name="catalog_iphone.phtml" hash="4f17a7b75a2d0acd96e12a5a82406882"/><file name="home_android.phtml" hash="af1a34d6342be2f1516438aa1f1010ea"/><file name="home_hor_ipad.phtml" hash="0d496870b150f8d3aed29cf34bd6bb3d"/><file name="home_ipad.phtml" hash="54682f9b1ab3867fdab3d3693e4f2f80"/><file name="home_iphone.phtml" hash="ee50332a20bc06f396b5af35c68bec6b"/><file name="productinfo_iphone.phtml" hash="dfbf5d80472c44afd3e7f6e5dab9e71a"/><file name="tab_items_android.phtml" hash="4c87ad1c2ce1704115844c1d85f40a3d"/><file name="tab_items_ipad.phtml" hash="083ff4a9d8b67e46af02c47d16eb1e50"/><file name="tab_items_iphone.phtml" hash="bd846526c5027b1abd3d108a32713d9d"/></dir><file name="preview_android.phtml" hash="e101f6af1e62cfb868946604ddda7723"/><file name="preview_ipad.phtml" hash="0f137d8659120a94d0b63347a48761aa"/><file name="preview_iphone.phtml" hash="960a5b378e3c4fa0ff7c2a52cff3da9b"/></dir><file name="design.phtml" hash="e98774a742511fdddf69a41ccec2bc1f"/><file name="offlinecatalog.phtml" hash="1284b54efd7e51e68725cb41d34863a3"/></dir></dir><dir name="form"><dir name="element"><file name="addrow.phtml" hash="77355ef7f1900b4929cf1b65a9f66490"/><file name="app_tabs_android.phtml" hash="16fbe7cb5d6306fed7bb02719cc5a15b"/><file name="app_tabs_ipad.phtml" hash="20150dcba6664aaeaaa8426c73fe9e81"/><file name="app_tabs_iphone.phtml" hash="9d1a5d9bee80c3087bb67168d4ca6f50"/><dir name="country"><file name="androidmarket.phtml" hash="2293db926831dc5cec3661dd42d42e40"/><file name="istore.phtml" hash="7f54ec1a3ffe01d86df1b245d6ce61f6"/></dir><file name="themes.phtml" hash="3cdc62d743d16822f162e57731aaed85"/></dir></dir><dir name="mobile"><file name="notification_helper.phtml" hash="dddb79ecd092446fd789f634a838cbbc"/></dir><dir name="submission"><file name="app_icons_preview.phtml" hash="9990e6fceefcc855484fd455a5f1e655"/><file name="container.phtml" hash="10276444ad0e23c97bab376472f5fd91"/></dir><dir name="template"><file name="preview.phtml" hash="1b2d92307f2a1c54e5538eb1ed3bd58e"/></dir></dir><file name=".DS_Store" hash="14492b973ebdefba00c61daae116e2a1"/></dir><file name=".DS_Store" hash="d8a38452b3a49c56eeeb91406c23d2aa"/></dir><file name=".DS_Store" hash="a3584810e2c074c97d312a360b165ee1"/></dir><file name=".DS_Store" hash="2162a1662c1f24f19d2abcf2b850833e"/></dir></target><target name="mageetc"><dir name="modules"><file name="Lightspeed_Syncproducts.xml" hash="fe01e9aff4fc3fb1bca199788de8d7a2"/></dir></target></contents>
|
17 |
<compatible/>
|
18 |
<dependencies><required><php><min>5.3.10</min><max>6.0.0</max></php></required></dependencies>
|
19 |
</package>
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>Lightspeed_Restaurant_POS_connector</name>
|
4 |
+
<version>0.0.2</version>
|
5 |
<stability>devel</stability>
|
6 |
<license>Commercial Agreement</license>
|
7 |
<channel>community</channel>
|
11 |
<notes>- Enables syncing of products from the restaurant POS with magento
|
12 |
- Enables sending of orders from magento to the restaurant POS</notes>
|
13 |
<authors><author><name>Joris De Smedt</name><user>Joris</user><email>Joris.DeSmedt@lightspeedhq.com</email></author><author><name>Jonas Ostir</name><user>Jonas</user><email>Jonas.Ostir@lightspeedhq.com</email></author><author><name>Jasper Decaestecker</name><user>Jasper</user><email>Jasper.Decaestecker@lightspeedhq.com</email></author></authors>
|
14 |
+
<date>2016-03-25</date>
|
15 |
+
<time>10:12:28</time>
|
16 |
+
<contents><target name="magelocal"><dir name="Lightspeed"><dir name="Syncproducts"><dir name="Block"><file name="Establishmentfields.php" hash="97031eaa7c37a349cd5a1fb34c2ef408"/><file name="Monitor.php" hash="3f5b0f22ccb4a508f5cea3ab272e7f5e"/><file name="Paymentfields.php" hash="1265f7f5477387d1305d688b8c9d4d66"/><file name="Shippingfields.php" hash="8ef23f94d7a1f2b3ddbbd6a72a53e2ca"/><file name="Synccustomers.php" hash="7c710f95acef3f772dcb3d99a86d2fb7"/><file name="Syncproducts.php" hash="d1cef88b211b51864b3d61ac3225c1f7"/></dir><dir name="Helper"><file name="Api.php" hash="ac82341cd6888249c26b7249aa4095c9"/><file name="Data.php" hash="1b25115bfc303bf13112ba02b3e211ec"/><file name="Import.php" hash="77d92a5f0e811edeab74c828c8f61938"/><file name="SyncProcess.php" hash="a90b9c943c7d35a5f3f3a5859306ba0a"/></dir><dir name="Model"><dir name="Category"><file name="Source.php" hash="826a55675a2f84f88d1fb45c572f022d"/></dir><dir name="Log"><file name="Log.php" hash="44a15a74ace916156472a7ea85b44957"/><dir name="Resource"><file name="Collection.php" hash="2693857dad446782543b1bbfe54e7114"/><file name="Log.php" hash="246eacb54d9d9398c91d0477833c20d8"/><file name="Setup.php" hash="9c1aa20cd2403572f19c8a50d5711f68"/></dir></dir><dir name="Order"><file name="Observer.php" hash="db7b2aad1209850d799a5c1a35d93d72"/></dir><dir name="Payment"><file name="Source.php" hash="f451b12b2716f5687bc3a079dc5fb1a9"/></dir><dir name="Product"><file name="Source.php" hash="64d037c61587b54a98d590e415274027"/></dir><dir name="Tax"><file name="Source.php" hash="5245dccc5ae49e4b1a4ec4244e64e6d8"/></dir></dir><dir name="controllers"><file name="MonitorController.php" hash="5d70985a2cb498e17c44dfade63eea1d"/><file name="SynccustomersController.php" hash="60f6f3fe1d4321b98ff3646023f9575c"/><file name="SyncproductsController.php" hash="458234c3eea7c9b0826d9124b694f9b9"/></dir><dir name="etc"><file name="adminhtml.xml" hash="59f6515ebb69f3c751b9a7d148ac2abe"/><file name="config.xml" hash="3f2f2170440995ad26da3d9ddef04f92"/><file name="system.xml" hash="a8237da4d81857880fd9242461c5b81b"/></dir><dir name="sql"><dir name="syncproducts_setup"><file name="mysql4-install-1.0.0.0.1.php" hash="56fa3461cebee665b11d43ee52aff996"/><file name="mysql4-install-1.0.0.0.2.php" hash="98e81da9b27ec7b587d3c20451b2e075"/><file name="mysql4-install-1.0.0.0.3.php" hash="b48a3bfc685e76fd3ca902bfdd04bc86"/><file name="mysql4-install-1.0.0.0.4.php" hash="d860a4c8912619a1bd6566e8c61bb4b0"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="etc"><file name="theme.xml" hash="b2a8d19b50efdccb7294cb2fe0640bd9"/></dir><dir name="layout"><file name="admin.xml" hash="7673095003a923321a6cd3578a953d71"/><file name="adminnotification.xml" hash="85a3fddad5ac4c86c647af7fe9cb93aa"/><file name="api2.xml" hash="1553c8fc8975d4d3731d9ef1a980481c"/><file name="authorizenet.xml" hash="29398fbaa4aee1701b299030d1fdaa65"/><file name="bundle.xml" hash="a6f325767991615fb6f55b089f5cdb68"/><file name="captcha.xml" hash="773f4b12d14b8c15951f37379666a5d0"/><file name="catalog.xml" hash="cce43dab0c12d58cd0ffcb1d15e95265"/><file name="centinel.xml" hash="ad5d8ca958576c1d72e696e68f0cd7af"/><file name="cms.xml" hash="5d53f0cea555323cea366c694b0b8b50"/><file name="compiler.xml" hash="4324e94b02f151fb51b71d6861582e21"/><file name="connect.xml" hash="745dc82e3b474824618c0ec987d4c3cd"/><file name="currencysymbol.xml" hash="3b3f5366a1fa4071690c8aac7f7b0688"/><file name="customer.xml" hash="30a904f4f4c8115ad5bad942b1c5b35e"/><file name="dataflow.xml" hash="cd1cbca5ec5de17a6c1fcffd471de45a"/><file name="downloadable.xml" hash="40d181b85a0a3e2a96b932677ade5100"/><file name="giftmessage.xml" hash="4917df8ba7e9f4ac8e4c89cdca626952"/><file name="importexport.xml" hash="243a7394b4414e92cc79916a31a62b76"/><file name="index.xml" hash="c7090c9ed0e718692035ace720ba594c"/><file name="lightspeed_syncproducts.xml" hash="71f0b81a015e007c1b5e03a7f58a5088"/><file name="main.xml" hash="33327a2728bbab9fd5b5ebd8d6d95a35"/><file name="moneybookers.xml" hash="15da5e881a50e29328a473c02bb66af2"/><file name="newsletter.xml" hash="eec98653b5a1697abd2427cc5765a3f2"/><file name="oauth.xml" hash="021b577a885658a30e7e214111673662"/><file name="pagecache.xml" hash="351f149efad7a2fd6855f78cb22d99e0"/><file name="promo.xml" hash="5de780df32953fa4196acc7d5945d594"/><file name="report.xml" hash="298eeb94c7fab08e5170be3044a2218b"/><file name="rss.xml" hash="11f7ad61a6454b6480bd6e61c45552fd"/><file name="sales.xml" hash="dfd156d90f1f41aa9bce30a2d00aef0f"/><file name="search.xml" hash="07c52129f77b32c5f8822612dc3a52f2"/><file name="tag.xml" hash="9115a18f7a5afb3ebe3282a00c6f5cc3"/><file name="tax.xml" hash="f26e2e81e90a4e1793f7a1c8f0384ca2"/><file name="widget.xml" hash="a8c277f25878e9abf97d3db9a328173d"/><file name="xmlconnect.xml" hash="ba732d2baa971c0f07014f54b6296d5e"/><file name=".DS_Store" hash="194577a7e20bdcc7afbb718f502c134c"/></dir><dir name="locale"><dir name="en_US"><file name="translate.csv" hash="735c9ec66d1309f1206294f075fdcdd1"/></dir></dir><dir name="template"><file name="access_denied.phtml" hash="8dbb6e9cd97de65e449307a722aadd7c"/><dir name="api"><file name="role_users_grid_js.phtml" hash="58b17ab917d3fbe0cf4d39efe1eff5a2"/><file name="roleinfo.phtml" hash="0d3e851caa0cfe495ed3c7583bcb0e9b"/><file name="roles.phtml" hash="34455eccb50176e4418a631cd58b13cc"/><file name="rolesedit.phtml" hash="a654b87bde63333de332a10dea633ee0"/><file name="rolesusers.phtml" hash="2d0bfd53f80587ede5076a09316730bc"/><file name="user_roles_grid_js.phtml" hash="d62e060ed6bc165a2dda7e925118fd33"/><file name="userinfo.phtml" hash="1da041adaeda5cf3fbffcda2c2fe8162"/><file name="usernroles.phtml" hash="518c15f5653d318d621fa009328e8ff4"/><file name="userroles.phtml" hash="8e1c821bfc5a304027aaab52b6fa6ad9"/><file name="users.phtml" hash="8870de77fdf9064b40199c3657409250"/></dir><dir name="api2"><dir name="attribute"><file name="buttons.phtml" hash="1d8c7fa3ecd2a34bb71d058c977807de"/><file name="resource.phtml" hash="6fa291254e6f5633438e073d4bbf476c"/></dir><dir name="permissions"><dir name="user"><dir name="edit"><dir name="tab"><dir name="roles"><file name="js.phtml" hash="23cbf23b2bd60241b3f2ba84037013d7"/></dir></dir></dir></dir></dir><dir name="role"><file name="buttons.phtml" hash="7977aedb0697363be95f111b1daac14f"/><file name="users_grid_js.phtml" hash="54ad901cfa9eec64e4b6fa5b906154c5"/></dir></dir><dir name="authorizenet"><dir name="directpost"><file name="iframe.phtml" hash="b60d2ae78aa8b51a6189f0ec2126ffb5"/><file name="info.phtml" hash="0576d40d650c271b1aeaa7afea925562"/></dir></dir><dir name="backup"><file name="dialogs.phtml" hash="b2be33d149636aa4202bd9484a4895be"/><file name="left.phtml" hash="941469c86247edb83906948620702dc8"/><file name="list.phtml" hash="4f9cabcf6ee200da26abca1863b8c8e5"/></dir><dir name="bundle"><dir name="product"><dir name="composite"><dir name="fieldset"><dir name="options"><file name="bundle.phtml" hash="3e68cf91a42b1d6fb8352a904be3e05c"/><dir name="type"><file name="checkbox.phtml" hash="29716d05f391ee379764b61ffea4a7af"/><file name="multi.phtml" hash="6442017f21afef7f88e3e1580c93c16c"/><file name="radio.phtml" hash="a2ee9d9c2ee7b5f49a0e55f5fb3bacd7"/><file name="select.phtml" hash="bb7efbaafc5fac7f08b6300999c65c26"/></dir></dir></dir></dir><dir name="edit"><dir name="bundle"><dir name="option"><file name="search.phtml" hash="174d6ce47791eb3af38a531097e0169c"/><file name="selection.phtml" hash="3a5e0b53a85d802f8f585f30d9d91b6c"/></dir><file name="option.phtml" hash="d5cf246d803062a0f2e389e609bf7d75"/></dir><file name="bundle.phtml" hash="b6b81d2ec1b4cbcf42b84177355c3e69"/></dir></dir><dir name="sales"><dir name="creditmemo"><dir name="create"><dir name="items"><file name="renderer.phtml" hash="584d1e49407f54691ec39dbfb6753650"/></dir></dir><dir name="view"><dir name="items"><file name="renderer.phtml" hash="d7c3bd4fda964206bdf0e3f35ea2ca0b"/></dir></dir></dir><dir name="invoice"><dir name="create"><dir name="items"><file name="renderer.phtml" hash="092f6d7b581afb8318b3739e2ae4676a"/></dir></dir><dir name="view"><dir name="items"><file name="renderer.phtml" hash="25ff3d9c62580dc64633a83d00cbe837"/></dir></dir></dir><dir name="order"><dir name="view"><dir name="items"><file name="renderer.phtml" hash="0ac8d28e86364682468c0aa62a6556a0"/></dir></dir></dir><dir name="shipment"><dir name="create"><dir name="items"><file name="renderer.phtml" hash="54900b64d810ea023e6cb7fd3047c478"/></dir></dir><dir name="view"><dir name="items"><file name="renderer.phtml" hash="23a1dbe1789bdea7f89828a522fa2e6d"/></dir></dir></dir></dir></dir><dir name="captcha"><file name="zend.phtml" hash="b9136f6fde3ca8db1910dba7164755e6"/></dir><dir name="catalog"><dir name="category"><dir name="checkboxes"><file name="tree.phtml" hash="fa73258285c3f5136eb2259c5e9c32ce"/></dir><dir name="edit"><file name="form.phtml" hash="da4caa491156e9ec93648e257676daf7"/></dir><file name="edit.phtml" hash="89720b660be938c17214d375efe1eac6"/><file name="tree.phtml" hash="03c888ab242fc217947f6be538352852"/><dir name="widget"><file name="tree.phtml" hash="7935d6ed9f73fe8ce65d459cee761e67"/></dir></dir><dir name="form"><dir name="renderer"><dir name="fieldset"><file name="element.phtml" hash="2a8a73d131f5f2b814fa3eda859732b5"/></dir></dir></dir><dir name="product"><dir name="attribute"><file name="js.phtml" hash="87e87066a6672421f382939493730cdb"/><dir name="new"><file name="created.phtml" hash="c291386f1246516dabe303e6fba5f25a"/></dir><file name="options.phtml" hash="70c79d6d98b5a37d64977aff9f7ef070"/><dir name="set"><dir name="main"><dir name="tree"><file name="attribute.phtml" hash="a157d7da671fc65feccaf80828920af7"/><file name="group.phtml" hash="3e277218d8db83269704c78414149e8a"/></dir></dir><file name="main.phtml" hash="dbfe23d0e768b6917e00f57dfd77c376"/><dir name="toolbar"><file name="add.phtml" hash="77642e01f1d3d3ab5a8bc498e06196d4"/><file name="main.phtml" hash="f19159c8a6f042068c6adb244342da3a"/></dir></dir></dir><dir name="composite"><file name="configure.phtml" hash="df9c13c584cf69d114bab301b624a663"/><dir name="fieldset"><file name="configurable.phtml" hash="8b031155a3fd892a99002fb14d95f739"/><file name="grouped.phtml" hash="280fa7fa681fbdbcd906ac0eae252d34"/><dir name="options"><file name="js.phtml" hash="2e6606df0fc6a85e6830c4770727e9ab"/><dir name="type"><file name="date.phtml" hash="5d531f14f863441b18baed53eb843d06"/><file name="default.phtml" hash="f7023ea6e084a02acbc1967e113cfbdb"/><file name="file.phtml" hash="31ea434be8436027c52ee13121819d07"/><file name="select.phtml" hash="0ea9745d78b48989af24cce83d98086d"/><file name="text.phtml" hash="af5f02e802e2f0683e625acf2a7524f2"/></dir></dir><file name="options.phtml" hash="e446617e5bbb69e86808802bf5e74a94"/><file name="qty.phtml" hash="e50ce8515f9525e7002e3bd575598c48"/></dir></dir><file name="created.phtml" hash="44c428d1e480d560f854e4fded34fb7e"/><dir name="edit"><dir name="action"><file name="attribute.phtml" hash="038b9519cd81a2e0415f07d8ab44c324"/><file name="inventory.phtml" hash="e3f76e2aba03c8d99654c0ab13ede9a9"/><file name="websites.phtml" hash="022606c920bb19cfcf059e0d8aab2f42"/></dir><file name="categories.phtml" hash="9ddf60da59842cc2eada068668262c6f"/><dir name="options"><file name="option.phtml" hash="171b7d40a2c0384da6f80bc6464c4613"/><dir name="type"><file name="date.phtml" hash="46387e35a71e2db682d2667dd734da39"/><file name="file.phtml" hash="bc063b0c0648eda20a9fc6f2fb74f6b4"/><file name="select.phtml" hash="3d3b73db244d990365f654b0808d8aa3"/><file name="text.phtml" hash="7d4d97b724efdb0f8a722c8e5266b5e5"/></dir></dir><file name="options.phtml" hash="2fbbce0689d701afc08a8034d88f4df0"/><dir name="price"><file name="group.phtml" hash="aae224d67f0316e568acbc64ec437ee6"/><file name="tier.phtml" hash="25566f8552d2cc5901b5de64d3c32d0e"/></dir><file name="serializer.phtml" hash="7b4ec92b7931d8cb3275550b103ae67b"/><dir name="super"><file name="config.phtml" hash="478a64b5d0fbac6984dcc35057f86898"/></dir><file name="websites.phtml" hash="8cf36120d48b173cfe64562b58c0b078"/></dir><file name="edit.phtml" hash="2fcacd48a3d918a369b04edecc4fd711"/><dir name="helper"><file name="gallery.phtml" hash="3fd2327364752b437a9423671f127149"/></dir><file name="js.phtml" hash="8db2dfe0008ca19ff9c92477ce02c4b3"/><file name="price.phtml" hash="2a2a08d4b3a7f940cc691c65f1eb7f05"/><dir name="tab"><file name="alert.phtml" hash="9504feb264a7e9508c0ebb3b2b7d0d4c"/><file name="inventory.phtml" hash="107d0981170b03b0945fa1407e0d224c"/></dir><dir name="widget"><dir name="chooser"><file name="container.phtml" hash="f6df2480b1b2a231a825c588de46f950"/></dir></dir></dir><file name="product.phtml" hash="3417d9e8324e0a5177cb2607b3b80a3e"/><dir name="wysiwyg"><file name="js.phtml" hash="cd97c9fc1595ada331b1ab52b1e082b1"/></dir></dir><dir name="centinel"><dir name="authentication"><file name="complete.phtml" hash="39753ca8c4bb8a4256937ea3473edd3d"/><file name="start.phtml" hash="3aeb35151c1307005518eed58c4b93c8"/></dir><dir name="validation"><file name="form.phtml" hash="5ec27390f38732612313d97341440ad1"/></dir></dir><dir name="cms"><dir name="browser"><dir name="content"><file name="files.phtml" hash="27a67f8a7d84cd381888954c918ce49b"/><file name="newfolder.phtml" hash="79f5c4e6ea869183fadcae2f28a2ca98"/><file name="uploader.phtml" hash="8644b1acefb64b4eead9246f62512d5d"/></dir><file name="content.phtml" hash="4793e1a90ef3830bf7f0966db6b32dd2"/><file name="js.phtml" hash="648b7152e7b4928e0f5bf96969b1faa9"/><file name="tree.phtml" hash="0e35c8acf6a78f5b8d0ac0e3f51cb26f"/></dir><dir name="page"><dir name="edit"><dir name="form"><dir name="renderer"><file name="content.phtml" hash="1c668e7828761ef2e9b7502e77f024a9"/></dir></dir></dir></dir></dir><file name="coming.phtml" hash="9a9e3443216823df9b850a09746a693f"/><dir name="compiler"><file name="process.phtml" hash="87dac1553883293128960c8180678b96"/></dir><dir name="connect"><dir name="extension"><dir name="custom"><file name="authors.phtml" hash="3c07396912ba301635fea098d58db910"/><file name="contents.phtml" hash="70b8105701963239291cd9ade20560d1"/><file name="depends.phtml" hash="96cb091ca8dc3711a559646af1f05a87"/><file name="load.phtml" hash="69358a9869e5539f670c7919f2d3c9bd"/><file name="package.phtml" hash="9636d710c062379de2c79a31e6f55c35"/><file name="release.phtml" hash="cdb74462f1b92b4a7691c18b1f962242"/></dir></dir></dir><dir name="currencysymbol"><file name="grid.phtml" hash="0fbd928a449619caa1851a668208ee0c"/></dir><dir name="customer"><dir name="edit"><file name="js.phtml" hash="f279dd3107bf597c070dbd2cf8575d4f"/><dir name="tab"><dir name="account"><dir name="form"><dir name="renderer"><file name="group.phtml" hash="bf9c409b08e3d4cbddae4549d25389fc"/></dir></dir></dir><dir name="view"><dir name="grid"><file name="item.phtml" hash="24761bd6239d6e15bd40c97ac97695f6"/></dir></dir></dir></dir><file name="online.phtml" hash="4b977f5f6011af8b1821ee0a137a7cc6"/><dir name="sales"><dir name="order"><dir name="create"><dir name="address"><dir name="form"><dir name="renderer"><file name="vat.phtml" hash="d64535d30e050d8076b9fdfa8e60245f"/></dir></dir></dir></dir></dir></dir><dir name="system"><dir name="config"><file name="validatevat.phtml" hash="72790f671038f5d6792f0ae6f562ccbd"/></dir></dir><dir name="tab"><file name="addresses.phtml" hash="dc8015dce2c7bed3dbd6c42b94d6ba78"/><file name="cart.phtml" hash="c6afbc059beda2934118179bd89c9694"/><file name="newsletter.phtml" hash="fb1a9455e4cf0e3630d63ef4fdf0d89f"/><dir name="view"><file name="sales.phtml" hash="7b9ac3b6cc20d6daf2a3e9d31ec97fb3"/></dir><file name="view.phtml" hash="b584ae9122c996c4814db5804a29ee83"/><file name="wishlist.phtml" hash="1f233e6ca971df7f52c870a1a4fc4e5b"/></dir></dir><dir name="dashboard"><dir name="graph"><file name="disabled.phtml" hash="18092101a40e6dcf67dd3eb139a058d5"/></dir><file name="graph.phtml" hash="80be9cf21076a06f3c69064d9a5b65ec"/><file name="grid.phtml" hash="21dec746d3b0cc0164a3d2ec46745705"/><file name="index.phtml" hash="69843e35012550256797a8cf10a6ed21"/><file name="salebar.phtml" hash="b404c2a4f40491d94768898e335801a8"/><file name="searches.phtml" hash="6254c3a5c6e3c5c2b1c433b6fd09eb55"/><dir name="store"><file name="switcher.phtml" hash="2cd8a97f1276ddad0dc3b4cbc7030554"/></dir><file name="totalbar.phtml" hash="95e23bc92daf5cd12393e48bd8af12ec"/></dir><dir name="directory"><dir name="js"><file name="optional_zip_countries.phtml" hash="53eaa267c9b2fd6fa6a53009d8f17010"/></dir></dir><dir name="downloadable"><dir name="product"><dir name="composite"><dir name="fieldset"><file name="downloadable.phtml" hash="5c3f62e8e08f270c271825af6f3d4ee3"/></dir></dir><dir name="edit"><dir name="downloadable"><file name="links.phtml" hash="4c4c76f7b420914552e367e156cfb1f3"/><file name="samples.phtml" hash="238b5442b588cfaefc2987f5d76abe6d"/></dir><file name="downloadable.phtml" hash="0163aee7b9f802c339d26a0dc023ee54"/></dir></dir><dir name="sales"><dir name="items"><dir name="column"><dir name="downloadable"><dir name="creditmemo"><file name="name.phtml" hash="c4611218e11c936a3624a6f4cbbc9254"/></dir><dir name="invoice"><file name="name.phtml" hash="dd49d4ef21ec21e7ff0310978c3e985c"/></dir><file name="name.phtml" hash="d68d9f1a03cc6f9d9545799bc0f109c7"/></dir></dir></dir><dir name="order"><dir name="creditmemo"><dir name="create"><dir name="items"><dir name="renderer"><file name="downloadable.phtml" hash="e7899062fca699d8cd6855681f0f642b"/></dir></dir></dir><dir name="view"><dir name="items"><dir name="renderer"><file name="downloadable.phtml" hash="cc85dc116c67d384803366d811b659d7"/></dir></dir></dir></dir><dir name="invoice"><dir name="create"><dir name="items"><dir name="renderer"><file name="downloadable.phtml" hash="646b8325a080e54c3b01a5a21ee1fa64"/></dir></dir></dir><dir name="view"><dir name="items"><dir name="renderer"><file name="downloadable.phtml" hash="75f191a185c82115f0f285d6c094a8f3"/></dir></dir></dir></dir><dir name="view"><dir name="items"><dir name="renderer"><file name="downloadable.phtml" hash="200b68f81046fa75745c97783aa1c1e4"/></dir></dir></dir></dir></dir></dir><dir name="eav"><dir name="attribute"><dir name="edit"><file name="js.phtml" hash="a157d7da671fc65feccaf80828920af7"/></dir><file name="options.phtml" hash="414f83241511cb480959025492b93c97"/></dir></dir><dir name="email"><dir name="order"><file name="items.phtml" hash="39a3265dd1f23e43869b1a6487dbb837"/></dir></dir><file name="empty.phtml" hash="dc11dfd0a5513f204d8e64a0dd59b524"/><file name="example.phtml" hash="61e7365b1f6244769c3d2adc7fff6eac"/><file name="forgotpassword.phtml" hash="f1af60dd28db0cb0f481dd03a6b79017"/><file name="formkey.phtml" hash="a8780d1ab5742c2638ef088348e1cd40"/><dir name="giftmessage"><file name="form.phtml" hash="f05444a74cdde5113d58f703206ad53a"/><file name="giftoptionsform.phtml" hash="5ebeee5470c2f2da347b698c880358d1"/><file name="helper.phtml" hash="7159c25a0de65125e827de94b6299184"/><file name="popup.phtml" hash="b9ca836a9c200ee818b894bdc229e8ae"/><dir name="sales"><dir name="order"><dir name="create"><file name="giftoptions.phtml" hash="ad7a91503f97c8de1a5c254274cabaa9"/><file name="items.phtml" hash="afdca0d2b223201f34953862ea418eca"/></dir><dir name="view"><file name="giftoptions.phtml" hash="b3a39ac91dcbf4a78518ac7f9f1dc9fa"/><file name="items.phtml" hash="ad31a2367a8cad6018501e330ab63cb5"/></dir></dir></dir></dir><dir name="googlebase"><file name="captcha.phtml" hash="3cdec2b2ca6475de28f26004fc6de41f"/><file name="items.phtml" hash="207706cb901b8a7609d87d26c5951885"/><dir name="types"><dir name="edit"><file name="attributes.phtml" hash="a748071be3b4f0d6e8008e8be6ef532d"/></dir></dir></dir><dir name="importexport"><file name="busy.phtml" hash="3116333a8dd1b8b80346a5386d0694ec"/><dir name="export"><dir name="form"><file name="after.phtml" hash="9ff8469c60617ad8a569db6407cc7209"/><file name="before.phtml" hash="9bc3ccd96ce6f1799c4341343dd667a3"/></dir></dir><dir name="import"><dir name="form"><file name="after.phtml" hash="02b8ccd08d418a4a89f01fbb7cf8eb03"/><file name="before.phtml" hash="d438c8353286ae30aa866a1991e7c6b5"/></dir><dir name="frame"><file name="result.phtml" hash="76baced1d8506842c9e87427c11dcdf1"/></dir></dir><dir name="lightspeed"><file name="categories.phtml" hash="6c2905f729f186fddd0d4eb5b68acb65"/><dir name="customers"><file name="check.phtml" hash="daec9f837cdbb9c740843672e745ac4b"/><file name="sync.phtml" hash="e55c4578f669ac024a88f4c5e0bcc5e9"/></dir><dir name="monitor"><file name="monitor.phtml" hash="384c794e3fa84f8c47100f8579cb115c"/></dir><file name="page.phtml" hash="053652a6ecac5ae793a7c23cdb046d92"/><file name="products.phtml" hash="09554a5954e1e20e13bac7fcb45cfba2"/><file name="sync.phtml" hash="b38023e87be3b1633817c56f8b213bdf"/></dir><file name=".DS_Store" hash="b497e4fce9dc252218c1af9e2a0df6eb"/></dir><dir name="index"><file name="notifications.phtml" hash="224cb079bcb09cc517da8247d1a7da1c"/></dir><dir name="lightspeed"><file name="categories.phtml" hash="6c2905f729f186fddd0d4eb5b68acb65"/><dir name="customers"><file name="check.phtml" hash="daec9f837cdbb9c740843672e745ac4b"/><file name="sync.phtml" hash="e55c4578f669ac024a88f4c5e0bcc5e9"/></dir><dir name="monitor"><file name="monitor.phtml" hash="e6bde218ec87e7e383cccb71aac6ece0"/></dir><file name="page.phtml" hash="e71bbcda4da5107373a9b7cc6bf1bdf4"/><file name="products.phtml" hash="6b20fad1fb16ad9d081085c2336337e7"/><file name="sync.phtml" hash="b38023e87be3b1633817c56f8b213bdf"/></dir><file name="login.phtml" hash="0642ed2ee75e4bb2a5549905750d570c"/><dir name="media"><file name="editor.phtml" hash="658547871bb249cb0fcae2a9d05e97f9"/><file name="uploader.phtml" hash="4aed2efa2ed120d967f6cf339d6beaf8"/></dir><dir name="moneybookers"><file name="info.phtml" hash="129add6d696aff3d3def0a0671db7eea"/><file name="jsinit.phtml" hash="4f054ef6c3b05db8ce3519103ecf7765"/><dir name="pdf"><file name="info.phtml" hash="7a3f167f935442b14ccde7be113b3c81"/></dir></dir><dir name="newsletter"><dir name="preview"><file name="iframeswitcher.phtml" hash="663f87fcf437290d05e90e0adccfca26"/><file name="store.phtml" hash="72e36ce86d6fe641a2b6e0fdf675ca79"/></dir><dir name="problem"><file name="list.phtml" hash="7e516288963bd5d49595b84614d4ec65"/></dir><dir name="queue"><file name="edit.phtml" hash="115fbefb8b54415db43b38522e28d4c4"/><file name="list.phtml" hash="d1e4b20f8ab5224a4c8e08bf7cdceb2e"/><file name="preview.phtml" hash="323c45a711ac6be32aa6e2ca36ff4551"/></dir><dir name="subscriber"><file name="list.phtml" hash="ddabfee01da30c7311f1d4c98fbeccf4"/></dir><dir name="template"><file name="edit.phtml" hash="9f8a908476e5a7a5af4f3e03c13e6e8e"/><file name="list.phtml" hash="09dcd6515f2a46e0854d108f83d35339"/><file name="preview.phtml" hash="323c45a711ac6be32aa6e2ca36ff4551"/></dir></dir><dir name="notification"><file name="baseurl.phtml" hash="cacaef919143ecd32187d389b08e762e"/><file name="security.phtml" hash="b8784f8ed7672a18cd4ba26e7f9eb74f"/><file name="survey.phtml" hash="4c2e781aaa7109468dc89047159ea3d4"/><file name="toolbar.phtml" hash="51d0d5f4bdbbe4ecc6359536fdb02382"/><file name="window.phtml" hash="5c5ce2129c39758ccd09ae9116a930bb"/></dir><dir name="oauth"><dir name="authorize"><file name="button-simple.phtml" hash="117aced81051bd60de9718237634e66b"/><file name="button.phtml" hash="76264c7d8704103847c58765aa931e14"/><file name="confirm-simple.phtml" hash="6a1638b84aadb8368aef8f4919c3dbec"/><file name="confirm.phtml" hash="f7da9d938f3efdd4d8e3d3a56c0cf583"/><dir name="form"><file name="login-simple.phtml" hash="4b2578daba5463fc530110d5c62cd741"/><file name="login.phtml" hash="e66084f2c20ac508c468eeedb0d6026a"/></dir><file name="head-simple.phtml" hash="9a3abd6e496e054ed315eb278e329a04"/><file name="reject-simple.phtml" hash="1e0067172b8595c6d0001fac93672b97"/><file name="reject.phtml" hash="91a7d29534f38376ac357141bfb02efd"/></dir></dir><file name="overlay_popup.phtml" hash="a5404331cced7214f15524c415c0c5db"/><dir name="page"><file name="footer.phtml" hash="80a45ed883e7bc2a01fe59d106cd2599"/><file name="head.phtml" hash="9ba28cfed2dabd3c35fac9b2d1dc0827"/><file name="header.phtml" hash="4fe6ff37a9fd4db9258e2dd23143513c"/><dir name="js"><file name="calendar.phtml" hash="3cbee9d7437830be4e8f9e41960b8680"/><file name="translate.phtml" hash="ff25b364ee31cc27bc623b4d7d6e2b06"/></dir><file name="menu.phtml" hash="3ac62270650d6146471e331768b9e8d1"/><file name="notices.phtml" hash="a7fa8fba6776316f9be17fa808b6e9e9"/></dir><file name="page.phtml" hash="05333e0c9d770cd1bc3787c1ba4f9a06"/><dir name="pagecache"><dir name="cache"><file name="additional.phtml" hash="90f0eb69aad30bdaceb49cfd6a1df59d"/></dir></dir><dir name="paygate"><dir name="form"><file name="cc.phtml" hash="ef0f6c5d2282f924c722fb295ecd07f8"/></dir><dir name="info"><file name="cc.phtml" hash="3fc02bf7bd7eac20457fc8de2c9457cc"/><file name="pdf.phtml" hash="558564125d66c00d4c6fb79f28895225"/></dir></dir><dir name="payment"><dir name="form"><file name="banktransfer.phtml" hash="ef4ac65f20269428e95d9f16bf306fe5"/><file name="cashondelivery.phtml" hash="70ba292ccc49e87d3448a69d1887df2c"/><file name="cc.phtml" hash="98db95948ddad5e27dc76535eea40eca"/><file name="ccsave.phtml" hash="3a13ba9f67915e1f5873086d4172b9f9"/><file name="checkmo.phtml" hash="9e833f944a08df5c5ff9b04bfd8d9c94"/><file name="purchaseorder.phtml" hash="6f148958ad67d5cc599a955b0e9285d0"/></dir><dir name="info"><file name="banktransfer.phtml" hash="c7f76af0b328dc41128869c9d1b3195c"/><file name="checkmo.phtml" hash="161bdb06bd62d3cfad35f985cc887b3b"/><file name="default.phtml" hash="b12db53fe3c2461ac5963e5d05863a2f"/><dir name="pdf"><file name="checkmo.phtml" hash="a7d1ca034ca4238f9829e4f2c3ab4cbb"/><file name="default.phtml" hash="5574388a4d3f40e642b8cc3ea10e4a42"/><file name="purchaseorder.phtml" hash="03a3ea70c575cb9d4415994c99c2e020"/></dir><file name="purchaseorder.phtml" hash="2bc26c9700709063ede40b916118f676"/></dir></dir><dir name="paypal"><dir name="system"><dir name="config"><file name="api_wizard.phtml" hash="e9690ef79e6b23f95bbdf96e40721f14"/><file name="bml_api_wizard.phtml" hash="cbe794ee0f082aaed569c4780b504f2d"/><dir name="fieldset"><file name="global.phtml" hash="0ce4f7d47c8a867a9ce909e261eb8205"/><file name="hint.phtml" hash="31d746b96738bb5e15ee3f9f6c613517"/><file name="store.phtml" hash="182f87a672c9a25902be7cd793a3ac05"/></dir><dir name="payflowlink"><file name="advanced.phtml" hash="f81c1a9c50dc38f2833a85acacf7b2be"/><file name="info.phtml" hash="7b47740279105badcd1e08c71dfe81d3"/></dir></dir></dir></dir><dir name="permissions"><file name="role_users_grid_js.phtml" hash="215f2ffd5872108b7159e5a35634d4b8"/><file name="roleinfo.phtml" hash="b8a7b2fdc45edc6d177be148e93f0e2f"/><file name="roles.phtml" hash="53bc9a1b7ee14d98f0b72fcc6a7491fe"/><file name="rolesedit.phtml" hash="cdac83e055a7da96de2cb243316125b3"/><file name="rolesusers.phtml" hash="2d0bfd53f80587ede5076a09316730bc"/><file name="user_roles_grid_js.phtml" hash="726a22972e5ec79f593c8871f50fcfa6"/><file name="userinfo.phtml" hash="1da041adaeda5cf3fbffcda2c2fe8162"/><file name="usernroles.phtml" hash="518c15f5653d318d621fa009328e8ff4"/><file name="userroles.phtml" hash="8e1c821bfc5a304027aaab52b6fa6ad9"/><file name="users.phtml" hash="8870de77fdf9064b40199c3657409250"/></dir><dir name="poll"><dir name="answers"><file name="list.phtml" hash="4999a949e32f39087f8975b399a08751"/></dir></dir><file name="popup.phtml" hash="a069010c0f0311f9d6e6322750023866"/><dir name="promo"><file name="fieldset.phtml" hash="83ac20ed14982decf61d6e65bb07619f"/><file name="form.phtml" hash="d2a18f9e2b5578edde09e3707404c1fc"/><file name="js.phtml" hash="fc01078068f318f1aee5bde2530407f9"/><file name="salesrulejs.phtml" hash="5eeb2669c75573ef0112c87abd34098e"/></dir><dir name="rating"><file name="detailed.phtml" hash="b1ebb6c9a4c2d08568daa47e33cb4280"/><file name="options.phtml" hash="e90d63a2fcc078931683fa1c700083f9"/><dir name="stars"><file name="detailed.phtml" hash="bb8772c93d4419861af3c57e6ad2ad82"/><file name="summary.phtml" hash="878eadadd04ce7206a5c8c1ad90ab902"/></dir></dir><dir name="report"><dir name="grid"><file name="container.phtml" hash="24e8cfe8d80c71f3430a26a44df39f97"/></dir><file name="grid.phtml" hash="193fc15705373736c4118270f79ad9c0"/><dir name="refresh"><file name="statistics.phtml" hash="472946c951ae6d965cc34ee1d52ca17d"/></dir><dir name="store"><dir name="switcher"><file name="enhanced.phtml" hash="35aab2de64b3417d549581e016df7f35"/></dir><file name="switcher.phtml" hash="51040ebe87541ee796d5f51cbd8cdd9d"/></dir><file name="wishlist.phtml" hash="1b5ed25c6834e7f5ff656c47408aa487"/></dir><file name="resetforgottenpassword.phtml" hash="c01ef130305d45399a7ad4a1958c72a5"/><dir name="review"><file name="add.phtml" hash="fb1e779aad372d7435b41226042cacbd"/></dir><dir name="sales"><dir name="billing"><dir name="agreement"><file name="form.phtml" hash="d0a3e2443090d3dca66cfef73b31d2a8"/><dir name="view"><file name="form.phtml" hash="d6cc19317501ecd1d67ae6299a7e7188"/><dir name="tab"><file name="info.phtml" hash="41525e41dd9e3fe641c2a4b70f722ff5"/></dir></dir></dir></dir><dir name="items"><dir name="column"><file name="name.phtml" hash="8e9b5ff7f0acc1eb06b802a866043cf8"/><file name="qty.phtml" hash="96d1fbdc48f5a6cfb6879f6015ea62ee"/></dir><dir name="renderer"><file name="default.phtml" hash="c26cd43ec2cd2ff54209db73e17ee171"/></dir></dir><dir name="order"><dir name="address"><file name="form.phtml" hash="44a18fffebbec3ebab7493489cf48b5a"/></dir><dir name="comments"><file name="view.phtml" hash="2aa276a623a6f309136a63cb971d9c1b"/></dir><dir name="create"><file name="abstract.phtml" hash="87668e6cc7397218af85de2b9e770570"/><dir name="billing"><dir name="method"><file name="form.phtml" hash="930b2738464a3a5b5da779b0125b88a0"/></dir></dir><file name="comment.phtml" hash="0dfebe1ea6ec32ff596c0e91dc1f8d9a"/><dir name="coupons"><file name="form.phtml" hash="beca380a8170e69071c7bdcdc6f06c19"/></dir><file name="data.phtml" hash="7db4f7332721ef625847d2ce3d6861b5"/><dir name="form"><file name="account.phtml" hash="9c17cb854e65deaf8f7605c0262ac826"/><file name="address.phtml" hash="a39f4d9908495608e142fcfc62d88eee"/></dir><file name="form.phtml" hash="9066acccf338a81cd84b2afb0ae9f656"/><file name="giftmessage.phtml" hash="b82f727379470052a926bca46dfbcf26"/><dir name="items"><file name="grid.phtml" hash="a0a9130cd73597c00db6b16d62a60eac"/></dir><file name="items.phtml" hash="e6f666ef1fadecf339cddb56b9a4a22e"/><file name="js.phtml" hash="070905621cc5e005aee00185787e6596"/><dir name="newsletter"><file name="form.phtml" hash="fda1dfda324e3504007885f02e70e415"/></dir><dir name="shipping"><dir name="method"><file name="form.phtml" hash="75ca0c223dce8f4dd6f3a82d0e160c08"/></dir></dir><dir name="sidebar"><file name="items.phtml" hash="cbe0b83ed35975bbdaeac1c901a0f8cf"/></dir><file name="sidebar.phtml" hash="ca43f47d8ad22cd90991e3ddf40da8d2"/><dir name="store"><file name="select.phtml" hash="5c5cd4bc086ac1cc3d4a99fdbe8ae0fc"/></dir><dir name="totals"><file name="default.phtml" hash="d50e95571ba6e599160b0269b4c1936d"/><file name="grandtotal.phtml" hash="dd83cae73f716fa26f50d3f52eb533d5"/><file name="shipping.phtml" hash="f688ddab52d23e3d056b95637d999283"/><file name="subtotal.phtml" hash="15650eb3269d23bad4761b6c05f515be"/><file name="tax.phtml" hash="d403970281e8c0f41cb656726f5bdf20"/></dir><file name="totals.phtml" hash="1f84c9377b5102fca3231cd51fb48008"/></dir><dir name="creditmemo"><dir name="create"><file name="form.phtml" hash="fd31573fd94b63f13bf3d5d350c21401"/><dir name="items"><dir name="renderer"><file name="configurable.phtml" hash="ffb752bf6f32409396be59434a965bc2"/><file name="default.phtml" hash="adb50020439923a0232445cc33b58003"/></dir></dir><file name="items.phtml" hash="1e677bf2d70e2eaa494aeb2fdfbe211d"/><dir name="totals"><file name="adjustments.phtml" hash="fa445704929d5bb0f3e2465584e89f24"/></dir></dir><dir name="view"><file name="form.phtml" hash="d873be3310e2f1524430368d6eb2a7fa"/><dir name="items"><dir name="renderer"><file name="configurable.phtml" hash="34bf19c4063a40eaf849080f303cfb10"/><file name="default.phtml" hash="b6c87fe470f369940c8c1a03d927243c"/></dir></dir><file name="items.phtml" hash="a057ec966b7022ec8e3ea20952e2b738"/></dir></dir><file name="giftoptions.phtml" hash="74ebf2c0d71d23f1c2c8d91175ad4df3"/><dir name="invoice"><dir name="create"><file name="form.phtml" hash="926bef890025d9b248112a23949a6750"/><dir name="items"><dir name="renderer"><file name="configurable.phtml" hash="02f58599963fae9d27a34552f6abb294"/><file name="default.phtml" hash="f4065d2d8ea1a9850e830eb26388c0a6"/></dir></dir><file name="items.phtml" hash="6dcaf7f5f7734e88116c435fc71004e0"/><file name="tracking.phtml" hash="566631df2b5d5a16f67249b61f9d21b7"/></dir><dir name="view"><file name="form.phtml" hash="1d69647f7a5a2c89efaadc8dbebbdc3e"/><dir name="items"><dir name="renderer"><file name="configurable.phtml" hash="7d6e204bcda72334dd5c0f622d1c535f"/><file name="default.phtml" hash="aa7640104e8a4a80be8e6ffb7e8bab9c"/></dir></dir><file name="items.phtml" hash="651f3646b367feaafdc6d70fc283abcf"/></dir></dir><dir name="shipment"><dir name="create"><file name="form.phtml" hash="77393d34182eb3f5aa2257996a2ca9c8"/><dir name="items"><dir name="renderer"><file name="configurable.phtml" hash="a9510c86033a30c28782d503b9c8df94"/><file name="default.phtml" hash="ba641caca82c5fa00c1a3b8717647e39"/></dir></dir><file name="items.phtml" hash="7a5a4534ca8f727ced59507cddc7855b"/><file name="tracking.phtml" hash="2d34c20f28e5be469228f3da6c1327d9"/></dir><dir name="packaging"><file name="grid.phtml" hash="ad13677e15f6481a0bda2ba8ab928a80"/><file name="packed.phtml" hash="ba7f36367b2854c98a7f0098d7219d60"/><file name="popup.phtml" hash="597d1d138f060d158b497948399cc036"/></dir><dir name="tracking"><file name="info.phtml" hash="2aec3d18414878b753ec00d1d26e0e05"/></dir><dir name="view"><file name="form.phtml" hash="442dd7140c7f31a9bbb225298e97c803"/><dir name="items"><dir name="renderer"><file name="configurable.phtml" hash="54c457d7901696737ff5906525a69506"/><file name="default.phtml" hash="c04ca11fb71b0642b4ae069621044e26"/></dir></dir><file name="items.phtml" hash="8d47f0716c2c080099a2a86c31cd52a6"/><file name="tracking.phtml" hash="93ead449bb36daa60060a472e1d42449"/></dir></dir><file name="totalbar.phtml" hash="5f553203db2750af47abd5e330c91c9a"/><dir name="totals"><file name="discount.phtml" hash="793dbeb633c82d96a9cd92fc32cb9370"/><file name="due.phtml" hash="64d06e23b183849d233aee89d8e37a71"/><file name="footer.phtml" hash="59238c18df4dabf46daebbd9329f3407"/><file name="grand.phtml" hash="396bfac5f835909cc895a85e80604591"/><file name="item.phtml" hash="975aac85e2766d73bb4e78fbdc123709"/><file name="main.phtml" hash="caaf7b05d5077f53592fccb0742b6caa"/><file name="paid.phtml" hash="3f42df36e0c4135e1794669f4291faa3"/><file name="refunded.phtml" hash="8e1b7650d3072ac5aeb0fad19dcad94a"/><file name="shipping.phtml" hash="dad1657c7897b74d3a077644e92267d3"/><file name="subtotal.phtml" hash="fb1f2b69dd118429786fc085b278e061"/><file name="tax.phtml" hash="0add32eb968e2a22757fb488b52ebaf9"/></dir><file name="totals.phtml" hash="2bc4905f6a18eaa8f16a7a267d1d7bc0"/><dir name="view"><file name="form.phtml" hash="884140eea2a8a201e3d539679c74bd4e"/><file name="giftmessage.phtml" hash="7e2b6103ca41ad0cfa94857c842b3e4e"/><file name="history.phtml" hash="20495fd35df40d30f5cd4f47116ff179"/><file name="info.phtml" hash="d5f3d7b3a34acd6437c93b217071b6d1"/><dir name="items"><dir name="renderer"><file name="default.phtml" hash="4290d9fc416005e6444f1463a41c1797"/></dir></dir><file name="items.phtml" hash="a586817b7d4f5b8aa4d60e9f607460d0"/><dir name="tab"><file name="history.phtml" hash="15c9939b4e5fc15fd6649c30e5257732"/><file name="info.phtml" hash="0bb126376322b50b5d32e44252325d3e"/></dir><file name="tracking.phtml" hash="3aa2a781868975b8615b5007ffe09f3f"/></dir></dir><dir name="payment"><dir name="form"><dir name="billing"><file name="agreement.phtml" hash="2e8b1322d4a929079328f7be68251d71"/></dir></dir></dir><dir name="recurring"><dir name="profile"><dir name="view"><file name="info.phtml" hash="853feb45734a4e7e868397f1adcd8212"/></dir><file name="view.phtml" hash="e8b4d1332f373b5e0b763c74cee132c4"/></dir></dir><dir name="transactions"><file name="detail.phtml" hash="38ff7fc99ab3e84b2e21088fbb06ba67"/></dir></dir><dir name="store"><dir name="switcher"><file name="enhanced.phtml" hash="680de650bc4085e8f144829ef2d52fde"/><dir name="form"><dir name="renderer"><dir name="fieldset"><file name="element.phtml" hash="bbcffed4e9742cb62a82c1c8922848fb"/></dir><file name="fieldset.phtml" hash="aeac068e6fcb9d4f83a3cf69a7d217ae"/></dir></dir></dir><file name="switcher.phtml" hash="8bccfeb8fbe9550667d68c59ffd88a6a"/></dir><dir name="system"><file name="autocomplete.phtml" hash="5116487eadd3c9abf768c53a510e8a0c"/><dir name="cache"><file name="additional.phtml" hash="1e324c3bd984986e1cd5e4b2407b0a65"/><file name="edit.phtml" hash="0b52b9e2f71bc243c13a28fe2f3dc44d"/><file name="notifications.phtml" hash="3cb6f19a2447b8762e0b37ccf9d3f9ef"/></dir><dir name="config"><file name="edit.phtml" hash="b5c5c0f45db92ea28ebef52ecab443ab"/><dir name="form"><dir name="field"><file name="array.phtml" hash="4056bba6c2d7052908496cde812b3ad7"/></dir></dir><file name="js.phtml" hash="4c803af5e8d4cceaef2d9a024544aaa3"/><file name="switcher.phtml" hash="71957dfe39d3c9d407f2e2dde60ee627"/><dir name="system"><dir name="storage"><dir name="media"><file name="synchronize.phtml" hash="642fdd06a98e60c022b17a2c21d6c150"/></dir></dir></dir><file name="tabs.phtml" hash="b2a0b0d6e6ef78a3331058d436c85d58"/></dir><dir name="convert"><dir name="profile"><file name="process.phtml" hash="c264449f64200faafd23f13ee4c280a8"/><file name="run.phtml" hash="1385574623381ae6190a5036a5f6c494"/><file name="upload.phtml" hash="490ae85dbc033921f9d4dfb6bcddbda0"/><file name="wizard.phtml" hash="406af7e65822d682792bb67c7ba46b46"/></dir></dir><dir name="currency"><dir name="rate"><file name="matrix.phtml" hash="3b7d6dcc201d3c410134549d031a13cf"/><file name="services.phtml" hash="3f02ebcd0453499120d53cf6ed5605c8"/></dir><file name="rates.phtml" hash="d4817348c3546f2de375693680c1d5f3"/></dir><dir name="design"><file name="edit.phtml" hash="c372c796fdb2c2df861466d0683db4bb"/><file name="index.phtml" hash="07b64f5b045f5f7a21d62c33cc941b08"/></dir><dir name="email"><dir name="template"><file name="edit.phtml" hash="449b79b474e8162cf60e5d87bbc05d62"/><file name="list.phtml" hash="a58d24b14b0c605666004e8686fc4db4"/><file name="preview.phtml" hash="161d807801ee3f54f6bb374a2d3320f0"/></dir></dir><file name="info.phtml" hash="058d4471564fd61cdcd209841a64559c"/><dir name="shipping"><file name="applicable_country.phtml" hash="4054118945c82eb4d62020d5835faf16"/><file name="ups.phtml" hash="954ed961b8b5afeb767d05dc42fbd5a0"/></dir><dir name="store"><file name="cell.phtml" hash="5e536a3648f041e5266fe304b20f1973"/><file name="container.phtml" hash="c193a3659949c7a3853c485c317d17c0"/><file name="tree.phtml" hash="2dfe92243c31aede2f59b803a477682f"/></dir><dir name="variable"><file name="js.phtml" hash="60bfbb9a1d34993f49848fd66810dcd4"/></dir></dir><dir name="tag"><dir name="edit"><file name="container.phtml" hash="6f1ed70983a5e0e962dd143fc9d888c2"/></dir><file name="index.phtml" hash="1d13f70f97adf04129914dddd20fb21d"/></dir><dir name="tax"><dir name="class"><dir name="page"><file name="edit.phtml" hash="79fa2f76476b4e4d83fd14f5b58ef2ba"/></dir></dir><file name="importExport.phtml" hash="c64e789dbfde6e988b2e7a552300f3c3"/><file name="notifications.phtml" hash="400027105fb5d2dc50fe3b53160f99e8"/><dir name="rate"><file name="form.phtml" hash="3a01fc7ae1295acd9344b028b464fbdc"/><file name="title.phtml" hash="cd2580f98a026221b90dd9dc9072f7b6"/></dir><dir name="toolbar"><dir name="class"><file name="add.phtml" hash="902868a4362beaaa4429a382d50a94b6"/><file name="save.phtml" hash="c8114ea2171a06a4298d3f5a47468362"/></dir><dir name="rate"><file name="add.phtml" hash="1b9e3098f50d7032d9bf261f822f234c"/><file name="save.phtml" hash="43046c416cc95a85983b07625c819e0f"/></dir><dir name="rule"><file name="add.phtml" hash="50b8df0f2174ea2e7dbea6a32273cd9a"/><file name="save.phtml" hash="a8e4768185ded9a788ebbaf2539ea9ee"/></dir></dir></dir><dir name="urlrewrite"><file name="categories.phtml" hash="f4745e0c1f3ed8592155425fb167ee72"/><file name="edit.phtml" hash="aeeb3d475b577c2e94d72276fd7b173d"/><file name="selector.phtml" hash="8464a51d50b6a9d34504e51d0637c62c"/></dir><dir name="usa"><dir name="dhl"><file name="unitofmeasure.phtml" hash="e023266efeaa2447d84205387b010dd0"/></dir></dir><dir name="weee"><dir name="renderer"><file name="tax.phtml" hash="3ddf217b5c08adbf68229497ced24f1d"/></dir></dir><dir name="widget"><file name="accordion.phtml" hash="7eebf8248a85fab5e6c105c85aeca828"/><file name="breadcrumbs.phtml" hash="4dcf1e68d9e86398c0838b6088c5259d"/><dir name="form"><file name="container.phtml" hash="9571f84ae785e22c936b2e0a34f5dc53"/><dir name="element"><file name="gallery.phtml" hash="dae0d464587c7d0b51945fb98a05d710"/></dir><file name="element.phtml" hash="3e7a4f6485d35baf57b28ae242eed5aa"/><dir name="renderer"><file name="element.phtml" hash="b528817c5810af724758a22e8456db4c"/><dir name="fieldset"><file name="element.phtml" hash="56c51c40d97220912c1e29567bcfe54e"/></dir><file name="fieldset.phtml" hash="3c9a1ea4b4d297d52a17082ffcb2ded1"/></dir></dir><file name="form.phtml" hash="233a22bfa09819c4a2f6c7c9ac6df1ba"/><dir name="grid"><file name="container.phtml" hash="c193a3659949c7a3853c485c317d17c0"/><file name="massaction.phtml" hash="be2d3dfdb7315621f7384785c110e5d0"/><file name="serializer.phtml" hash="53dc425f39abc542fe08cac9bd5aeb89"/></dir><file name="grid.phtml" hash="0f037697e1fd988112cb995bd871f7b2"/><dir name="instance"><dir name="edit"><file name="layout.phtml" hash="117fe57fc7a179da8c049b1eef8d4244"/></dir><file name="js.phtml" hash="297a6f76398e0565ead47c4acbd93028"/></dir><file name="tabs.phtml" hash="86399d7972f4f6d7fa75b1a477b8de6d"/><file name="tabshoriz.phtml" hash="c28ed0f33f7ed4e417044fb67d2eefdf"/><file name="tabsleft.phtml" hash="6908e52aec15512a0d0d23230dcbe9e6"/><dir name="view"><file name="container.phtml" hash="5ed3bd2509e46ab2f282084a1f1b39b0"/></dir></dir><dir name="xmlconnect"><dir name="edit"><dir name="tab"><file name="content.phtml" hash="266811c484d964f25c5745fe5835122e"/><dir name="design"><file name="autocomplete.phtml" hash="64f05165d9d130c4c0bb5f4645c2e96a"/><file name="image_edit.phtml" hash="2ea2905b08c0d539be36bbc48a3d57ce"/><file name="images_android.phtml" hash="24211b28d85f842f232651c3837f1dd1"/><file name="images_ipad.phtml" hash="4a44837d7af2eab709c4fcd75c7cd747"/><file name="images_iphone.phtml" hash="4383dad1a3cb18ff0582741b72df2d1e"/><dir name="preview"><file name="banner_rotator.phtml" hash="48e801691835c055f5b03335fce1fde2"/><file name="catalog_android.phtml" hash="5e1698370f1a6c389f504c19a357d75b"/><file name="catalog_hor_ipad.phtml" hash="c7df4c4839644104a1f644c3c6fb9e35"/><file name="catalog_ipad.phtml" hash="16de7a7d82fcd02f4e34e781d8528077"/><file name="catalog_iphone.phtml" hash="4f17a7b75a2d0acd96e12a5a82406882"/><file name="home_android.phtml" hash="af1a34d6342be2f1516438aa1f1010ea"/><file name="home_hor_ipad.phtml" hash="0d496870b150f8d3aed29cf34bd6bb3d"/><file name="home_ipad.phtml" hash="54682f9b1ab3867fdab3d3693e4f2f80"/><file name="home_iphone.phtml" hash="ee50332a20bc06f396b5af35c68bec6b"/><file name="productinfo_iphone.phtml" hash="dfbf5d80472c44afd3e7f6e5dab9e71a"/><file name="tab_items_android.phtml" hash="4c87ad1c2ce1704115844c1d85f40a3d"/><file name="tab_items_ipad.phtml" hash="083ff4a9d8b67e46af02c47d16eb1e50"/><file name="tab_items_iphone.phtml" hash="bd846526c5027b1abd3d108a32713d9d"/></dir><file name="preview_android.phtml" hash="e101f6af1e62cfb868946604ddda7723"/><file name="preview_ipad.phtml" hash="0f137d8659120a94d0b63347a48761aa"/><file name="preview_iphone.phtml" hash="960a5b378e3c4fa0ff7c2a52cff3da9b"/></dir><file name="design.phtml" hash="e98774a742511fdddf69a41ccec2bc1f"/><file name="offlinecatalog.phtml" hash="1284b54efd7e51e68725cb41d34863a3"/></dir></dir><dir name="form"><dir name="element"><file name="addrow.phtml" hash="77355ef7f1900b4929cf1b65a9f66490"/><file name="app_tabs_android.phtml" hash="16fbe7cb5d6306fed7bb02719cc5a15b"/><file name="app_tabs_ipad.phtml" hash="20150dcba6664aaeaaa8426c73fe9e81"/><file name="app_tabs_iphone.phtml" hash="9d1a5d9bee80c3087bb67168d4ca6f50"/><dir name="country"><file name="androidmarket.phtml" hash="2293db926831dc5cec3661dd42d42e40"/><file name="istore.phtml" hash="7f54ec1a3ffe01d86df1b245d6ce61f6"/></dir><file name="themes.phtml" hash="3cdc62d743d16822f162e57731aaed85"/></dir></dir><dir name="mobile"><file name="notification_helper.phtml" hash="dddb79ecd092446fd789f634a838cbbc"/></dir><dir name="submission"><file name="app_icons_preview.phtml" hash="9990e6fceefcc855484fd455a5f1e655"/><file name="container.phtml" hash="10276444ad0e23c97bab376472f5fd91"/></dir><dir name="template"><file name="preview.phtml" hash="1b2d92307f2a1c54e5538eb1ed3bd58e"/></dir></dir><file name=".DS_Store" hash="14492b973ebdefba00c61daae116e2a1"/></dir><file name=".DS_Store" hash="d8a38452b3a49c56eeeb91406c23d2aa"/></dir><file name=".DS_Store" hash="a3584810e2c074c97d312a360b165ee1"/></dir><file name=".DS_Store" hash="2162a1662c1f24f19d2abcf2b850833e"/></dir></target><target name="mageetc"><dir name="modules"><file name="Lightspeed_Syncproducts.xml" hash="c39d8144a47c5842170eedf2ef4f8a3a"/></dir></target></contents>
|
17 |
<compatible/>
|
18 |
<dependencies><required><php><min>5.3.10</min><max>6.0.0</max></php></required></dependencies>
|
19 |
</package>
|