diff --git a/retailcrm/job/icml.php b/retailcrm/job/icml.php index a5702d0..ec0ddec 100644 --- a/retailcrm/job/icml.php +++ b/retailcrm/job/icml.php @@ -11,7 +11,7 @@ if (file_exists(dirname(__FILE__) . '/../lib/custom/Catalog.php')) { } $job = new Catalog(); -$data = $job->exportCatalog(); +$data = $job->getData(); $icml = new Icml( Configuration::get('PS_SHOP_NAME'), diff --git a/retailcrm/lib/classes/Catalog.php b/retailcrm/lib/classes/Catalog.php index 11c6aaa..596ee8f 100644 --- a/retailcrm/lib/classes/Catalog.php +++ b/retailcrm/lib/classes/Catalog.php @@ -9,7 +9,7 @@ class Catalog $this->default_country = (int) Configuration::get('PS_COUNTRY_DEFAULT'); } - public function exportCatalog() + public function getData() { $id_lang = (int) Configuration::get('PS_LANG_DEFAULT'); @@ -39,6 +39,7 @@ class Catalog // Get products $products = Product::getProducts($id_lang, 0, 0, 'name', 'asc'); + foreach ($products AS $product) { // Check for home category @@ -77,19 +78,57 @@ class Catalog $available_for_order = $product['active'] && $product['available_for_order'] && $prod->checkQty(1); } - $items[] = array( + $item = array( 'id' => $product['id_product'], 'productId' => $product['id_product'], 'productActivity' => ($available_for_order) ? 'Y' : 'N', - 'initialPrice' => round($product['price'],2), - 'purchasePrice' => round($product['wholesale_price'], 2), 'name' => htmlspecialchars(strip_tags($product['name'])), 'productName' => htmlspecialchars(strip_tags($product['name'])), 'categoryId' => array($category), 'picture' => $picture, - 'url' => $url, - 'article' => htmlspecialchars($product['reference']) + 'url' => $url ); + + if (!empty($product['wholesale_price'])) { + $item['purchasePrice'] = round($product['wholesale_price'], 2); + } + + $item['initialPrice'] = !empty($product['rate']) + ? round($product['price'], 2) + (round($product['price'], 2) * $product['rate'] / 100) + : round($product['price'], 2) + ; + + + if (!empty($product['manufacturer_name'])) { + $item['vendor'] = $product['manufacturer_name']; + } + + if (!empty($product['reference'])) { + $item['article'] = htmlspecialchars($product['reference']); + } + + $weight = round($product['weight'], 2); + + if (!empty($weight)) { + $item['weight'] = $weight; + } + + $width = round($product['width'], 2); + $height = round($product['height'], 2); + $depth = round($product['depth'], 2); + + if (!empty($width)) { + if (!empty($height)) { + if (!empty($depth)) { + $item['size'] = implode('x', array($width, $height, $depth)); + } else { + $item['size'] = implode('x', array($width, $height)); + } + } + } + + $items[] = $item; + } return array($categories, $items); diff --git a/retailcrm/lib/vendor/Icml.php b/retailcrm/lib/vendor/Icml.php index 94009cd..2532c2b 100644 --- a/retailcrm/lib/vendor/Icml.php +++ b/retailcrm/lib/vendor/Icml.php @@ -32,6 +32,7 @@ class Icml 'color' => 'Цвет', 'weight' => 'Вес', 'size' => 'Размер', + 'tax' => 'Наценка' ); } diff --git a/retailcrm/retailcrm.php b/retailcrm/retailcrm.php index 439bc89..c43196f 100644 --- a/retailcrm/retailcrm.php +++ b/retailcrm/retailcrm.php @@ -68,8 +68,8 @@ class RetailCRM extends Module parent::install() && $this->registerHook('newOrder') && $this->registerHook('actionOrderStatusPostUpdate') && - $this->registerHook('actionPaymentConfirmation') - + $this->registerHook('actionPaymentConfirmation') && + $this->registerHook('actionCustomerAccountAdd') ); } @@ -387,6 +387,27 @@ class RetailCRM extends Module return $addressFields; } + public function hookActionCustomerAccountAdd($params) + { + try { + $this->api->customersCreate( + array( + 'externalId' => $params['newCustomer']->id, + 'firstName' => $params['newCustomer']->firstname, + 'lastName' => $params['newCustomer']->lastname, + 'email' => $params['newCustomer']->email, + 'createdAt' => $params['newCustomer']->date_add + ) + ); + } + catch (CurlException $e) { + error_log('customerCreate: connection error', 3, _PS_ROOT_DIR_ . "log/retailcrm.log"); + } + catch (InvalidJsonException $e) { + error_log('customerCreate: ' . $e->getMessage(), 3, _PS_ROOT_DIR_ . "log/retailcrm.log"); + } + } + public function hookNewOrder($params) { return $this->hookActionOrderStatusPostUpdate($params); @@ -448,7 +469,7 @@ class RetailCRM extends Module $items = array(); foreach ($inCart as $item) { $items[] = array( - 'initialPrice' => $item['price'], + 'initialPrice' => (!empty($item['rate'])) ? $item['price'] + ($item['price'] * $item['rate'] / 100) : $item['price'], 'quantity' => $item['quantity'], 'productId' => $item['id_product'], 'productName' => $item['name'], @@ -457,30 +478,33 @@ class RetailCRM extends Module } $dTypeKey = $params['cart']->id_carrier; + if (Module::getInstanceByName('advancedcheckout') === false) { $pTypeKey = $params['order']->module; } else { $pTypeKey = $params['order']->payment; } + $this->api->ordersCreate( array( 'externalId' => $params['order']->id, 'orderType' => 'eshop-individual', 'orderMethod' => 'shopping-cart', + 'status' => 'new', 'customerId' => $params['cart']->id_customer, 'firstName' => $params['customer']->firstname, 'lastName' => $params['customer']->lastname, 'phone' => $address['phone'], 'email' => $params['customer']->email, - 'paymentStatus' => 'not-paid', 'paymentType' => $payment->$pTypeKey, - 'deliveryType' => $delivery->$dTypeKey, - 'deliveryCost' => $params['order']->total_shipping, - 'status' => 'new', - 'deliveryAddress' => array( - 'city' => $address['city'], - 'index' => $address['postcode'], - 'text' => $address['address1'], + 'delivery' => array( + 'code' => $delivery->$dTypeKey, + 'cost' => $params['order']->total_shipping, + 'address' => array( + 'city' => $address['city'], + 'index' => $address['postcode'], + 'text' => $address['address1'], + ) ), 'discount' => $params['order']->total_discounts, 'items' => $items,