Lightspeed_Restaurant_POS_connector - Version 0.0.2

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 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($vatIncl){
 
 
 
 
 
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
- * $response = $this->post(self::SECURITY_API, "token/establishment/".$establishmentId);
51
- * if($response["status"] == 200){
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
- return $response["data"]->result;
 
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: '.$establishmentId);
 
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
- private function log($message){
5
- Mage::log($message, null, "lightspeed.log");
 
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
- $parentCategoryId = Mage::getStoreConfig('lightspeed_settings/lightspeed_sync/lightspeed_parent_category');
89
- if(!isset($parentCategoryId) || ((int)$parentCategoryId) == -1){
90
- $parentCategoryId = 2;
91
- }
92
- $parentCategory = Mage::getModel('catalog/category')->load((int)$parentCategoryId);
93
- foreach($categories as $category){
94
  $magentoCategory = null;
95
- $this->log('Start importing category '.$category["name"]);
96
  $magentoCategories = $this->getMagentoCategory($category["id"], $category["name"]);
97
- if(isset($magentoCategories) && count($magentoCategories) == 1){
98
  $magentoCategory = $magentoCategories[0];
99
- $magentoCategory->setPath($parentCategory->getPath().'/'.$magentoCategory->getId());
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($parentCategory->getPath());
109
- $magentoCategory->setPath($parentCategory->getPath().'/'.$magentoCategory->getId());
110
  $this->log('Found magento category');
111
- }
112
- else{
113
- $this->log('Did not find magento category');
114
 
115
  $magentoCategory = Mage::getModel('catalog/category');
116
- $magentoCategory->setPath($parentCategory->getPath());
117
  }
118
 
119
  $magentoCategory->setName($this->decodeName($category["name"]))
120
- ->setIsActive(1) //activate your category
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 importProducts($categoryId, $magentoCategoryId){
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
133
  $syncHelper = Mage::helper('lightspeed_syncproducts/syncProcess');
134
- if(array_key_exists($categoryId, $syncHelper->getProductIds())){
135
- $allProducts = $syncHelper->getProductIds();
 
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
- $magentoProducts = $this->getMagentoProduct($productId);
161
- $magentoProduct = null;
162
- if(isset($magentoProducts) && count($magentoProducts) > 0){
163
- $magentoProduct = Mage::getModel('catalog/product')->load($magentoProducts[0]->getId());
164
- } else if(isset($magentoProducts) && count($magentoProducts) > 1){
165
- foreach($magentoProducts as $p){
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
- $magentoProduct->setMediaGallery (array('images'=>array (), 'values'=>array ()));
209
- $magentoProduct->addImageToMediaGallery ($destinationPath, array ('image','small_image','thumbnail'), false, false);
210
- }
211
 
212
- if($useModifiers && isset($product->additions) && count($product->additions) > 0){
213
- $this->addModifications($magentoProduct, $product, $taxInclusivePrices);
214
- }
 
215
 
216
- try {
217
- $magentoProduct->save();
218
- } catch (Exception $e) {
219
- $magentoProduct->getResource()->save($magentoProduct);
220
- }
221
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
222
  }
223
  }
224
 
225
- private function getPrice($product, $vatIncl){
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
226
  $priceField = Mage::helper('lightspeed_syncproducts/syncProcess')->getPriceField();
227
- if($vatIncl){
 
 
 
 
 
 
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 getMagentoProduct($id){
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
236
  $products = $categories = Mage::getModel('catalog/product')
237
  ->getCollection()
238
  ->addAttributeToSelect('*')
239
- ->addFieldToFilter(array(array('attribute'=>'posiosId','eq'=>$id)));
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'=>$posiosId), array('attribute'=>'name','eq'=>$name)));
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, (String)$establishmentId) !== false){
339
  $this->log('Establishment id found...');
340
- preg_match('/'.$establishmentId.'_(.*?);/', $attributeValue, $matches);
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,$data))
363
- {
364
  return true;
365
- }
366
- else
367
- {
368
  return false;
369
  }
370
  }
371
-
372
- private function parseMagentoStreet($street){
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
- private function getMagentoCustomers($syncField){
403
- $users = mage::getModel('customer/customer')
404
- ->getCollection()
405
- ->addAttributeToSelect('*');
406
- if('existing' == $syncField){
407
- $users->addFieldToFilter(array(array('attribute'=>'posiosId','neq'=>'NULL')));
408
- } else if('new' == $syncField){
409
- $users->addAttributeToFilter('posiosId', array('null' => true), 'left');
 
 
 
 
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 = 0;
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
- private function getOptionType($option){
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
- private function isRequired($option){
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 createSubProducts($lightspeedProduct, $taxClasses, $magentoCategoryId){
511
- $syncHelper = Mage::helper('lightspeed_syncproducts/syncProcess');
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
- foreach($products as $product){
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()->setCategories($ret));
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('Using establishments? ' . ($useEstablishment ? 'Yes' : 'No'));
 
 
32
 
33
- $customer= mage::getModel('customer/customer')->load($magentoOrder->getCustomerId());
34
- $order["customerId"] = $this->getCustomerId($customer, $establishmentId, $magentoOrder);
35
- $this->log('Lightspeed customer id: ' .$order['customerId']);
 
 
 
 
 
 
36
 
37
- $order["deliveryDate"] = $this->getDeliveryTimestamp($magentoOrder);
38
- $order["type"] = $this->getShippingType($magentoOrder->getShippingMethod(true)->getCarrierCode());
 
39
  $orderItems = array();
40
- $items = Mage::getModel("sales/order_item")->getCollection()->addFieldToFilter("order_id",$magentoOrder->getEntityId());
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
- $deliveryCostProduct = array();
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
- if(count($orderTaxInfo) > 0){
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
- $this->log("Payment placed with: ".$paymentMethod);
 
150
  if($paymentMethod != "checkmo"){
151
- $this->syncOrder($magentoOrder);
152
  }
153
  }
154
 
155
- public function syncOrderAfterPlacement ($event){
156
  $magentoOrder = $event->getOrder();
157
 
158
  $paymentMethod = $magentoOrder->getPayment()->getMethod();
159
  $this->log("Order placed with: ".$paymentMethod);
 
 
160
 
161
- if($paymentMethod == "free" || $paymentMethod == "checkmo"){
162
- $this->syncOrder($magentoOrder);
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 $products){
24
- $ret[] = array("value" => $products->id.'_'.$products->sku, "label" => $products->name);
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>On what field do you want to sync the 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="takeawayPrice">Take-away price</option>
30
- <option value="deliveryPrice">Delivery 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>
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.1</version>
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&#xD;
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-09</date>
15
- <time>14:22:49</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&#xD;
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>