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