mirror of
https://github.com/retailcrm/opencart-module.git
synced 2024-11-25 14:46:06 +03:00
fix history, new objects in object.xml
This commit is contained in:
parent
45fde808b7
commit
cdc1c9cf6b
9
CHANGELOG.md
Normal file
9
CHANGELOG.md
Normal file
@ -0,0 +1,9 @@
|
||||
## 2017-09-07 v.2.4.0
|
||||
* Добавлена возможность работы на 3 версиях API (v3, v4, v5)
|
||||
* Добавлена совместимость с Opencart 3.0
|
||||
|
||||
## 2017-09-04 v.2.4.1
|
||||
* Исправлена работа истории (доработана обработка адресов, добавлена обработка заказов с пустыми полями, доработана история по клиентам)
|
||||
* История теперь синхронизируется по sinceId
|
||||
* Проверка доступных версий API через метод /api/versions
|
||||
* Добавлена возможность сопоставления кастомных полей(для API v5)
|
@ -91,9 +91,8 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
||||
$this->load->model('setting/setting');
|
||||
$this->model_setting_setting
|
||||
->editSetting($moduleTitle, array($moduleTitle . '_status' => 0));
|
||||
|
||||
$this->model_setting_setting->deleteSetting('retailcrm_history');
|
||||
$this->loadModels();
|
||||
|
||||
$this->{'model_' . $this->modelEvent}->deleteEvent($moduleTitle);
|
||||
}
|
||||
|
||||
@ -144,6 +143,7 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
||||
$tokenTitle = $this->getTokenTitle();
|
||||
$moduleTitle = $this->getModuleTitle();
|
||||
$collector = $this->getCollectorTitle();
|
||||
$history_setting = $this->model_setting_setting->getSetting('retailcrm_history');
|
||||
|
||||
if ($this->request->server['REQUEST_METHOD'] == 'POST' && $this->validate()) {
|
||||
$analytics = $this->{'model_' . $this->modelExtension}->getInstalled('analytics');
|
||||
@ -160,11 +160,56 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
||||
$crm_url = parse_url($this->request->post[$moduleTitle . '_url'], PHP_URL_HOST);
|
||||
$this->request->post[$moduleTitle . '_url'] = 'https://'.$crm_url;
|
||||
}
|
||||
|
||||
$this->model_setting_setting->editSetting(
|
||||
$moduleTitle,
|
||||
$this->request->post
|
||||
);
|
||||
|
||||
if ($this->request->post[$moduleTitle . '_apiversion'] != 'v3') {
|
||||
if (!isset($history_setting['retailcrm_history_orders']) && !isset($history_setting['retailcrm_history_customers'])) {
|
||||
$api = new RetailcrmProxy(
|
||||
$this->request->post[$moduleTitle . '_url'],
|
||||
$this->request->post[$moduleTitle . '_apikey'],
|
||||
DIR_SYSTEM . 'storage/logs/retailcrm.log',
|
||||
$this->request->post[$moduleTitle . '_apiversion']
|
||||
);
|
||||
|
||||
$ordersHistory = $api->ordersHistory();
|
||||
|
||||
if ($ordersHistory->isSuccessful()) {
|
||||
$ordersHistory = $api->ordersHistory(array(), $ordersHistory['pagination']['totalPageCount']);
|
||||
|
||||
if ($ordersHistory->isSuccessful()) {
|
||||
|
||||
$lastChangeOrders = end($ordersHistory['history']);
|
||||
$sinceIdOrders = $lastChangeOrders['id'];
|
||||
$generatedAt = $ordersHistory['generatedAt'];
|
||||
}
|
||||
}
|
||||
|
||||
$customersHistory = $api->customersHistory();
|
||||
|
||||
if ($customersHistory->isSuccessful()) {
|
||||
$customersHistory = $api->customersHistory(array(), $customersHistory['pagination']['totalPageCount']);
|
||||
|
||||
if ($customersHistory->isSuccessful()) {
|
||||
$lastChangeCustomers = end($customersHistory['history']);
|
||||
$sinceIdCustomers = $lastChangeCustomers['id'];
|
||||
}
|
||||
}
|
||||
|
||||
$this->model_setting_setting->editSetting(
|
||||
'retailcrm_history',
|
||||
array(
|
||||
'retailcrm_history_orders' => $sinceIdOrders,
|
||||
'retailcrm_history_customers' => $sinceIdCustomers,
|
||||
'retailcrm_history_datetime' => $generatedAt
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
$this->session->data['success'] = $this->language->get('text_success');
|
||||
$redirect = $this->url->link(
|
||||
'extension/module/retailcrm', $tokenTitle . '=' . $this->session->data[$tokenTitle],
|
||||
@ -213,7 +258,12 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
||||
'text_label_promo',
|
||||
'text_label_send',
|
||||
'collector_custom_text',
|
||||
'text_require'
|
||||
'text_require',
|
||||
'custom_fields_tab_text',
|
||||
'text_error_custom_field',
|
||||
'text_error_cf_opencart',
|
||||
'text_error_cf_retailcrm',
|
||||
'retailcrm_dict_custom_fields'
|
||||
);
|
||||
|
||||
$_data = &$data;
|
||||
@ -252,6 +302,10 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
||||
$_data['payments'] = $this->model_extension_retailcrm_references
|
||||
->getPaymentTypes();
|
||||
|
||||
if ($apiVersion == 'v5') {
|
||||
$_data['customFields'] = $this->model_extension_retailcrm_references
|
||||
->getCustomFields();
|
||||
}
|
||||
}
|
||||
|
||||
$config_data = array(
|
||||
@ -363,7 +417,6 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
||||
$settings = $this->model_setting_setting->getSetting($moduleTitle);
|
||||
|
||||
if ($settings[$moduleTitle . '_apiversion'] == 'v3') {
|
||||
|
||||
if (file_exists(DIR_APPLICATION . 'model/extension/retailcrm/custom/history/v3.php')) {
|
||||
$this->load->model('extension/retailcrm/custom/history/v3');
|
||||
$this->model_extension_retailcrm_custom_history_v3->request();
|
||||
@ -372,7 +425,6 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
||||
$this->model_extension_retailcrm_history_v3->request();
|
||||
}
|
||||
} else {
|
||||
|
||||
if (file_exists(DIR_APPLICATION . 'model/extension/retailcrm/custom/history/v4-5.php')) {
|
||||
$this->load->model('extension/retailcrm/custom/history/v4-5');
|
||||
$this->model_extension_retailcrm_custom_history_v4_5->request();
|
||||
@ -486,7 +538,7 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
||||
$result = $this->model_extension_retailcrm_order->uploadOrder($data);
|
||||
}
|
||||
|
||||
echo json_encode($result);
|
||||
echo json_encode($result->getStatusCode());
|
||||
}
|
||||
|
||||
/**
|
||||
@ -534,21 +586,30 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
||||
{
|
||||
$moduleTitle = $this->getModuleTitle();
|
||||
|
||||
$versionsMap = array(
|
||||
'v3' => '3.0',
|
||||
'v4' => '4.0',
|
||||
'v5' => '5.0'
|
||||
);
|
||||
|
||||
if (!empty($this->request->post[$moduleTitle . '_url']) && !empty($this->request->post[$moduleTitle . '_apikey'])) {
|
||||
|
||||
$this->retailcrm = new RetailcrmProxy(
|
||||
$this->request->post[$moduleTitle . '_url'],
|
||||
$this->request->post[$moduleTitle . '_apikey'],
|
||||
DIR_SYSTEM . 'storage/logs/retailcrm.log',
|
||||
$this->request->post[$moduleTitle . '_apiversion']
|
||||
DIR_SYSTEM . 'storage/logs/retailcrm.log'
|
||||
);
|
||||
}
|
||||
|
||||
$response = $this->retailcrm->deliveryTypesList();
|
||||
$response = $this->retailcrm->apiVersions();
|
||||
|
||||
if (!$response->isSuccessful()) {
|
||||
if ($response && $response->isSuccessful()) {
|
||||
if (!in_array($versionsMap[$this->request->post[$moduleTitle . '_apiversion']], $response['versions'])) {
|
||||
$this->_error['warning'] = $this->language->get('text_error_api');
|
||||
}
|
||||
} else {
|
||||
$this->_error['warning'] = $this->language->get('text_error_save');
|
||||
}
|
||||
|
||||
if (!$this->user->hasPermission('modify', 'extension/module/retailcrm')) {
|
||||
$this->_error['warning'] = $this->language->get('error_permission');
|
||||
|
@ -15,9 +15,9 @@ $_['retailcrm_upload_order'] = 'Unload single order';
|
||||
$_['daemon_collector'] = 'Daemon Collector';
|
||||
$_['general_tab_text'] = 'General';
|
||||
$_['references_tab_text'] = 'References';
|
||||
$_['collector_tab_text'] = 'Collector';
|
||||
$_['collector_tab_text'] = 'Daemon Collector';
|
||||
$_['collector_custom_text'] = 'Custom form';
|
||||
|
||||
$_['custom_fields_tab_text'] = 'Пользовательские поля';
|
||||
$_['retailcrm_apiversion'] = 'API Version';
|
||||
$_['retailcrm_url'] = 'RetailCRM URL';
|
||||
$_['retailcrm_apikey'] = 'RetailCRM API Key';
|
||||
@ -41,11 +41,16 @@ $_['field_email'] = 'Email';
|
||||
$_['field_phone'] = 'Phone';
|
||||
$_['text_require'] = 'Require';
|
||||
$_['text_error_collector_fields']= 'Fill in the field names Daemon Collector';
|
||||
$_['text_error_api'] = 'The selected version of the API or method is unavailable';
|
||||
$_['text_error_api'] = 'The selected version of the API is unavailable';
|
||||
$_['text_error_custom_field'] = 'Создайте пользовательские поля в карточке клиента в Opencart и RetailCRM, чтобы настроить их передачу';
|
||||
$_['text_error_cf_opencart'] = 'Отсутствуют пользовательские поля в Opencart';
|
||||
$_['text_error_cf_retailcrm'] = 'Отсутствуют пользовательские поля в RetailCRM';
|
||||
$_['text_error_save'] = 'Ошибка сохранения настроек';
|
||||
|
||||
$_['retailcrm_dict_delivery'] = 'Shipment methods';
|
||||
$_['retailcrm_dict_status'] = 'Order statuses';
|
||||
$_['retailcrm_dict_payment'] = 'Payment methods';
|
||||
$_['retailcrm_dict_custom_fields'] = 'Настройка пользовательских полей';
|
||||
|
||||
$_['column_total'] = 'Total';
|
||||
$_['product_summ'] = 'Amount';
|
||||
|
@ -15,9 +15,9 @@ $_['retailcrm_upload_order'] = 'Выгрузка одного заказа';
|
||||
$_['daemon_collector'] = 'Демон Collector';
|
||||
$_['general_tab_text'] = 'Главная';
|
||||
$_['references_tab_text'] = 'Справочники';
|
||||
$_['collector_tab_text'] = 'Collector';
|
||||
$_['collector_tab_text'] = 'Daemon Collector';
|
||||
$_['collector_custom_text'] = 'Настройка полей формы';
|
||||
|
||||
$_['custom_fields_tab_text'] = 'Пользовательские поля';
|
||||
$_['retailcrm_apiversion'] = 'Версия API';
|
||||
$_['retailcrm_url'] = 'Адрес RetailCRM';
|
||||
$_['retailcrm_apikey'] = 'Api ключ RetailCRM';
|
||||
@ -41,11 +41,16 @@ $_['field_email'] = 'Email';
|
||||
$_['field_phone'] = 'Телефон';
|
||||
$_['text_require'] = 'Обязательно для заполнения';
|
||||
$_['text_error_collector_fields']= 'Заполните названия полей формы Демон Collector';
|
||||
$_['text_error_api'] = 'Недоступна выбранная версия API или метод.';
|
||||
$_['text_error_api'] = 'Недоступна выбранная версия API.';
|
||||
$_['text_error_custom_field'] = 'Создайте пользовательские поля в карточке клиента в Opencart и RetailCRM, чтобы настроить их передачу';
|
||||
$_['text_error_cf_opencart'] = 'Отсутствуют пользовательские поля в Opencart';
|
||||
$_['text_error_cf_retailcrm'] = 'Отсутствуют пользовательские поля в RetailCRM';
|
||||
$_['text_error_save'] = 'Ошибка сохранения настроек';
|
||||
|
||||
$_['retailcrm_dict_delivery'] = 'Способы доставки';
|
||||
$_['retailcrm_dict_status'] = 'Статусы';
|
||||
$_['retailcrm_dict_payment'] = 'Способы оплаты';
|
||||
$_['retailcrm_dict_custom_fields'] = 'Настройка пользовательских полей';
|
||||
|
||||
$_['column_total'] = 'Итого';
|
||||
$_['product_summ'] = 'Сумма';
|
||||
|
@ -26,8 +26,9 @@ class ModelExtensionRetailcrmCustomer extends Model {
|
||||
{
|
||||
$this->initApi();
|
||||
|
||||
if(empty($customer))
|
||||
if(empty($customer)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$customerToCrm = $this->process($customer);
|
||||
|
||||
@ -35,6 +36,8 @@ class ModelExtensionRetailcrmCustomer extends Model {
|
||||
}
|
||||
|
||||
private function process($customer) {
|
||||
$moduleTitle = $this->getModuleTitle();
|
||||
|
||||
$customerToCrm = array(
|
||||
'externalId' => $customer['customer_id'],
|
||||
'firstName' => $customer['firstname'],
|
||||
@ -58,6 +61,18 @@ class ModelExtensionRetailcrmCustomer extends Model {
|
||||
);
|
||||
}
|
||||
|
||||
if (isset($this->settings[$moduleTitle . '_custom_field']) && $customer['custom_field']) {
|
||||
$customFields = json_decode($customer['custom_field']);
|
||||
|
||||
foreach ($customFields as $key => $value) {
|
||||
if (isset($this->settings[$moduleTitle . '_custom_field'][$key])) {
|
||||
$customFieldsToCrm[$this->settings[$moduleTitle . '_custom_field'][$key]] = $value;
|
||||
}
|
||||
}
|
||||
|
||||
$customerToCrm['customFields'] = $customFieldsToCrm;
|
||||
}
|
||||
|
||||
return $customerToCrm;
|
||||
}
|
||||
|
||||
@ -65,18 +80,18 @@ class ModelExtensionRetailcrmCustomer extends Model {
|
||||
{
|
||||
$moduleTitle = $this->getModuleTitle();
|
||||
$this->load->model('setting/setting');
|
||||
$settings = $this->model_setting_setting->getSetting($moduleTitle);
|
||||
$this->settings = $this->model_setting_setting->getSetting($moduleTitle);
|
||||
|
||||
if(empty($settings[$moduleTitle . '_url']) || empty($settings[$moduleTitle . '_apikey']))
|
||||
if(empty($this->settings[$moduleTitle . '_url']) || empty($this->settings[$moduleTitle . '_apikey']))
|
||||
return false;
|
||||
|
||||
require_once DIR_SYSTEM . 'library/retailcrm/bootstrap.php';
|
||||
|
||||
$this->retailcrmApi = new RetailcrmProxy(
|
||||
$settings[$moduleTitle . '_url'],
|
||||
$settings[$moduleTitle . '_apikey'],
|
||||
$this->settings[$moduleTitle . '_url'],
|
||||
$this->settings[$moduleTitle . '_apikey'],
|
||||
DIR_SYSTEM . 'storage/logs/retailcrm.log',
|
||||
$settings[$moduleTitle . '_apiversion']
|
||||
$this->settings[$moduleTitle . '_apiversion']
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -42,20 +42,22 @@ class ModelExtensionRetailcrmHistoryV3 extends Model
|
||||
$settings[$moduleTitle . '_apiversion']
|
||||
);
|
||||
|
||||
$lastRun = !empty($history['retailcrm_history'])
|
||||
? new DateTime($history['retailcrm_history'])
|
||||
$lastRun = !empty($history['retailcrm_history_datetime'])
|
||||
? new DateTime($history['retailcrm_history_datetime'])
|
||||
: new DateTime(date('Y-m-d H:i:s', strtotime('-1 days', strtotime(date('Y-m-d H:i:s')))));
|
||||
|
||||
$packsOrders = $crm->ordersHistory($lastRun);
|
||||
|
||||
if(!$packsOrders->isSuccessful() && count($packsOrders['orders']) <= 0)
|
||||
if(!$packsOrders->isSuccessful() && count($packsOrders['orders']) <= 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$generatedAt = $packsOrders['generatedAt'];
|
||||
|
||||
$this->subtotalSettings = $this->model_setting_setting->getSetting('sub_total');
|
||||
$this->totalSettings = $this->model_setting_setting->getSetting('total');
|
||||
$this->shippingSettings = $this->model_setting_setting->getSetting('shipping');
|
||||
$this->totalTitle = $this->totalTitles();
|
||||
$this->subtotalSettings = $this->model_setting_setting->getSetting($this->totalTitle . 'sub_total');
|
||||
$this->totalSettings = $this->model_setting_setting->getSetting($this->totalTitle . 'total');
|
||||
$this->shippingSettings = $this->model_setting_setting->getSetting($this->totalTitle . 'shipping');
|
||||
|
||||
$this->delivery = array_flip($settings[$moduleTitle . '_delivery']);
|
||||
$this->payment = array_flip($settings[$moduleTitle . '_payment']);
|
||||
@ -99,7 +101,7 @@ class ModelExtensionRetailcrmHistoryV3 extends Model
|
||||
}
|
||||
}
|
||||
|
||||
$this->model_setting_setting->editSetting('retailcrm_history', array('retailcrm_history' => $generatedAt));
|
||||
$this->model_setting_setting->editSetting('retailcrm_history', array('retailcrm_history_datetime' => $generatedAt));
|
||||
|
||||
if (!empty($this->createResult['customers'])) {
|
||||
$crm->customersFixExternalIds($this->createResult['customers']);
|
||||
@ -117,20 +119,28 @@ class ModelExtensionRetailcrmHistoryV3 extends Model
|
||||
|
||||
$data = array();
|
||||
|
||||
$mail = isset($order['email']) ? $order['email'] : $order['customer']['email'];
|
||||
$phone = isset($order['phone']) ? $order['phone'] : '';
|
||||
|
||||
if (!$phone) {
|
||||
$data['telephone'] = $order['customer']['phones'] ? $order['customer']['phones'][0]['number'] : '80000000000';
|
||||
} else {
|
||||
$data['telephone'] = $phone;
|
||||
}
|
||||
|
||||
$data['store_id'] = $store == null ? 0 : $store;
|
||||
$data['customer'] = $order['firstName'];
|
||||
$data['customer_id'] = (!empty($order['customer']['externalId'])) ? $order['customer']['externalId'] : 0;
|
||||
$data['customer_id'] = isset($order['customer']['externalId']) ? $order['customer']['externalId'] : 0;
|
||||
$data['customer_group_id'] = 1;
|
||||
$data['firstname'] = $order['firstName'];
|
||||
$data['lastname'] = (!empty($order['lastName'])) ? $order['lastName'] : ' ';
|
||||
$data['email'] = $order['email'];
|
||||
$data['telephone'] = (!empty($order['phone'])) ? $order['phone'] : '';
|
||||
$data['lastname'] = isset($order['lastName']) ? $order['lastName'] : $order['firstName'];
|
||||
$data['email'] = $mail ? $mail : uniqid() . '@retailrcm.ru';
|
||||
$data['comment'] = !empty($order['customerComment']) ? $order['customerComment'] : '';
|
||||
$data['fax'] = '';
|
||||
|
||||
$data['payment_address'] = '0';
|
||||
$data['payment_firstname'] = $order['firstName'];
|
||||
$data['payment_lastname'] = (!empty($order['lastName'])) ? $order['lastName'] : ' ';
|
||||
$data['payment_lastname'] = isset($order['lastName']) ? $order['lastName'] : $order['firstName'];
|
||||
$data['payment_address_1'] = isset($order['customer']['address']) ? $order['customer']['address']['text'] : '';
|
||||
$data['payment_address_2'] = '';
|
||||
$data['payment_company'] = '';
|
||||
@ -138,27 +148,47 @@ class ModelExtensionRetailcrmHistoryV3 extends Model
|
||||
$data['payment_city'] = !empty($order['customer']['address']['city']) ? $order['customer']['address']['city'] : $order['delivery']['address']['city'];
|
||||
$data['payment_postcode'] = !empty( $order['customer']['address']['index'] ) ? $order['customer']['address']['index'] : $order['delivery']['address']['index'];
|
||||
|
||||
$region = '';
|
||||
$shippingZone = '';
|
||||
|
||||
if (is_int($order['delivery']['address']['region'])) {
|
||||
$region = $order['delivery']['address']['region'];
|
||||
$shippingZone = $order['delivery']['address']['region'];
|
||||
} else {
|
||||
foreach ($this->zones as $zone) {
|
||||
if ($order['delivery']['address']['region'] == $zone['name']) {
|
||||
$region = $zone['zone_id'];
|
||||
}
|
||||
$shippingZone = $this->getZoneByName($order['delivery']['address']['region']);
|
||||
|
||||
if ($shippingZone) {
|
||||
$shipping_zone_id = $shippingZone['zone_id'];
|
||||
} else {
|
||||
$shipping_zone_id = 0;
|
||||
}
|
||||
}
|
||||
|
||||
$data['payment_country_id'] = !empty($order['delivery']['address']['country']) ? $order['delivery']['address']['country'] : 0;
|
||||
$data['payment_zone_id'] = !empty($order['delivery']['address']['region']) ? $order['delivery']['address']['region'] : $region;
|
||||
if (isset($order['customer']['address']['region'])) {
|
||||
$paymentZone = $this->getZoneByName($order['customer']['address']['region']);
|
||||
|
||||
$data['shipping_country_id'] = !empty($order['delivery']['address']['country']) ? $order['delivery']['address']['country'] : 0;
|
||||
$data['shipping_zone_id'] = $region;
|
||||
if ($paymentZone) {
|
||||
$payment_zone_id = $paymentZone['zone_id'];
|
||||
} else {
|
||||
$payment_zone_id = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($order['delivery']['address']['countryIso'])) {
|
||||
$shippingCountry = $this->getCountryByIsoCode($order['delivery']['address']['countryIso']);
|
||||
}
|
||||
|
||||
if (isset($order['customer']['address']['countryIso'])) {
|
||||
$paymentCountry = $this->getCountryByIsoCode($order['customer']['address']['countryIso']);
|
||||
}
|
||||
|
||||
$data['payment_country_id'] = isset($paymentCountry) ? $paymentCountry['country_id'] : 0;
|
||||
$data['payment_zone_id'] = $payment_zone_id;
|
||||
|
||||
$data['shipping_country_id'] = isset($shippingCountry) ? $shippingCountry['country_id'] : 0;
|
||||
$data['shipping_zone_id'] = $shipping_zone_id;
|
||||
|
||||
$data['shipping_address'] = '0';
|
||||
$data['shipping_firstname'] = $order['firstName'];
|
||||
$data['shipping_lastname'] = (!empty($order['lastName'])) ? $order['lastName'] : ' ';
|
||||
$data['shipping_lastname'] = isset($order['lastName']) ? $order['lastName'] : $order['firstName'];
|
||||
$data['shipping_address_1'] = $order['delivery']['address']['text'];
|
||||
$data['shipping_address_2'] = '';
|
||||
$data['shipping_company'] = '';
|
||||
@ -192,7 +222,6 @@ class ModelExtensionRetailcrmHistoryV3 extends Model
|
||||
$data['order_product'] = array();
|
||||
|
||||
foreach ($order['items'] as $item) {
|
||||
//$product = $this->model_catalog_product->getProduct($item['offer']['externalId']);
|
||||
$productId = $item['offer']['externalId'];
|
||||
$options = array();
|
||||
if(mb_strpos($item['offer']['externalId'], '#') > 1) {
|
||||
@ -251,7 +280,7 @@ class ModelExtensionRetailcrmHistoryV3 extends Model
|
||||
'title' => $this->ocDelivery[$data['shipping_code']],
|
||||
'value' => $deliveryCost,
|
||||
'text' => $deliveryCost,
|
||||
'sort_order' => $this->shippingSettings['shipping_sort_order']
|
||||
'sort_order' => $this->shippingSettings[$this->totalTitle . 'shipping_sort_order']
|
||||
),
|
||||
array(
|
||||
'order_total_id' => '',
|
||||
@ -259,7 +288,7 @@ class ModelExtensionRetailcrmHistoryV3 extends Model
|
||||
'title' => $this->language->get('column_total'),
|
||||
'value' => isset($order['totalSumm']) ? $order['totalSumm'] : $order['summ'] + $deliveryCost,
|
||||
'text' => isset($order['totalSumm']) ? $order['totalSumm'] : $order['summ'] + $deliveryCost,
|
||||
'sort_order' => $this->totalSettings['total_sort_order']
|
||||
'sort_order' => $this->totalSettings[$this->totalTitle . 'total_sort_order']
|
||||
)
|
||||
);
|
||||
|
||||
@ -291,21 +320,35 @@ class ModelExtensionRetailcrmHistoryV3 extends Model
|
||||
$data = array();
|
||||
|
||||
if ($customer_id == 0) {
|
||||
if (isset($order['customer']['address']['countryIso'])) {
|
||||
$customerCountry = $this->getCountryByIsoCode($order['customer']['address']['countryIso']);
|
||||
} else {
|
||||
$customerCountry = $this->getCountryByIsoCode($order['delivery']['address']['countryIso']);
|
||||
}
|
||||
|
||||
if (isset($order['customer']['address']['region'])) {
|
||||
$customerZone = $this->getZoneByName($order['customer']['address']['region']);
|
||||
} else {
|
||||
$customerZone = $this->getZoneByName($order['delivery']['address']['region']);
|
||||
}
|
||||
|
||||
$cData = array(
|
||||
'store_id' => 0,
|
||||
'customer_group_id' => '1',
|
||||
'firstname' => $order['firstName'],
|
||||
'lastname' => (!empty($order['lastName'])) ? $order['lastName'] : ' ',
|
||||
'email' => $order['email'],
|
||||
'telephone' => (!empty($order['customer']['phones'][0]['number']) ) ? $order['customer']['phones'][0]['number'] : ' ',
|
||||
'firstname' => isset($order['patronymic']) ? $order['firstName'] . ' ' . $order['patronymic'] : $order['firstName'],
|
||||
'lastname' => (!empty($order['customer']['lastName'])) ? $order['customer']['lastName'] : ' ',
|
||||
'email' => $order['customer']['email'],
|
||||
'telephone' => $order['customer']['phones'] ? $order['customer']['phones'][0]['number'] : ' ',
|
||||
'fax' => '',
|
||||
'newsletter' => 0,
|
||||
'password' => 'tmppass',
|
||||
'status' => 1,
|
||||
'approved' => 1,
|
||||
'safe' => 0,
|
||||
'address' => array(
|
||||
array(
|
||||
'firstname' => $order['firstName'],
|
||||
'lastname' => (!empty($order['lastName'])) ? $order['lastName'] : ' ',
|
||||
'firstname' => isset($order['patronymic']) ? $order['firstName'] . ' ' . $order['patronymic'] : $order['firstName'],
|
||||
'lastname' => (!empty($order['customer']['lastName'])) ? $order['customer']['lastName'] : ' ',
|
||||
'address_1' => $order['customer']['address']['text'],
|
||||
'address_2' => ' ',
|
||||
'city' => !empty($order['customer']['address']['city']) ? $order['customer']['address']['city'] : $order['delivery']['address']['city'],
|
||||
@ -313,39 +356,39 @@ class ModelExtensionRetailcrmHistoryV3 extends Model
|
||||
'tax_id' => '1',
|
||||
'company' => '',
|
||||
'company_id' => '',
|
||||
'zone_id' => '0',
|
||||
'country_id' => 0
|
||||
'zone_id' => $customerZone ? $customerZone['zone_id'] : 0,
|
||||
'country_id' => $customerCountry ? $customerCountry['country_id'] : 0,
|
||||
'default' => '1'
|
||||
)
|
||||
),
|
||||
);
|
||||
|
||||
|
||||
$this->model_customer_customer->addCustomer($cData);
|
||||
|
||||
if (!empty($order['email'])) {
|
||||
$tryToFind = $this->model_customer_customer->getCustomerByEmail($order['email']);
|
||||
$customer_id = $tryToFind['customer_id'];
|
||||
} else {
|
||||
$last = $this->model_customer_customer->getCustomers($data = array('order' => 'DESC', 'limit' => 1));
|
||||
$customer_id = $last[0]['customer_id'];
|
||||
}
|
||||
$customer_id = $this->model_customer_customer->addCustomer($cData);
|
||||
|
||||
$customersIdsFix[] = array('id' => $order['customer']['id'], 'externalId' => (int)$customer_id);
|
||||
}
|
||||
|
||||
$mail = isset($order['email']) ? $order['email'] : $order['customer']['email'];
|
||||
$phone = isset($order['phone']) ? $order['phone'] : '';
|
||||
|
||||
if (!$phone) {
|
||||
$data['telephone'] = $order['customer']['phones'] ? $order['customer']['phones'][0]['number'] : '80000000000';
|
||||
} else {
|
||||
$data['telephone'] = $phone;
|
||||
}
|
||||
|
||||
$data['store_id'] = $store == null ? 0 : $store;
|
||||
$data['customer'] = $order['firstName'];
|
||||
$data['customer_id'] = $customer_id;
|
||||
$data['customer_group_id'] = 1;
|
||||
$data['firstname'] = $order['firstName'];
|
||||
$data['lastname'] = (!empty($order['lastName'])) ? $order['lastName'] : ' ';
|
||||
$data['email'] = $order['email'];
|
||||
$data['telephone'] = (!empty($order['customer']['phones'][0]['number'])) ? $order['customer']['phones'][0]['number'] : ' ';
|
||||
$data['lastname'] = isset($order['lastName']) ? $order['lastName'] : $order['firstName'];
|
||||
$data['email'] = $mail ? $mail : uniqid() . '@retailrcm.ru';
|
||||
$data['comment'] = !empty($order['customerComment']) ? $order['customerComment'] : '';
|
||||
$data['fax'] = '';
|
||||
$data['payment_address'] = '0';
|
||||
$data['payment_firstname'] = $order['firstName'];
|
||||
$data['payment_lastname'] = (!empty($order['lastName'])) ? $order['lastName'] : ' ';
|
||||
$data['payment_lastname'] = isset($order['lastName']) ? $order['lastName'] : $order['firstName'];
|
||||
$data['payment_address_1'] = $order['customer']['address']['text'];
|
||||
$data['payment_address_2'] = '';
|
||||
$data['payment_company'] = '';
|
||||
@ -353,25 +396,45 @@ class ModelExtensionRetailcrmHistoryV3 extends Model
|
||||
$data['payment_city'] = !empty($order['customer']['address']['city']) ? $order['customer']['address']['city'] : $order['delivery']['address']['city'];
|
||||
$data['payment_postcode'] = !empty($order['customer']['address']['index']) ? $order['customer']['address']['index'] : $order['delivery']['address']['index'];
|
||||
|
||||
$region = '';
|
||||
$shippingZone = '';
|
||||
|
||||
if (!empty($order['delivery']['address']['region']) && is_int($order['delivery']['address']['region'])) {
|
||||
$region = $order['delivery']['address']['region'];
|
||||
if (is_int($order['delivery']['address']['region'])) {
|
||||
$shippingZone = $order['delivery']['address']['region'];
|
||||
} else {
|
||||
foreach ($this->zones as $zone) {
|
||||
if ($order['delivery']['address']['region'] == $zone['name']) {
|
||||
$region = $zone['zone_id'];
|
||||
}
|
||||
$shippingZone = $this->getZoneByName($order['delivery']['address']['region']);
|
||||
|
||||
if ($shippingZone) {
|
||||
$shipping_zone_id = $shippingZone['zone_id'];
|
||||
} else {
|
||||
$shipping_zone_id = 0;
|
||||
}
|
||||
}
|
||||
|
||||
$data['payment_country_id'] = !empty($order['delivery']['address']['country']) ? $order['delivery']['address']['country'] : 0;
|
||||
$data['payment_zone_id'] = !empty($order['delivery']['address']['region']) ? $order['delivery']['address']['region'] : $region;
|
||||
$data['shipping_country_id'] = !empty($order['delivery']['address']['country']) ? $order['delivery']['address']['country'] : 0;
|
||||
$data['shipping_zone_id'] = $region;
|
||||
if (isset($order['customer']['address']['region'])) {
|
||||
$paymentZone = $this->getZoneByName($order['customer']['address']['region']);
|
||||
|
||||
if ($paymentZone) {
|
||||
$payment_zone_id = $paymentZone['zone_id'];
|
||||
} else {
|
||||
$payment_zone_id = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($order['delivery']['address']['countryIso'])) {
|
||||
$shippingCountry = $this->getCountryByIsoCode($order['delivery']['address']['countryIso']);
|
||||
}
|
||||
|
||||
if (isset($order['customer']['address']['countryIso'])) {
|
||||
$paymentCountry = $this->getCountryByIsoCode($order['customer']['address']['countryIso']);
|
||||
}
|
||||
|
||||
$data['payment_country_id'] = $paymentCountry ? $paymentCountry['country_id'] : 0;
|
||||
$data['payment_zone_id'] = $payment_zone_id;
|
||||
$data['shipping_country_id'] = $shippingCountry ? $shippingCountry['country_id'] : 0;
|
||||
$data['shipping_zone_id'] = $shipping_zone_id;
|
||||
$data['shipping_address'] = '0';
|
||||
$data['shipping_firstname'] = $order['firstName'];
|
||||
$data['shipping_lastname'] = (!empty($order['lastName'])) ? $order['lastName'] : ' ';
|
||||
$data['shipping_lastname'] = isset($order['lastName']) ? $order['lastName'] : $order['firstName'];
|
||||
$data['shipping_address_1'] = $order['delivery']['address']['text'];
|
||||
$data['shipping_address_2'] = '';
|
||||
$data['shipping_company'] = '';
|
||||
@ -404,19 +467,35 @@ class ModelExtensionRetailcrmHistoryV3 extends Model
|
||||
$data['order_product'] = array();
|
||||
|
||||
foreach ($order['items'] as $item) {
|
||||
$product = $this->model_catalog_product->getProduct($item['offer']['externalId']);
|
||||
$data['order_product'][] = array(
|
||||
'product_id' => $item['offer']['externalId'],
|
||||
'name' => $item['offer']['name'],
|
||||
'quantity' => $item['quantity'],
|
||||
'price' => $item['initialPrice'],
|
||||
'total' => $item['initialPrice'] * $item['quantity'],
|
||||
'model' => $product['model'],
|
||||
$productId = $item['offer']['externalId'];
|
||||
$options = array();
|
||||
if(mb_strpos($item['offer']['externalId'], '#') > 1) {
|
||||
$offer = explode('#', $item['offer']['externalId']);
|
||||
$productId = $offer[0];
|
||||
$optionsFromCRM = explode('_', $offer[1]);
|
||||
|
||||
// this data will not retrive from crm
|
||||
'order_product_id' => '',
|
||||
'tax' => 0,
|
||||
'reward' => 0
|
||||
foreach($optionsFromCRM as $optionFromCRM) {
|
||||
$optionData = explode('-', $optionFromCRM);
|
||||
$productOptionId = $optionData[0];
|
||||
$optionValueId = $optionData[1];
|
||||
|
||||
$productOptions = $this->model_catalog_product->getProductOptions($productId);
|
||||
|
||||
foreach($productOptions as $productOption) {
|
||||
if($productOptionId == $productOption['product_option_id']) {
|
||||
foreach($productOption['product_option_value'] as $productOptionValue) {
|
||||
if($productOptionValue['option_value_id'] == $optionValueId) {
|
||||
$options[$productOptionId] = $productOptionValue['product_option_value_id'];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$data['order_product'][] = array(
|
||||
'product_id' => $productId,
|
||||
'quantity' => $item['quantity'],
|
||||
'option' => $options
|
||||
);
|
||||
}
|
||||
|
||||
@ -437,7 +516,7 @@ class ModelExtensionRetailcrmHistoryV3 extends Model
|
||||
'title' => $this->ocDelivery[$data['shipping_code']],
|
||||
'value' => $deliveryCost,
|
||||
'text' => $deliveryCost,
|
||||
'sort_order' => $this->shippingSettings['shipping_sort_order']
|
||||
'sort_order' => $this->shippingSettings[$this->totalTitle . 'shipping_sort_order']
|
||||
),
|
||||
array(
|
||||
'order_total_id' => '',
|
||||
@ -445,18 +524,16 @@ class ModelExtensionRetailcrmHistoryV3 extends Model
|
||||
'title' => $this->language->get('column_total'),
|
||||
'value' => !empty($order['totalSumm']) ? $order['totalSumm'] : $order['summ'] + $deliveryCost,
|
||||
'text' => isset($order['totalSumm']) ? $order['totalSumm'] : $order['summ'] + $deliveryCost,
|
||||
'sort_order' => $this->totalSettings['total_sort_order']
|
||||
'sort_order' => $this->totalSettings[$this->totalTitle . 'total_sort_order']
|
||||
)
|
||||
);
|
||||
|
||||
$data['fromApi'] = true;
|
||||
$data['order_status_id'] = 1;
|
||||
|
||||
$this->opencartApiClient->addOrder($data);
|
||||
$order_id = $this->opencartApiClient->addOrder($data);
|
||||
|
||||
$last = $this->model_sale_order->getOrders($data = array('order' => 'DESC', 'limit' => 1, 'start' => 0));
|
||||
|
||||
$ordersIdsFix[] = array('id' => $order['id'], 'externalId' => (int) $last[0]['order_id']);
|
||||
$ordersIdsFix[] = array('id' => $order['id'], 'externalId' => (int) $order_id);
|
||||
}
|
||||
|
||||
return array('customers' => $customersIdsFix, 'orders' => $ordersIdsFix);
|
||||
@ -472,4 +549,29 @@ class ModelExtensionRetailcrmHistoryV3 extends Model
|
||||
|
||||
return $title;
|
||||
}
|
||||
|
||||
private function totalTitles()
|
||||
{
|
||||
if (version_compare(VERSION, '3.0', '<')) {
|
||||
$title = '';
|
||||
} else {
|
||||
$title = 'total_';
|
||||
}
|
||||
|
||||
return $title;
|
||||
}
|
||||
|
||||
public function getCountryByIsoCode($isoCode)
|
||||
{
|
||||
$query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "country` WHERE iso_code_2 = '" . $isoCode . "'");
|
||||
|
||||
return $query->row;
|
||||
}
|
||||
|
||||
public function getZoneByName($name)
|
||||
{
|
||||
$query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "zone` WHERE name = '" . $name . "'");
|
||||
|
||||
return $query->row;
|
||||
}
|
||||
}
|
||||
|
@ -8,7 +8,7 @@ class ModelExtensionRetailcrmHistoryV45 extends Model
|
||||
|
||||
public function request()
|
||||
{
|
||||
$moduleTitle = $this->getModuleTitle();
|
||||
$this->moduleTitle = $this->getModuleTitle();
|
||||
$this->load->model('setting/setting');
|
||||
$this->load->model('setting/store');
|
||||
$this->load->model('user/api');
|
||||
@ -21,12 +21,12 @@ class ModelExtensionRetailcrmHistoryV45 extends Model
|
||||
|
||||
$this->load->language('extension/module/retailcrm');
|
||||
|
||||
$settings = $this->model_setting_setting->getSetting($moduleTitle);
|
||||
$settings = $this->model_setting_setting->getSetting($this->moduleTitle);
|
||||
$history = $this->model_setting_setting->getSetting('retailcrm_history');
|
||||
$settings['domain'] = parse_url(HTTP_SERVER, PHP_URL_HOST);
|
||||
|
||||
$url = isset($settings[$moduleTitle . '_url']) ? $settings[$moduleTitle . '_url'] : null;
|
||||
$key = isset($settings[$moduleTitle . '_apikey']) ? $settings[$moduleTitle . '_apikey'] : null;
|
||||
$url = isset($settings[$this->moduleTitle . '_url']) ? $settings[$this->moduleTitle . '_url'] : null;
|
||||
$key = isset($settings[$this->moduleTitle . '_apikey']) ? $settings[$this->moduleTitle . '_apikey'] : null;
|
||||
|
||||
if (empty($url) || empty($key)) {
|
||||
$this->log->addNotice('You need to configure retailcrm module first.');
|
||||
@ -36,43 +36,57 @@ class ModelExtensionRetailcrmHistoryV45 extends Model
|
||||
$this->opencartApiClient = new OpencartApiClient($this->registry);
|
||||
|
||||
$crm = new RetailcrmProxy(
|
||||
$settings[$moduleTitle . '_url'],
|
||||
$settings[$moduleTitle . '_apikey'],
|
||||
$settings[$this->moduleTitle . '_url'],
|
||||
$settings[$this->moduleTitle . '_apikey'],
|
||||
DIR_SYSTEM . 'storage/logs/retailcrm.log',
|
||||
$settings[$moduleTitle . '_apiversion']
|
||||
$settings[$this->moduleTitle . '_apiversion']
|
||||
);
|
||||
|
||||
$lastRun = !empty($history['retailcrm_history'])
|
||||
? new DateTime($history['retailcrm_history'])
|
||||
: new DateTime(date('Y-m-d H:i:s', strtotime('-1 days', strtotime(date('Y-m-d H:i:s')))));
|
||||
$sinceIdOrders = $history['retailcrm_history_orders'] ? $history['retailcrm_history_orders'] : null;
|
||||
$sinceIdCustomers = $history['retailcrm_history_customers'] ? $history['retailcrm_history_customers'] : null;
|
||||
|
||||
$packsOrders = $crm->ordersHistory(array(
|
||||
'startDate' => $lastRun->format('Y-m-d H:i:s'),
|
||||
'sinceId' => $sinceIdOrders ? $sinceIdOrders : 0
|
||||
), 1, 100);
|
||||
$packsCustomers = $crm->customersHistory(array(
|
||||
'startDate' => $lastRun->format('Y-m-d H:i:s'),
|
||||
'sinceId' => $sinceIdCustomers ? $sinceIdCustomers : 0
|
||||
), 1, 100);
|
||||
if(!$packsOrders->isSuccessful() && count($packsOrders->history) <= 0 && !$packsCustomers->isSuccessful() && count($Customers->history) <= 0)
|
||||
return false;
|
||||
|
||||
if(!$packsOrders->isSuccessful() && count($packsOrders->history) <= 0 && !$packsCustomers->isSuccessful() && count($packsCustomers->history) <= 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$generatedAt = $packsOrders['generatedAt'];
|
||||
$orders = RetailcrmHistoryHelper::assemblyOrder($packsOrders->history);
|
||||
$customers = RetailcrmHistoryHelper::assemblyCustomer($packsCustomers->history);
|
||||
|
||||
$generatedAt = $packsOrders['generatedAt'];
|
||||
$ordersHistory = $packsOrders->history;
|
||||
$customersHistory = $packsCustomers->history;
|
||||
|
||||
$lastChangeOrders = $ordersHistory ? end($ordersHistory) : null;
|
||||
$lastChangeCustomers = $customersHistory ? end($customersHistory) : null;
|
||||
|
||||
if ($lastChangeOrders !== null) {
|
||||
$sinceIdOrders = $lastChangeOrders['id'];
|
||||
}
|
||||
|
||||
if ($lastChangeCustomers !== null) {
|
||||
$sinceIdCustomers = $lastChangeCustomers['id'];
|
||||
}
|
||||
|
||||
$this->totalTitle = $this->totalTitles();
|
||||
$this->subtotalSettings = $this->model_setting_setting->getSetting($this->totalTitle . 'sub_total');
|
||||
$this->totalSettings = $this->model_setting_setting->getSetting($this->totalTitle . 'total');
|
||||
$this->shippingSettings = $this->model_setting_setting->getSetting($this->totalTitle . 'shipping');
|
||||
|
||||
$this->delivery = array_flip($settings[$moduleTitle . '_delivery']);
|
||||
$this->payment = array_flip($settings[$moduleTitle . '_payment']);
|
||||
$this->status = array_flip($settings[$moduleTitle . '_status']);
|
||||
$this->delivery = array_flip($settings[$this->moduleTitle . '_delivery']);
|
||||
$this->payment = array_flip($settings[$this->moduleTitle . '_payment']);
|
||||
$this->status = array_flip($settings[$this->moduleTitle . '_status']);
|
||||
|
||||
$this->ocPayment = $this->model_extension_retailcrm_references
|
||||
->getOpercartPaymentTypes();
|
||||
|
||||
$this->ocDelivery = $settings[$moduleTitle . '_delivery'];
|
||||
$this->ocDelivery = $settings[$this->moduleTitle . '_delivery'];
|
||||
|
||||
$this->zones = $this->model_localisation_zone->getZones();
|
||||
|
||||
@ -105,6 +119,13 @@ class ModelExtensionRetailcrmHistoryV45 extends Model
|
||||
|
||||
unset($customers);
|
||||
|
||||
if (!empty($updateCustomers)) {
|
||||
$customers = $crm->customersList($filter = array('ids' => $updateCustomers));
|
||||
if ($customers) {
|
||||
$this->updateCustomers($customers['customers']);
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($newOrders)) {
|
||||
$orders = $crm->ordersList($filter = array('ids' => $newOrders));
|
||||
if ($orders) {
|
||||
@ -119,14 +140,14 @@ class ModelExtensionRetailcrmHistoryV45 extends Model
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($updateCustomers)) {
|
||||
$customers = $crm->customersList($filter = array('ids' => $updateCustomers));
|
||||
if ($customers) {
|
||||
$this->updateCustomers($customers['customers']);
|
||||
}
|
||||
}
|
||||
|
||||
$this->model_setting_setting->editSetting('retailcrm_history', array('retailcrm_history' => $generatedAt));
|
||||
$this->model_setting_setting->editSetting(
|
||||
'retailcrm_history',
|
||||
array(
|
||||
'retailcrm_history_orders' => $sinceIdOrders,
|
||||
'retailcrm_history_customers' => $sinceIdCustomers,
|
||||
'retailcrm_history_datetime' => $generatedAt
|
||||
)
|
||||
);
|
||||
|
||||
if (!empty($this->createResult['customers'])) {
|
||||
$crm->customersFixExternalIds($this->createResult['customers']);
|
||||
@ -153,25 +174,33 @@ class ModelExtensionRetailcrmHistoryV45 extends Model
|
||||
$payment = end($order['payments']);
|
||||
}
|
||||
} elseif (isset($order['paymentType'])) {
|
||||
$payment = $order['paymentType'];
|
||||
$payment['type'] = $order['paymentType'];
|
||||
}
|
||||
|
||||
$data = array();
|
||||
|
||||
$mail = isset($order['email']) ? $order['email'] : $order['customer']['email'];
|
||||
$phone = isset($order['phone']) ? $order['phone'] : '';
|
||||
|
||||
if (!$phone) {
|
||||
$data['telephone'] = $order['customer']['phones'] ? $order['customer']['phones'][0]['number'] : '80000000000';
|
||||
} else {
|
||||
$data['telephone'] = $phone;
|
||||
}
|
||||
|
||||
$data['store_id'] = $store == null ? 0 : $store;
|
||||
$data['customer'] = $order['firstName'];
|
||||
$data['customer_id'] = (!empty($order['customer']['externalId'])) ? $order['customer']['externalId'] : 0;
|
||||
$data['customer_group_id'] = 1;
|
||||
$data['firstname'] = $order['firstName'];
|
||||
$data['lastname'] = (!empty($order['lastName'])) ? $order['lastName'] : ' ';
|
||||
$data['email'] = $order['email'];
|
||||
$data['telephone'] = (!empty($order['phone'])) ? $order['phone'] : '';
|
||||
$data['lastname'] = isset($order['lastName']) ? $order['lastName'] : $order['firstName'];
|
||||
$data['email'] = $mail ? $mail : uniqid() . '@retailrcm.ru';
|
||||
$data['comment'] = !empty($order['customerComment']) ? $order['customerComment'] : '';
|
||||
$data['fax'] = '';
|
||||
|
||||
$data['payment_address'] = '0';
|
||||
$data['payment_firstname'] = $order['firstName'];
|
||||
$data['payment_lastname'] = (!empty($order['lastName'])) ? $order['lastName'] : ' ';
|
||||
$data['payment_lastname'] = isset($order['lastName']) ? $order['lastName'] : $order['firstName'];
|
||||
$data['payment_address_1'] = isset($order['customer']['address']) ? $order['customer']['address']['text'] : '';
|
||||
$data['payment_address_2'] = '';
|
||||
$data['payment_company'] = '';
|
||||
@ -179,34 +208,51 @@ class ModelExtensionRetailcrmHistoryV45 extends Model
|
||||
$data['payment_city'] = !empty($order['customer']['address']['city']) ? $order['customer']['address']['city'] : $order['delivery']['address']['city'];
|
||||
$data['payment_postcode'] = !empty( $order['customer']['address']['index'] ) ? $order['customer']['address']['index'] : $order['delivery']['address']['index'];
|
||||
|
||||
$region = '';
|
||||
$shippingZone = '';
|
||||
|
||||
if (is_int($order['delivery']['address']['region'])) {
|
||||
$region = $order['delivery']['address']['region'];
|
||||
$shippingZone = $order['delivery']['address']['region'];
|
||||
} else {
|
||||
foreach ($this->zones as $zone) {
|
||||
if ($order['delivery']['address']['region'] == $zone['name']) {
|
||||
$region = $zone['zone_id'];
|
||||
}
|
||||
$shippingZone = $this->getZoneByName($order['delivery']['address']['region']);
|
||||
|
||||
if ($shippingZone) {
|
||||
$shipping_zone_id = $shippingZone['zone_id'];
|
||||
} else {
|
||||
$shipping_zone_id = 0;
|
||||
}
|
||||
}
|
||||
|
||||
$data['payment_country_id'] = !empty($order['delivery']['address']['country']) ? $order['delivery']['address']['country'] : 0;
|
||||
$data['payment_zone_id'] = !empty($order['delivery']['address']['region']) ? $order['delivery']['address']['region'] : $region;
|
||||
if (isset($order['customer']['address']['region'])) {
|
||||
$paymentZone = $this->getZoneByName($order['customer']['address']['region']);
|
||||
|
||||
$data['shipping_country_id'] = !empty($order['delivery']['address']['country']) ? $order['delivery']['address']['country'] : 0;
|
||||
$data['shipping_zone_id'] = $region;
|
||||
if ($paymentZone) {
|
||||
$payment_zone_id = $paymentZone['zone_id'];
|
||||
} else {
|
||||
$payment_zone_id = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($order['delivery']['address']['countryIso'])) {
|
||||
$shippingCountry = $this->getCountryByIsoCode($order['delivery']['address']['countryIso']);
|
||||
}
|
||||
|
||||
if (isset($order['customer']['address']['countryIso'])) {
|
||||
$paymentCountry = $this->getCountryByIsoCode($order['customer']['address']['countryIso']);
|
||||
}
|
||||
|
||||
$data['payment_country_id'] = $paymentCountry ? $paymentCountry['country_id'] : 0;
|
||||
$data['payment_zone_id'] = $payment_zone_id;
|
||||
$data['shipping_country_id'] = $shippingCountry ? $shippingCountry['country_id'] : 0;
|
||||
$data['shipping_zone_id'] = $shipping_zone_id;
|
||||
$data['shipping_address'] = '0';
|
||||
$data['shipping_firstname'] = $order['firstName'];
|
||||
$data['shipping_lastname'] = (!empty($order['lastName'])) ? $order['lastName'] : ' ';
|
||||
$data['shipping_lastname'] = isset($order['lastName']) ? $order['lastName'] : $order['firstName'];
|
||||
$data['shipping_address_1'] = $order['delivery']['address']['text'];
|
||||
$data['shipping_address_2'] = '';
|
||||
$data['shipping_company'] = '';
|
||||
$data['shipping_company_id'] = '';
|
||||
$data['shipping_city'] = $order['delivery']['address']['city'];
|
||||
$data['shipping_postcode'] = $order['delivery']['address']['index'];
|
||||
|
||||
$data['shipping'] = $this->delivery[$order['delivery']['code']];
|
||||
$data['shipping_method'] = $this->ocDelivery[$data['shipping']];
|
||||
$data['shipping_code'] = $this->delivery[$order['delivery']['code']];
|
||||
@ -240,7 +286,6 @@ class ModelExtensionRetailcrmHistoryV45 extends Model
|
||||
$data['order_product'] = array();
|
||||
|
||||
foreach ($order['items'] as $item) {
|
||||
//$product = $this->model_catalog_product->getProduct($item['offer']['externalId']);
|
||||
$productId = $item['offer']['externalId'];
|
||||
$options = array();
|
||||
if(mb_strpos($item['offer']['externalId'], '#') > 1) {
|
||||
@ -335,7 +380,7 @@ class ModelExtensionRetailcrmHistoryV45 extends Model
|
||||
if (isset($order['payments'])) {
|
||||
$payment = end($order['payments']);
|
||||
} elseif (isset($order['paymentType'])) {
|
||||
$payment = $order['paymentType'];
|
||||
$payment['type'] = $order['paymentType'];
|
||||
}
|
||||
|
||||
$customer_id = (!empty($order['customer']['externalId']))
|
||||
@ -345,21 +390,35 @@ class ModelExtensionRetailcrmHistoryV45 extends Model
|
||||
$data = array();
|
||||
|
||||
if ($customer_id == 0) {
|
||||
if (isset($order['customer']['address']['countryIso'])) {
|
||||
$customerCountry = $this->getCountryByIsoCode($order['customer']['address']['countryIso']);
|
||||
} else {
|
||||
$customerCountry = $this->getCountryByIsoCode($order['delivery']['address']['countryIso']);
|
||||
}
|
||||
|
||||
if (isset($order['customer']['address']['region'])) {
|
||||
$customerZone = $this->getZoneByName($order['customer']['address']['region']);
|
||||
} else {
|
||||
$customerZone = $this->getZoneByName($order['delivery']['address']['region']);
|
||||
}
|
||||
|
||||
$cData = array(
|
||||
'store_id' => 0,
|
||||
'customer_group_id' => '1',
|
||||
'firstname' => $order['firstName'],
|
||||
'lastname' => (!empty($order['lastName'])) ? $order['lastName'] : ' ',
|
||||
'email' => $order['email'],
|
||||
'telephone' => (!empty($order['customer']['phones'][0]['number']) ) ? $order['customer']['phones'][0]['number'] : ' ',
|
||||
'firstname' => isset($order['patronymic']) ? $order['firstName'] . ' ' . $order['patronymic'] : $order['firstName'],
|
||||
'lastname' => (!empty($order['customer']['lastName'])) ? $order['customer']['lastName'] : ' ',
|
||||
'email' => $order['customer']['email'],
|
||||
'telephone' => $order['customer']['phones'] ? $order['customer']['phones'][0]['number'] : ' ',
|
||||
'fax' => '',
|
||||
'newsletter' => 0,
|
||||
'password' => 'tmppass',
|
||||
'status' => 1,
|
||||
'approved' => 1,
|
||||
'safe' => 0,
|
||||
'address' => array(
|
||||
array(
|
||||
'firstname' => $order['firstName'],
|
||||
'lastname' => (!empty($order['lastName'])) ? $order['lastName'] : ' ',
|
||||
'firstname' => isset($order['patronymic']) ? $order['firstName'] . ' ' . $order['patronymic'] : $order['firstName'],
|
||||
'lastname' => (!empty($order['customer']['lastName'])) ? $order['customer']['lastName'] : ' ',
|
||||
'address_1' => $order['customer']['address']['text'],
|
||||
'address_2' => ' ',
|
||||
'city' => !empty($order['customer']['address']['city']) ? $order['customer']['address']['city'] : $order['delivery']['address']['city'],
|
||||
@ -367,39 +426,39 @@ class ModelExtensionRetailcrmHistoryV45 extends Model
|
||||
'tax_id' => '1',
|
||||
'company' => '',
|
||||
'company_id' => '',
|
||||
'zone_id' => '0',
|
||||
'country_id' => 0
|
||||
'zone_id' => $customerZone ? $customerZone['zone_id'] : 0,
|
||||
'country_id' => $customerCountry ? $customerCountry['country_id'] : 0,
|
||||
'default' => '1'
|
||||
)
|
||||
),
|
||||
);
|
||||
|
||||
|
||||
$this->model_customer_customer->addCustomer($cData);
|
||||
|
||||
if (!empty($order['email'])) {
|
||||
$tryToFind = $this->model_customer_customer->getCustomerByEmail($order['email']);
|
||||
$customer_id = $tryToFind['customer_id'];
|
||||
} else {
|
||||
$last = $this->model_customer_customer->getCustomers($data = array('order' => 'DESC', 'limit' => 1));
|
||||
$customer_id = $last[0]['customer_id'];
|
||||
}
|
||||
$customer_id = $this->model_customer_customer->addCustomer($cData);
|
||||
|
||||
$customersIdsFix[] = array('id' => $order['customer']['id'], 'externalId' => (int)$customer_id);
|
||||
}
|
||||
|
||||
$mail = isset($order['email']) ? $order['email'] : $order['customer']['email'];
|
||||
$phone = isset($order['phone']) ? $order['phone'] : '';
|
||||
|
||||
if (!$phone) {
|
||||
$data['telephone'] = $order['customer']['phones'] ? $order['customer']['phones'][0]['number'] : '80000000000';
|
||||
} else {
|
||||
$data['telephone'] = $phone;
|
||||
}
|
||||
|
||||
$data['store_id'] = $store == null ? 0 : $store;
|
||||
$data['customer'] = $order['firstName'];
|
||||
$data['customer_id'] = $customer_id;
|
||||
$data['customer_group_id'] = 1;
|
||||
$data['firstname'] = $order['firstName'];
|
||||
$data['lastname'] = (!empty($order['lastName'])) ? $order['lastName'] : ' ';
|
||||
$data['email'] = $order['email'];
|
||||
$data['telephone'] = (!empty($order['customer']['phones'][0]['number'])) ? $order['customer']['phones'][0]['number'] : ' ';
|
||||
$data['lastname'] = (isset($order['lastName'])) ? $order['lastName'] : $order['firstName'];
|
||||
$data['email'] = $mail ? $mail : uniqid() . '@retailrcm.ru';
|
||||
$data['comment'] = !empty($order['customerComment']) ? $order['customerComment'] : '';
|
||||
$data['fax'] = '';
|
||||
$data['payment_address'] = '0';
|
||||
$data['payment_firstname'] = $order['firstName'];
|
||||
$data['payment_lastname'] = (!empty($order['lastName'])) ? $order['lastName'] : ' ';
|
||||
$data['payment_lastname'] = (isset($order['lastName'])) ? $order['lastName'] : $order['firstName'];
|
||||
$data['payment_address_1'] = $order['customer']['address']['text'];
|
||||
$data['payment_address_2'] = '';
|
||||
$data['payment_company'] = '';
|
||||
@ -407,25 +466,45 @@ class ModelExtensionRetailcrmHistoryV45 extends Model
|
||||
$data['payment_city'] = !empty($order['customer']['address']['city']) ? $order['customer']['address']['city'] : $order['delivery']['address']['city'];
|
||||
$data['payment_postcode'] = !empty($order['customer']['address']['index']) ? $order['customer']['address']['index'] : $order['delivery']['address']['index'];
|
||||
|
||||
$region = '';
|
||||
$shippingZone = '';
|
||||
|
||||
if (!empty($order['delivery']['address']['region']) && is_int($order['delivery']['address']['region'])) {
|
||||
$region = $order['delivery']['address']['region'];
|
||||
$shippingZone = $order['delivery']['address']['region'];
|
||||
} else {
|
||||
foreach ($this->zones as $zone) {
|
||||
if ($order['delivery']['address']['region'] == $zone['name']) {
|
||||
$region = $zone['zone_id'];
|
||||
}
|
||||
$shippingZone = $this->getZoneByName($order['delivery']['address']['region']);
|
||||
|
||||
if ($shippingZone) {
|
||||
$shipping_zone_id = $shippingZone['zone_id'];
|
||||
} else {
|
||||
$shipping_zone_id = 0;
|
||||
}
|
||||
}
|
||||
|
||||
$data['payment_country_id'] = !empty($order['delivery']['address']['country']) ? $order['delivery']['address']['country'] : 0;
|
||||
$data['payment_zone_id'] = !empty($order['delivery']['address']['region']) ? $order['delivery']['address']['region'] : $region;
|
||||
$data['shipping_country_id'] = !empty($order['delivery']['address']['country']) ? $order['delivery']['address']['country'] : 0;
|
||||
$data['shipping_zone_id'] = $region;
|
||||
if (isset($order['customer']['address']['region'])) {
|
||||
$paymentZone = $this->getZoneByName($order['customer']['address']['region']);
|
||||
|
||||
if ($paymentZone) {
|
||||
$payment_zone_id = $paymentZone['zone_id'];
|
||||
} else {
|
||||
$payment_zone_id = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($order['delivery']['address']['countryIso'])) {
|
||||
$shippingCountry = $this->getCountryByIsoCode($order['delivery']['address']['countryIso']);
|
||||
}
|
||||
|
||||
if (isset($order['customer']['address']['countryIso'])) {
|
||||
$paymentCountry = $this->getCountryByIsoCode($order['customer']['address']['countryIso']);
|
||||
}
|
||||
|
||||
$data['payment_country_id'] = $paymentCountry ? $paymentCountry['country_id'] : 0;
|
||||
$data['payment_zone_id'] = $payment_zone_id;
|
||||
$data['shipping_country_id'] = $shippingCountry ? $shippingCountry['country_id'] : 0;
|
||||
$data['shipping_zone_id'] = $shipping_zone_id;
|
||||
$data['shipping_address'] = '0';
|
||||
$data['shipping_firstname'] = $order['firstName'];
|
||||
$data['shipping_lastname'] = (!empty($order['lastName'])) ? $order['lastName'] : ' ';
|
||||
$data['shipping_lastname'] = (isset($order['lastName'])) ? $order['lastName'] : $order['firstName'];
|
||||
$data['shipping_address_1'] = $order['delivery']['address']['text'];
|
||||
$data['shipping_address_2'] = '';
|
||||
$data['shipping_company'] = '';
|
||||
@ -461,19 +540,35 @@ class ModelExtensionRetailcrmHistoryV45 extends Model
|
||||
$data['order_product'] = array();
|
||||
|
||||
foreach ($order['items'] as $item) {
|
||||
$product = $this->model_catalog_product->getProduct($item['offer']['externalId']);
|
||||
$data['order_product'][] = array(
|
||||
'product_id' => $item['offer']['externalId'],
|
||||
'name' => $item['offer']['name'],
|
||||
'quantity' => $item['quantity'],
|
||||
'price' => $item['initialPrice'],
|
||||
'total' => $item['initialPrice'] * $item['quantity'],
|
||||
'model' => $product['model'],
|
||||
$productId = $item['offer']['externalId'];
|
||||
$options = array();
|
||||
if(mb_strpos($item['offer']['externalId'], '#') > 1) {
|
||||
$offer = explode('#', $item['offer']['externalId']);
|
||||
$productId = $offer[0];
|
||||
$optionsFromCRM = explode('_', $offer[1]);
|
||||
|
||||
// this data will not retrive from crm
|
||||
'order_product_id' => '',
|
||||
'tax' => 0,
|
||||
'reward' => 0
|
||||
foreach ($optionsFromCRM as $optionFromCRM) {
|
||||
$optionData = explode('-', $optionFromCRM);
|
||||
$productOptionId = $optionData[0];
|
||||
$optionValueId = $optionData[1];
|
||||
|
||||
$productOptions = $this->model_catalog_product->getProductOptions($productId);
|
||||
|
||||
foreach($productOptions as $productOption) {
|
||||
if($productOptionId == $productOption['product_option_id']) {
|
||||
foreach($productOption['product_option_value'] as $productOptionValue) {
|
||||
if($productOptionValue['option_value_id'] == $optionValueId) {
|
||||
$options[$productOptionId] = $productOptionValue['product_option_value_id'];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$data['order_product'][] = array(
|
||||
'product_id' => $productId,
|
||||
'quantity' => $item['quantity'],
|
||||
'option' => $options
|
||||
);
|
||||
}
|
||||
|
||||
@ -509,11 +604,9 @@ class ModelExtensionRetailcrmHistoryV45 extends Model
|
||||
$data['fromApi'] = true;
|
||||
$data['order_status_id'] = 1;
|
||||
|
||||
$this->opencartApiClient->addOrder($data);
|
||||
$order_id = $this->opencartApiClient->addOrder($data);
|
||||
|
||||
$last = $this->model_sale_order->getOrders($data = array('order' => 'DESC', 'limit' => 1, 'start' => 0));
|
||||
|
||||
$ordersIdsFix[] = array('id' => $order['id'], 'externalId' => (int) $last[0]['order_id']);
|
||||
$ordersIdsFix[] = array('id' => $order['id'], 'externalId' => (int) $order_id);
|
||||
}
|
||||
|
||||
return array('customers' => $customersIdsFix, 'orders' => $ordersIdsFix);
|
||||
@ -521,25 +614,58 @@ class ModelExtensionRetailcrmHistoryV45 extends Model
|
||||
|
||||
protected function updateCustomers($customers)
|
||||
{
|
||||
$settings = $this->model_setting_setting->getSetting($this->moduleTitle);
|
||||
|
||||
if (isset($settings[$this->moduleTitle . '_custom_field'])) {
|
||||
$settings = array_flip($settings[$this->moduleTitle . '_custom_field']);
|
||||
}
|
||||
|
||||
foreach ($customers as $customer) {
|
||||
|
||||
$customer_id = $customer['externalId'];
|
||||
$customerData = $this->model_customer_customer->getCustomer($customer_id);
|
||||
|
||||
$customerData['firstname'] = $customer['firstName'];
|
||||
$customerData['lastname'] = $customer['lastName'];
|
||||
$customerData['lastname'] = isset($customer['lastName']) ? $customer['lastName'] : '';
|
||||
$customerData['email'] = $customer['email'];
|
||||
$customerData['telephone'] = $customer['phones'][0]['number'];
|
||||
$customerData['telephone'] = $customer['phones'] ? $customer['phones'][0]['number'] : '';
|
||||
|
||||
$customerAddress = $this->model_customer_customer->getAddress($customerData['address_id']);
|
||||
|
||||
$customerAddress['firstname'] = $customer['firstName'];
|
||||
$customerAddress['lastname'] = $customer['lastName'];
|
||||
if (isset($customer['address']['countryIso'])) {
|
||||
$customerCountry = $this->getCountryByIsoCode($customer['address']['countryIso']);
|
||||
}
|
||||
|
||||
if (isset($customer['address']['region'])) {
|
||||
$customerZone = $this->getZoneByName($customer['address']['region']);
|
||||
}
|
||||
|
||||
$customerAddress['firstname'] = isset($customer['patronymic']) ? $customer['firstName'] . ' ' . $customer['patronymic'] : $customer['firstName'];
|
||||
$customerAddress['lastname'] = isset($customer['lastName']) ? $customer['lastName'] : '';
|
||||
$customerAddress['address_1'] = $customer['address']['text'];
|
||||
$customerAddress['city'] = $customer['address']['city'];
|
||||
$customerAddress['postcode'] = $customer['address']['index'];
|
||||
$customerAddress['postcode'] = $customer['address']['index'] ? $customer['address']['index'] : '';
|
||||
|
||||
if (isset($customerCountry)) {
|
||||
$customerAddress['country_id'] = $customerCountry['country_id'];
|
||||
}
|
||||
|
||||
if (isset($customerZone)) {
|
||||
$customerAddress['zone_id'] = $customerZone['zone_id'];
|
||||
}
|
||||
|
||||
$customerData['address'] = array($customerAddress);
|
||||
|
||||
if ($settings && $customer['customFields']) {
|
||||
foreach ($customer['customFields'] as $code => $value) {
|
||||
if (array_key_exists($code, $settings)) {
|
||||
$customFields[$settings[$code]] = $value;
|
||||
}
|
||||
}
|
||||
|
||||
$customerData['custom_field'] = isset($customFields) ? $customFields : '';
|
||||
}
|
||||
|
||||
$this->model_customer_customer->editCustomer($customer_id, $customerData);
|
||||
}
|
||||
}
|
||||
@ -565,4 +691,18 @@ class ModelExtensionRetailcrmHistoryV45 extends Model
|
||||
|
||||
return $title;
|
||||
}
|
||||
|
||||
public function getCountryByIsoCode($isoCode)
|
||||
{
|
||||
$query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "country` WHERE iso_code_2 = '" . $isoCode . "'");
|
||||
|
||||
return $query->row;
|
||||
}
|
||||
|
||||
public function getZoneByName($name)
|
||||
{
|
||||
$query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "zone` WHERE name = '" . $name . "'");
|
||||
|
||||
return $query->row;
|
||||
}
|
||||
}
|
||||
|
@ -41,6 +41,14 @@ class ModelExtensionRetailcrmReferences extends Model
|
||||
);
|
||||
}
|
||||
|
||||
public function getCustomFields()
|
||||
{
|
||||
return array(
|
||||
'opencart' => $this->getOpencartCustomFields(),
|
||||
'retailcrm' => $this->getApiCustomerCustomFields()
|
||||
);
|
||||
}
|
||||
|
||||
public function getOpercartOrderStatuses()
|
||||
{
|
||||
$this->load->model('localisation/order_status');
|
||||
@ -77,6 +85,13 @@ class ModelExtensionRetailcrmReferences extends Model
|
||||
return $paymentTypes;
|
||||
}
|
||||
|
||||
public function getOpencartCustomFields()
|
||||
{
|
||||
$this->load->model('customer/custom_field');
|
||||
|
||||
return $this->model_customer_custom_field->getCustomFields();
|
||||
}
|
||||
|
||||
public function getApiDeliveryTypes()
|
||||
{
|
||||
$this->initApi();
|
||||
@ -104,6 +119,16 @@ class ModelExtensionRetailcrmReferences extends Model
|
||||
return (!$response->isSuccessful()) ? array() : $response->paymentTypes;
|
||||
}
|
||||
|
||||
public function getApiCustomerCustomFields()
|
||||
{
|
||||
$this->initApi();
|
||||
|
||||
$filter = array('entity' => 'customer');
|
||||
$response = $this->retailcrm->customFieldsList($filter);
|
||||
|
||||
return (!$response->isSuccessful()) ? array() : $response->customFields;
|
||||
}
|
||||
|
||||
protected function initApi()
|
||||
{
|
||||
$moduleTitle = $this->getModuleTitle();
|
||||
|
@ -43,6 +43,9 @@
|
||||
<?php if (isset($saved_settings['retailcrm_apikey']) && $saved_settings['retailcrm_apikey'] != '' && isset($saved_settings['retailcrm_url']) && $saved_settings['retailcrm_url'] != ''): ?>
|
||||
<li><a href="#tab-references" data-toggle="tab"><?php echo $references_tab_text; ?></a></li>
|
||||
<li><a href="#tab-collector" data-toggle="tab"><?php echo $collector_tab_text; ?></a></li>
|
||||
<?php if ($saved_settings['retailcrm_apiversion'] == 'v5') : ?>
|
||||
<li><a href="#tab-custom_fields" data-toggle="tab"><?php echo $custom_fields_tab_text; ?></a></li>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?>
|
||||
</ul>
|
||||
|
||||
@ -235,6 +238,41 @@
|
||||
<?php endif; ?>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php if (isset($saved_settings['retailcrm_apiversion']) && $saved_settings['retailcrm_apiversion'] == 'v5' && isset($customFields)) : ?>
|
||||
<div class="tab-pane" id="tab-custom_fields">
|
||||
<h4><?php echo $retailcrm_dict_custom_fields; ?></h4>
|
||||
<?php if ($customFields['retailcrm'] && $customFields['opencart']) : ?>
|
||||
<?php foreach ($customFields['opencart'] as $customField) : ?>
|
||||
<?php $fid = $customField['custom_field_id'] ?>
|
||||
<div class="retailcrm_unit">
|
||||
<select id="retailcrm_custom_field_<?php echo $fid; ?>" name="retailcrm_custom_field[<?php echo $fid; ?>]" >
|
||||
<?php foreach ($customFields['retailcrm'] as $v): ?>
|
||||
<option value="<?php echo $v['code'];?>" <?php if(isset($saved_settings['retailcrm_custom_field'][$fid]) && $v['code'] == $saved_settings['retailcrm_custom_field'][$fid]):?>selected="selected"<?php endif;?>>
|
||||
<?php echo $v['name'];?>
|
||||
</option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
<label for="retailcrm_custom_field_<?php echo $fid; ?>"><?php echo $customField['name']; ?></label>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
<?php elseif (!$customFields['retailcrm'] && !$customFields['opencart']) : ?>
|
||||
<div class="alert alert-info"><i class="fa fa-exclamation-circle"></i>
|
||||
<button type="button" class="close" data-dismiss="alert">×</button>
|
||||
<?php echo $text_error_custom_field; ?>
|
||||
</div>
|
||||
<?php elseif (!$customFields['retailcrm']) : ?>
|
||||
<div class="alert alert-info"><i class="fa fa-exclamation-circle"></i>
|
||||
<button type="button" class="close" data-dismiss="alert">×</button>
|
||||
<?php echo $text_error_cf_retailcrm; ?>
|
||||
</div>
|
||||
<?php elseif (!$customFields['opencart']) : ?>
|
||||
<div class="alert alert-info"><i class="fa fa-exclamation-circle"></i>
|
||||
<button type="button" class="close" data-dismiss="alert">×</button>
|
||||
<?php echo $text_error_cf_opencart; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
@ -292,7 +330,7 @@
|
||||
alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
|
||||
},
|
||||
success: function(data, textStatus, jqXHR) {
|
||||
if (jqXHR['responseText'] == 'false') {
|
||||
if (jqXHR['responseText'] == '400') {
|
||||
$('.alert-danger').remove();
|
||||
$('#content > .container-fluid').prepend('<div class="alert alert-danger"><i class="fa fa-exclamation-circle"></i><?php echo $text_error_order; ?></div>');
|
||||
$('#export_order').button('reset');
|
||||
|
@ -236,6 +236,41 @@
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</div>
|
||||
{% if saved_settings.retailcrm_apiversion is defined and saved_settings.retailcrm_apiversion == 'v5' and customFields is defined %}
|
||||
<div class="tab-pane" id="tab-custom_fields">
|
||||
<h4>{{ retailcrm_dict_custom_fields }}</h4>
|
||||
{% if customFields.retailcrm is not empty and customFields.opencart is not empty %}
|
||||
{% for customField in customFields.opencart %}
|
||||
{% set fid = customField.custom_field_id %}
|
||||
<div class="retailcrm_unit">
|
||||
<select id="retailcrm_custom_field_{{ fid }}" name="retailcrm_custom_field[{{ fid }}]" >
|
||||
{% for v in customFields.retailcrm %}
|
||||
<option value="{{ v.code }}" {% if saved_settings.retailcrm_custom_field.fid is defined and v.code == saved_settings.retailcrm_custom_field.fid %} selected="selected" {% endif %}>
|
||||
{{ v.name }}
|
||||
</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
<label for="retailcrm_custom_field_{{ fid }}">{{ customField.name }}</label>
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% elseif customFields.retailcrm is empty and customFields.opencart is empty %}
|
||||
<div class="alert alert-info"><i class="fa fa-exclamation-circle"></i>
|
||||
<button type="button" class="close" data-dismiss="alert">×</button>
|
||||
{{ text_error_custom_field }}
|
||||
</div>
|
||||
{% elseif customFields.retailcrm is empty %}
|
||||
<div class="alert alert-info"><i class="fa fa-exclamation-circle"></i>
|
||||
<button type="button" class="close" data-dismiss="alert">×</button>
|
||||
{{ text_error_cf_retailcrm }}
|
||||
</div>
|
||||
{% elseif customFields.opencart is empty %}
|
||||
<div class="alert alert-info"><i class="fa fa-exclamation-circle"></i>
|
||||
<button type="button" class="close" data-dismiss="alert">×</button>
|
||||
{{ text_error_cf_opencart }}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
@ -293,7 +328,7 @@
|
||||
alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
|
||||
},
|
||||
success: function(data, textStatus, jqXHR) {
|
||||
if (jqXHR['responseText'] == 'false') {
|
||||
if (jqXHR['responseText'] == '400') {
|
||||
$('.alert-danger').remove();
|
||||
$('#content > .container-fluid').prepend('<div class="alert alert-danger"><i class="fa fa-exclamation-circle"></i>{{ text_error_order }}</div>');
|
||||
$('#export_order').button('reset');
|
||||
|
@ -55,6 +55,14 @@ class ControllerApiRetailcrm extends Controller
|
||||
}
|
||||
|
||||
if ($this->config->get($shippingCode . '_status')) {
|
||||
if ($shippingCode == 'free') {
|
||||
$free_total = $this->config->get('free_total');
|
||||
|
||||
if ($free_total > 0) {
|
||||
$this->config->set('free_total', 0);
|
||||
}
|
||||
}
|
||||
|
||||
if($this->{'model_extension_shipping_' . $shippingModule['code']}->getQuote($address)) {
|
||||
$quote_data[] = $this->{'model_extension_shipping_' . $shippingModule['code']}->getQuote($address);
|
||||
}
|
||||
|
@ -26,6 +26,8 @@ class ModelExtensionRetailcrmCustomer extends Model {
|
||||
}
|
||||
|
||||
private function process($customer) {
|
||||
$moduleTitle = $this->getModuleTitle();
|
||||
|
||||
$customerToCrm = array(
|
||||
'externalId' => $customer['customer_id'],
|
||||
'firstName' => $customer['firstname'],
|
||||
@ -49,6 +51,18 @@ class ModelExtensionRetailcrmCustomer extends Model {
|
||||
);
|
||||
}
|
||||
|
||||
if (isset($this->settings[$moduleTitle . '_custom_field']) && $customer['custom_field']) {
|
||||
$customFields = json_decode($customer['custom_field']);
|
||||
|
||||
foreach ($customFields as $key => $value) {
|
||||
if (isset($this->settings[$moduleTitle . '_custom_field'][$key])) {
|
||||
$customFieldsToCrm[$this->settings[$moduleTitle . '_custom_field'][$key]] = $value;
|
||||
}
|
||||
}
|
||||
|
||||
$customerToCrm['customFields'] = $customFieldsToCrm;
|
||||
}
|
||||
|
||||
return $customerToCrm;
|
||||
}
|
||||
|
||||
@ -56,18 +70,18 @@ class ModelExtensionRetailcrmCustomer extends Model {
|
||||
{
|
||||
$this->load->model('setting/setting');
|
||||
$moduleTitle = $this->getModuleTitle();
|
||||
$settings = $this->model_setting_setting->getSetting($moduleTitle);
|
||||
$this->settings = $this->model_setting_setting->getSetting($moduleTitle);
|
||||
|
||||
if(empty($settings[$moduleTitle . '_url']) || empty($settings[$moduleTitle . '_apikey']))
|
||||
if(empty($this->settings[$moduleTitle . '_url']) || empty($this->settings[$moduleTitle . '_apikey']))
|
||||
return false;
|
||||
|
||||
require_once DIR_SYSTEM . 'library/retailcrm/bootstrap.php';
|
||||
|
||||
$this->retailcrmApi = new RetailcrmProxy(
|
||||
$settings[$moduleTitle . '_url'],
|
||||
$settings[$moduleTitle . '_apikey'],
|
||||
$this->settings[$moduleTitle . '_url'],
|
||||
$this->settings[$moduleTitle . '_apikey'],
|
||||
DIR_SYSTEM . 'storage/logs/retailcrm.log',
|
||||
$settings[$moduleTitle . '_apiversion']
|
||||
$this->settings[$moduleTitle . '_apiversion']
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -223,12 +223,12 @@ class OpencartApiClient {
|
||||
$this->request('customer', array(), $customer);
|
||||
|
||||
$products = array();
|
||||
foreach($data['order_product'] as $product) {
|
||||
$product = array(
|
||||
'product_id' => $product['product_id'],
|
||||
'quantity' => $product['quantity'],
|
||||
foreach ($data['order_product'] as $order_product) {
|
||||
$products[] = array(
|
||||
'product_id' => $order_product['product_id'],
|
||||
'quantity' => $order_product['quantity'],
|
||||
'option' => $order_product['option']
|
||||
);
|
||||
$products[] = $product;
|
||||
}
|
||||
$this->request('cart/add', array(), array('product' => $products));
|
||||
|
||||
@ -279,7 +279,11 @@ class OpencartApiClient {
|
||||
'comment' => $data['comment'],
|
||||
'affiliate_id' => $data['affiliate_id'],
|
||||
);
|
||||
$this->request('order/add', array(), $order);
|
||||
$response = $this->request('order/add', array(), $order);
|
||||
|
||||
if (isset($response['order_id'])) {
|
||||
return $response['order_id'];
|
||||
}
|
||||
}
|
||||
|
||||
private function getInnerIpAddr() {
|
||||
|
@ -12,8 +12,6 @@
|
||||
*/
|
||||
class RetailcrmApiClient3
|
||||
{
|
||||
const VERSION = 'v3';
|
||||
|
||||
protected $client;
|
||||
|
||||
/**
|
||||
@ -29,18 +27,32 @@ class RetailcrmApiClient3
|
||||
* @param string $site
|
||||
* @return mixed
|
||||
*/
|
||||
public function __construct($url, $apiKey, $site = null)
|
||||
public function __construct($url, $apiKey, $version = null, $site = null)
|
||||
{
|
||||
if ('/' != substr($url, strlen($url) - 1, 1)) {
|
||||
$url .= '/';
|
||||
}
|
||||
|
||||
$url = $url . 'api/' . self::VERSION;
|
||||
$url = $version == null ? $url . 'api' : $url . 'api/' . $version;
|
||||
|
||||
$this->client = new RetailcrmHttpClient($url, array('apiKey' => $apiKey));
|
||||
$this->siteCode = $site;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns api versions list
|
||||
*
|
||||
* @throws \RetailCrm\Exception\InvalidJsonException
|
||||
* @throws \RetailCrm\Exception\CurlException
|
||||
* @throws \InvalidArgumentException
|
||||
*
|
||||
* @return ApiResponse
|
||||
*/
|
||||
public function apiVersions()
|
||||
{
|
||||
return $this->client->makeRequest('/api-versions', RetailcrmHttpClient::METHOD_GET);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a order
|
||||
*
|
||||
|
@ -12,8 +12,6 @@
|
||||
*/
|
||||
class RetailcrmApiClient4
|
||||
{
|
||||
const VERSION = 'v4';
|
||||
|
||||
protected $client;
|
||||
|
||||
/**
|
||||
@ -32,18 +30,32 @@ class RetailcrmApiClient4
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function __construct($url, $apiKey, $site = null)
|
||||
public function __construct($url, $apiKey, $version = null, $site = null)
|
||||
{
|
||||
if ('/' !== $url[strlen($url) - 1]) {
|
||||
$url .= '/';
|
||||
}
|
||||
|
||||
$url = $url . 'api/' . self::VERSION;
|
||||
$url = $version == null ? $url . 'api' : $url . 'api/' . $version;
|
||||
|
||||
$this->client = new RetailcrmHttpClient($url, array('apiKey' => $apiKey));
|
||||
$this->siteCode = $site;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns api versions list
|
||||
*
|
||||
* @throws \RetailCrm\Exception\InvalidJsonException
|
||||
* @throws \RetailCrm\Exception\CurlException
|
||||
* @throws \InvalidArgumentException
|
||||
*
|
||||
* @return ApiResponse
|
||||
*/
|
||||
public function apiVersions()
|
||||
{
|
||||
return $this->client->makeRequest('/api-versions', RetailcrmHttpClient::METHOD_GET);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns users list
|
||||
*
|
||||
|
@ -12,8 +12,6 @@
|
||||
*/
|
||||
class RetailcrmApiClient5
|
||||
{
|
||||
const VERSION = 'v5';
|
||||
|
||||
protected $client;
|
||||
|
||||
/**
|
||||
@ -32,18 +30,32 @@ class RetailcrmApiClient5
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function __construct($url, $apiKey, $site = null)
|
||||
public function __construct($url, $apiKey, $version = null, $site = null)
|
||||
{
|
||||
if ('/' !== $url[strlen($url) - 1]) {
|
||||
$url .= '/';
|
||||
}
|
||||
|
||||
$url = $url . 'api/' . self::VERSION;
|
||||
$url = $version == null ? $url . 'api' : $url . 'api/' . $version;
|
||||
|
||||
$this->client = new RetailcrmHttpClient($url, array('apiKey' => $apiKey));
|
||||
$this->siteCode = $site;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns api versions list
|
||||
*
|
||||
* @throws \RetailCrm\Exception\InvalidJsonException
|
||||
* @throws \RetailCrm\Exception\CurlException
|
||||
* @throws \InvalidArgumentException
|
||||
*
|
||||
* @return ApiResponse
|
||||
*/
|
||||
public function apiVersions()
|
||||
{
|
||||
return $this->client->makeRequest('/api-versions', RetailcrmHttpClient::METHOD_GET);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns users list
|
||||
*
|
||||
|
@ -28,14 +28,14 @@ class RetailcrmHistoryHelper {
|
||||
unset($change['order']['contragent']);
|
||||
}
|
||||
|
||||
if(!empty($orders) && $orders[$change['order']['id']]) {
|
||||
if(!empty($orders) && isset($orders[$change['order']['id']])) {
|
||||
$orders[$change['order']['id']] = array_merge($orders[$change['order']['id']], $change['order']);
|
||||
} else {
|
||||
$orders[$change['order']['id']] = $change['order'];
|
||||
}
|
||||
|
||||
if(isset($change['item']) && $change['item']) {
|
||||
if($orders[$change['order']['id']]['items'][$change['item']['id']]) {
|
||||
if(isset($orders[$change['order']['id']]['items'][$change['item']['id']])) {
|
||||
$orders[$change['order']['id']]['items'][$change['item']['id']] = array_merge($orders[$change['order']['id']]['items'][$change['item']['id']], $change['item']);
|
||||
} else {
|
||||
$orders[$change['order']['id']]['items'][$change['item']['id']] = $change['item'];
|
||||
@ -47,7 +47,7 @@ class RetailcrmHistoryHelper {
|
||||
if(empty($change['newValue']) && $change['field'] == 'order_product') {
|
||||
$orders[$change['order']['id']]['items'][$change['item']['id']]['delete'] = true;
|
||||
}
|
||||
if(!$orders[$change['order']['id']]['items'][$change['item']['id']]['create'] && $fields['item'][$change['field']]) {
|
||||
if(!isset($orders[$change['order']['id']]['items'][$change['item']['id']]['create']) && $fields['item'][$change['field']]) {
|
||||
$orders[$change['order']['id']]['items'][$change['item']['id']][$fields['item'][$change['field']]] = $change['newValue'];
|
||||
}
|
||||
} else {
|
||||
|
@ -10,20 +10,20 @@ class RetailcrmProxy
|
||||
private $api;
|
||||
private $log;
|
||||
|
||||
public function __construct($url, $key, $log, $version)
|
||||
public function __construct($url, $key, $log, $version = null)
|
||||
{
|
||||
if (!$version) $version = 'v4';
|
||||
switch ($version) {
|
||||
case 'v5':
|
||||
$this->api = new RetailcrmApiClient5($url, $key);
|
||||
$this->api = new RetailcrmApiClient5($url, $key, $version);
|
||||
break;
|
||||
|
||||
case 'v4':
|
||||
$this->api = new RetailcrmApiClient4($url, $key);
|
||||
$this->api = new RetailcrmApiClient4($url, $key, $version);
|
||||
break;
|
||||
|
||||
case 'v3':
|
||||
$this->api = new RetailcrmApiClient3($url, $key);
|
||||
$this->api = new RetailcrmApiClient3($url, $key, $version);
|
||||
break;
|
||||
case null:
|
||||
$this->api = new RetailcrmApiClient3($url, $key, $version);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -63,6 +63,12 @@
|
||||
<field id="shipment_date" group="order">shipmentDate</field>
|
||||
<field id="shipped" group="order">shipped</field>
|
||||
<!--<field id="order_product" group="order">item</field>-->
|
||||
<field id="payment" group="order">payments</field>
|
||||
<field id="payments.amount" group="order">amount</field>
|
||||
<field id="payments.paid_at" group="order">paidAt</field>
|
||||
<field id="payments.comment" group="order">comment</field>
|
||||
<field id="payments.type" group="order">type</field>
|
||||
<field id="payments.status" group="order">status</field>
|
||||
|
||||
<field id="order_product.id" group="item">id</field>
|
||||
<field id="order_product.initial_price" group="item">initialPrice</field>
|
||||
@ -70,6 +76,7 @@
|
||||
<field id="order_product.discount_percent" group="item">discountPercent</field>
|
||||
<field id="order_product.quantity" group="item">quantity</field>
|
||||
<field id="order_product.status" group="item">status</field>
|
||||
<field id="order_product.summ" group="item">summ</field>
|
||||
|
||||
<field id="delivery_type" group="delivery">code</field>
|
||||
<field id="delivery_service" group="delivery">service</field>
|
||||
|
Loading…
Reference in New Issue
Block a user