diff --git a/doc/1. Setup/Configuration.md b/doc/1. Setup/Configuration.md
deleted file mode 100644
index 94c18d7..0000000
--- a/doc/1. Setup/Configuration.md
+++ /dev/null
@@ -1,2 +0,0 @@
-# Configuration
-
diff --git a/doc/1. Setup/Configuration/Connection.md b/doc/1. Setup/Configuration/Connection.md
new file mode 100644
index 0000000..30c1b0f
--- /dev/null
+++ b/doc/1. Setup/Configuration/Connection.md
@@ -0,0 +1,21 @@
+# Connection
+
+## Order number
+
+Данные опции позволяют передавать номер заказа при синхронизации заказов между PrestaShop и Simla.com.
+
+### Опция "Send order number to Simla.com"
+
+| Статус | Номер заказа в PrestaShop | Номер заказа в Simla.com |
+|-------------|-----------------------------|----------------------------------------------------------------|
+| Включена | `reference` | `reference` |
+| Выключена | `reference` | Cоответствует шаблону в CRM для заказа, созданного через API |
+
+### Опция "Receive order number from Simla.com"
+
+| Статус | Номер заказа в Simla.com | Номер заказа в PrestaShop |
+|-------------|-------------------------------|--------------------------------------------------------------|
+| Включена | Cоответствует шаблону в CRM | Cоответствует шаблону в CRM |
+| Выключена | Cоответствует шаблону в CRM | `reference` |
+
+Вернуть логику передачи внешнего ID заказа в Simla.com можно путём указания в настройках CRM в поле "Шаблон генерации номера заказа из API" значения `{external_id}`.
diff --git a/doc/1. Setup/Configuration/README.md b/doc/1. Setup/Configuration/README.md
new file mode 100644
index 0000000..0a4a18e
--- /dev/null
+++ b/doc/1. Setup/Configuration/README.md
@@ -0,0 +1,3 @@
+# Configuration
+
+1. [Connection](Connection.md)
\ No newline at end of file
diff --git a/doc/1. Setup/README.md b/doc/1. Setup/README.md
index 8678c83..32d5bcd 100644
--- a/doc/1. Setup/README.md
+++ b/doc/1. Setup/README.md
@@ -1,6 +1,6 @@
# Setup
1. [Installation](Installation.md)
-2. [Configuration](Configuration.md)
+2. [Configuration](./Configuration/README.md)
3. [Upgrade](Upgrade.md)
diff --git a/retailcrm/lib/RetailcrmHistory.php b/retailcrm/lib/RetailcrmHistory.php
index 5e4f3d8..a45b027 100644
--- a/retailcrm/lib/RetailcrmHistory.php
+++ b/retailcrm/lib/RetailcrmHistory.php
@@ -187,6 +187,8 @@ class RetailcrmHistory
$lastSync = Configuration::get('RETAILCRM_LAST_ORDERS_SYNC');
$lastDate = Configuration::get('RETAILCRM_LAST_SYNC');
$references = new RetailcrmReferences(self::$api);
+ $receiveOrderNumber = (bool)(Configuration::get(RetailCRM::ENABLE_ORDER_NUMBER_RECEIVING));
+ $sendOrderNumber = (bool)(Configuration::get(RetailCRM::ENABLE_ORDER_NUMBER_SENDING));
if ($lastSync === false && $lastDate === false) {
$filter = array(
@@ -204,6 +206,7 @@ class RetailcrmHistory
}
$orderFix = array();
+ $updateOrderIds = array();
$newItemsIdsByOrderId = array();
$historyChanges = array();
@@ -489,13 +492,14 @@ class RetailcrmHistory
$newOrder = new Order();
$newOrder->id_shop = Context::getContext()->shop->id;
$newOrder->id_shop_group = intval(Context::getContext()->shop->id_shop_group);
- $newOrder->reference = $newOrder->generateReference();
$newOrder->id_address_delivery = isset($addressDelivery->id) ? (int)$addressDelivery->id : 0;
$newOrder->id_address_invoice = isset($addressInvoice->id) ? (int)$addressInvoice->id : 0;
$newOrder->id_cart = (int)$cart->id;
$newOrder->id_currency = $default_currency;
$newOrder->id_lang = self::$default_lang;
$newOrder->id_customer = (int)$customer->id;
+ $orderNumber = $receiveOrderNumber ? $order['number'] : $newOrder->generateReference();
+ $newOrder->reference = $orderNumber;
if (isset($deliveryType)) {
$newOrder->id_carrier = (int)$deliveryType;
@@ -712,15 +716,13 @@ class RetailcrmHistory
// update order items ids in crm
$newItemsIdsByOrderId[$newOrder->id] = $newItemsIds;
- //TODO
- // Also update orders numbers after creating them in PrestaShop.
- // Current logic will result in autogenerated order numbers in retailCRM if
- // order was placed via retailCRM interface.
- // $upOrder = array(
- // 'externalId' => $newOrder->id,
- // 'number' => $newOrder->reference
- // );
- // self::$api->ordersEdit($upOrder);
+ // collect orders id and reference if option sendOrderNumber enabled
+ if ($sendOrderNumber) {
+ array_push($updateOrderIds, array(
+ 'externalId' => $newOrder->id,
+ 'number' => $newOrder->reference,
+ ));
+ }
} else {
@@ -1103,6 +1105,20 @@ class RetailcrmHistory
}
}
}
+
+ // update order number in PS if receiveOrderNumber option (CRM->PS) enabled
+ if (isset($order['number']) && $receiveOrderNumber) {
+ $orderToUpdate->reference = $order['number'];
+ $orderToUpdate->update();
+ }
+
+ // collect orders id and reference if option sendOrderNumber enabled
+ if ($sendOrderNumber) {
+ array_push($updateOrderIds, array(
+ 'externalId' => $orderToUpdate->id,
+ 'number' => $orderToUpdate->reference,
+ ));
+ }
}
}
@@ -1110,6 +1126,13 @@ class RetailcrmHistory
if (!empty($orderFix)) {
self::$api->ordersFixExternalIds($orderFix);
}
+
+ // update orders number in CRM
+ if (!empty($updateOrderIds)) {
+ foreach ($updateOrderIds as $upOrder) {
+ self::$api->ordersEdit($upOrder);
+ }
+ }
// update order items ids in crm
if (!empty($newItemsIdsByOrderId)) {
diff --git a/retailcrm/lib/RetailcrmOrderBuilder.php b/retailcrm/lib/RetailcrmOrderBuilder.php
index c926305..8b634dd 100644
--- a/retailcrm/lib/RetailcrmOrderBuilder.php
+++ b/retailcrm/lib/RetailcrmOrderBuilder.php
@@ -828,6 +828,8 @@ class RetailcrmOrderBuilder
$delivery = json_decode(Configuration::get(RetailCRM::DELIVERY), true);
$payment = json_decode(Configuration::get(RetailCRM::PAYMENT), true);
$status = json_decode(Configuration::get(RetailCRM::STATUS), true);
+ $sendOrderNumber = (bool)(Configuration::get(RetailCRM::ENABLE_ORDER_NUMBER_SENDING));
+ $orderNumber = $sendOrderNumber ? $order->reference : null;
if (Module::getInstanceByName('advancedcheckout') === false) {
$paymentType = $order->module;
@@ -861,7 +863,7 @@ class RetailcrmOrderBuilder
$crmOrder = array_filter(array(
'externalId' => $order->id,
- 'number' => $order->id,
+ 'number' => $orderNumber,
'createdAt' => RetailcrmTools::verifyDate($order->date_add, 'Y-m-d H:i:s')
? $order->date_add : date('Y-m-d H:i:s'),
'status' => $order_status,
diff --git a/retailcrm/objects.xml b/retailcrm/objects.xml
index 07bd3a6..950b07b 100644
--- a/retailcrm/objects.xml
+++ b/retailcrm/objects.xml
@@ -54,6 +54,7 @@
bankAccount
id
+ number
createdAt
orderType
orderMethod
diff --git a/retailcrm/retailcrm.php b/retailcrm/retailcrm.php
index 2444ddf..2e82f0d 100644
--- a/retailcrm/retailcrm.php
+++ b/retailcrm/retailcrm.php
@@ -73,6 +73,8 @@ class RetailCRM extends Module
const ENABLE_CORPORATE_CLIENTS = 'RETAILCRM_ENABLE_CORPORATE_CLIENTS';
const ENABLE_HISTORY_UPLOADS = 'RETAILCRM_ENABLE_HISTORY_UPLOADS';
const ENABLE_BALANCES_RECEIVING = 'RETAILCRM_ENABLE_BALANCES_RECEIVING';
+ const ENABLE_ORDER_NUMBER_SENDING = 'RETAILCRM_ENABLE_ORDER_NUMBER_SENDING';
+ const ENABLE_ORDER_NUMBER_RECEIVING = 'RETAILCRM_ENABLE_ORDER_NUMBER_RECEIVING';
const ENABLE_DEBUG_MODE = 'RETAILCRM_ENABLE_DEBUG_MODE';
const LATEST_API_VERSION = '5';
@@ -241,6 +243,8 @@ class RetailCRM extends Module
Configuration::deleteByName(static::ENABLE_CORPORATE_CLIENTS) &&
Configuration::deleteByName(static::ENABLE_HISTORY_UPLOADS) &&
Configuration::deleteByName(static::ENABLE_BALANCES_RECEIVING) &&
+ Configuration::deleteByName(static::ENABLE_ORDER_NUMBER_SENDING) &&
+ Configuration::deleteByName(static::ENABLE_ORDER_NUMBER_RECEIVING) &&
Configuration::deleteByName(static::ENABLE_DEBUG_MODE) &&
Configuration::deleteByName('RETAILCRM_LAST_SYNC') &&
Configuration::deleteByName('RETAILCRM_LAST_ORDERS_SYNC') &&
@@ -334,6 +338,7 @@ class RetailCRM extends Module
$apiUrl = Configuration::get(static::API_URL);
$apiKey = Configuration::get(static::API_KEY);
+ $receiveOrderNumber = (bool)(Configuration::get(RetailCRM::ENABLE_ORDER_NUMBER_RECEIVING));
$isSuccessful = true;
if (!empty($apiUrl) && !empty($apiKey)) {
@@ -376,6 +381,12 @@ class RetailCRM extends Module
if (empty($existingOrder)) {
$response = $this->api->ordersCreate($crmOrder);
+
+ if ($response->isSuccessful() && $receiveOrderNumber) {
+ $crmOrder = $response->order;
+ $object->reference = $crmOrder['number'];
+ $object->update();
+ }
} else {
$response = $this->api->ordersEdit($crmOrder);
}
@@ -781,6 +792,7 @@ class RetailCRM extends Module
public function hookActionOrderStatusPostUpdate($params)
{
$status = json_decode(Configuration::get(static::STATUS), true);
+ $receiveOrderNumber = (bool)(Configuration::get(RetailCRM::ENABLE_ORDER_NUMBER_RECEIVING));
if (isset($params['orderStatus'])) {
$cmsOrder = $params['order'];
@@ -819,7 +831,13 @@ class RetailCRM extends Module
$this->api->ordersPaymentCreate($payment);
}
} else {
- $this->api->ordersCreate($order);
+ $response = $this->api->ordersCreate($order);
+
+ if ($response->isSuccessful() && $receiveOrderNumber) {
+ $crmOrder = $response->order;
+ $cmsOrder->reference = $crmOrder['number'];
+ $cmsOrder->update();
+ }
}
return true;
@@ -954,6 +972,8 @@ class RetailCRM extends Module
'enableCorporate' => (Tools::getValue(static::ENABLE_CORPORATE_CLIENTS) !== false),
'enableHistoryUploads' => (Tools::getValue(static::ENABLE_HISTORY_UPLOADS) !== false),
'enableBalancesReceiving' => (Tools::getValue(static::ENABLE_BALANCES_RECEIVING) !== false),
+ 'enableOrderNumberSending' => (Tools::getValue(static::ENABLE_ORDER_NUMBER_SENDING) !== false),
+ 'enableOrderNumberReceiving' => (Tools::getValue(static::ENABLE_ORDER_NUMBER_RECEIVING) !== false),
'debugMode' => (Tools::getValue(static::ENABLE_DEBUG_MODE) !== false),
'collectorActive' => (Tools::getValue(static::COLLECTOR_ACTIVE) !== false),
'collectorKey' => (string)(Tools::getValue(static::COLLECTOR_KEY)),
@@ -977,6 +997,8 @@ class RetailCRM extends Module
Configuration::updateValue(static::ENABLE_CORPORATE_CLIENTS, $settings['enableCorporate']);
Configuration::updateValue(static::ENABLE_HISTORY_UPLOADS, $settings['enableHistoryUploads']);
Configuration::updateValue(static::ENABLE_BALANCES_RECEIVING, $settings['enableBalancesReceiving']);
+ Configuration::updateValue(static::ENABLE_ORDER_NUMBER_SENDING, $settings['enableOrderNumberSending']);
+ Configuration::updateValue(static::ENABLE_ORDER_NUMBER_RECEIVING, $settings['enableOrderNumberReceiving']);
Configuration::updateValue(static::COLLECTOR_ACTIVE, $settings['collectorActive']);
Configuration::updateValue(static::COLLECTOR_KEY, $settings['collectorKey']);
Configuration::updateValue(static::SYNC_CARTS_ACTIVE, $settings['synchronizeCartsActive']);
@@ -1360,6 +1382,8 @@ class RetailCRM extends Module
'enableCorporate' => (bool)(Configuration::get(static::ENABLE_CORPORATE_CLIENTS)),
'enableHistoryUploads' => (bool)(Configuration::get(static::ENABLE_HISTORY_UPLOADS)),
'enableBalancesReceiving' => (bool)(Configuration::get(static::ENABLE_BALANCES_RECEIVING)),
+ 'enableOrderNumberSending' => (bool)(Configuration::get(static::ENABLE_ORDER_NUMBER_SENDING)),
+ 'enableOrderNumberReceiving' => (bool)(Configuration::get(static::ENABLE_ORDER_NUMBER_RECEIVING)),
'debugMode' => (bool)(Configuration::get(static::ENABLE_DEBUG_MODE)),
);
}
@@ -1392,6 +1416,8 @@ class RetailCRM extends Module
'enableCorporateName' => static::ENABLE_CORPORATE_CLIENTS,
'enableHistoryUploadsName' => static::ENABLE_HISTORY_UPLOADS,
'enableBalancesReceivingName' => static::ENABLE_BALANCES_RECEIVING,
+ 'enableOrderNumberSendingName' => static::ENABLE_ORDER_NUMBER_SENDING,
+ 'enableOrderNumberReceivingName' => static::ENABLE_ORDER_NUMBER_RECEIVING,
'debugModeName' => static::ENABLE_DEBUG_MODE,
'jobsNames' => static::JOBS_NAMES
);
diff --git a/retailcrm/translations/es.php b/retailcrm/translations/es.php
index 494cacf..ff27a6e 100644
--- a/retailcrm/translations/es.php
+++ b/retailcrm/translations/es.php
@@ -152,3 +152,62 @@ $_MODULE['<{retailcrm}prestashop>index_95428f32e5c696cf71baccb776bc5c15'] = 'Tra
$_MODULE['<{retailcrm}prestashop>index_e7f9e382dc50889098cbe56f2554c77b'] = 'Tarjeta bancaria';
$_MODULE['<{retailcrm}prestashop>index_7088f1d1d9c91d8b75e9882ffd78540c'] = 'Datos de contacto';
$_MODULE['<{retailcrm}prestashop>index_50f158e2507321f1a5b6f8fb9e350818'] = 'Escríbenos en caso de preguntas o dudas';
+$_MODULE['<{retailcrm}prestashop>settings_c2cc7082a89c1ad6631a2f66af5f00c0'] = 'Conexión';
+$_MODULE['<{retailcrm}prestashop>settings_065ab3a28ca4f16f55f103adc7d0226f'] = 'Los métodos del envío';
+$_MODULE['<{retailcrm}prestashop>settings_33af8066d3c83110d4bd897f687cedd2'] = 'Los estados de pedidos';
+$_MODULE['<{retailcrm}prestashop>settings_bab959acc06bb03897b294fbb892be6b'] = 'Los métodos de pago';
+$_MODULE['<{retailcrm}prestashop>settings_7a1920d61156abc05a60135aefe8bc67'] = 'Por defecto';
+$_MODULE['<{retailcrm}prestashop>settings_20cacc01d0de8bc6e9c9846f477e886b'] = 'Subir pedidos';
+$_MODULE['<{retailcrm}prestashop>settings_6bcde6286f8d1b76063ee52104a240cf'] = 'Carritos abandonados';
+$_MODULE['<{retailcrm}prestashop>settings_52a13123e134b8b72b6299bc14a36aad'] = 'Daemon Collector';
+$_MODULE['<{retailcrm}prestashop>settings_71098155ccc0a0d6e0b501fbee37e7a9'] = 'LiveChat';
+$_MODULE['<{retailcrm}prestashop>settings_9b6545e4cea9b4ad4979d41bb9170e2b'] = 'Avanzado';
+$_MODULE['<{retailcrm}prestashop>settings_061b368c43f85d3fe2c7ccc842883a40'] = 'La configuración de la conexión';
+$_MODULE['<{retailcrm}prestashop>settings_22a65bd0ef1919aa4e6dee849a7a2925'] = 'Simla.com URL';
+$_MODULE['<{retailcrm}prestashop>settings_656a6828d7ef1bb791e42087c4b5ee6e'] = 'API key';
+$_MODULE['<{retailcrm}prestashop>settings_8ffa3281a35a0d80fef2cac0fa680523'] = 'Habilitar la carga del historial';
+$_MODULE['<{retailcrm}prestashop>settings_65dd9f6e8bf4eaf54c3dc96f011dade1'] = 'Recibir las existencias del Simla.com';
+$_MODULE['<{retailcrm}prestashop>settings_4049d979b8e6b7d78194e96c3208a5a5'] = 'Número de orden';
+$_MODULE['<{retailcrm}prestashop>settings_c95783013e3707fd4f0fd316133fdd1f'] = 'Envíe el número de pedido a Simla.com';
+$_MODULE['<{retailcrm}prestashop>settings_4b60f9716ab3c3fb83260caafd46c55d'] = 'Reciba el número de pedido de Simla.com';
+$_MODULE['<{retailcrm}prestashop>settings_6b49e7ceb026c3d16264e01b9b919ce3'] = 'Clientes corporativos';
+$_MODULE['<{retailcrm}prestashop>settings_f8d7c52aa84f358caedb96fda86809da'] = 'Permitir el soporte a clientes corporativos';
+$_MODULE['<{retailcrm}prestashop>settings_6c3c1845e109a9ef67378effea0c0503'] = 'Activar solo si está habilitada la opción \"Clientes corporativos\" en Simla.com';
+$_MODULE['<{retailcrm}prestashop>settings_917afe348e09163269225a89a825e634'] = 'Sincronización de carritos de compradores';
+$_MODULE['<{retailcrm}prestashop>settings_d8e002d770b6f98af7b7ae9a0e5acfe9'] = 'Crear pedidos para carritos abandonados de compradores';
+$_MODULE['<{retailcrm}prestashop>settings_35b5a9139a54caeb925556ceb2c38086'] = 'Estado del pedido para carritos abandonados de compradores';
+$_MODULE['<{retailcrm}prestashop>settings_9b9cf9f8778f69b4c6cf37e66f886be8'] = 'Elige el estado';
+$_MODULE['<{retailcrm}prestashop>settings_a0d135501a738c3c98de385dc28cda61'] = 'Cargar carritos abandonados';
+$_MODULE['<{retailcrm}prestashop>settings_27096e1243f98e1b3300f57ff1c76456'] = 'Elige la demora';
+$_MODULE['<{retailcrm}prestashop>settings_4e537de8dd108eafec4c37603c8ab7fb'] = 'Administrar tipos de entrega';
+$_MODULE['<{retailcrm}prestashop>settings_5b385947acf10ac0c5521161ce96aaa7'] = 'Elige la entrega';
+$_MODULE['<{retailcrm}prestashop>settings_c0fd6d31d096a5845f1d1abb4c132b7d'] = 'Administrar estados de pedidos';
+$_MODULE['<{retailcrm}prestashop>settings_dd53d9b3603b3279b25c74f6f3f189a4'] = 'Administrar tipos de pago';
+$_MODULE['<{retailcrm}prestashop>settings_7dcc1208fa03381346955c6732d9ea85'] = 'Elige el tipo';
+$_MODULE['<{retailcrm}prestashop>settings_6f1f9a3e435963417d08849fbef139c1'] = 'Ingrese los ID de los pedidos para cargar en Simla.com, divididos por una coma. También puede especificar rangos, como \"1-10\". Se permite subir hasta 10 pedidos a la vez.';
+$_MODULE['<{retailcrm}prestashop>settings_acfa058ec9e6e4745eddc0cae3f0f881'] = 'Identificador del pedido';
+$_MODULE['<{retailcrm}prestashop>settings_91412465ea9169dfd901dd5e7c96dd99'] = 'Subir';
+$_MODULE['<{retailcrm}prestashop>settings_f4af7f6987dfee28741ce77ff2d09d46'] = 'Exportar pedidos y clientes';
+$_MODULE['<{retailcrm}prestashop>settings_418faff1c9df0d297ff586ac3230be97'] = 'Puede exportar todos los pedidos y clientes de CMS a Simla.com presionando el botón \"Exportar\". Este proceso puede llevar mucho tiempo y es necesario que mantenga la pestaña abierta hasta que termine.';
+$_MODULE['<{retailcrm}prestashop>settings_7442e29d7d53e549b78d93c46b8cdcfc'] = 'Pedidos';
+$_MODULE['<{retailcrm}prestashop>settings_e6d0e1c8fc6a4fcf47869df87e04cd88'] = 'Clientes';
+$_MODULE['<{retailcrm}prestashop>settings_f8f36c02fa6f370808135c66cfc788aa'] = 'Clientes sin pedidos';
+$_MODULE['<{retailcrm}prestashop>settings_0095a9fa74d1713e43e370a7d7846224'] = 'Exportar';
+$_MODULE['<{retailcrm}prestashop>settings_4d3d769b812b6faa6b76e1a8abaece2d'] = 'Active';
+$_MODULE['<{retailcrm}prestashop>settings_f75d8fa5c89351544d372cf90528ccf2'] = 'Clave de la página web';
+$_MODULE['<{retailcrm}prestashop>settings_c9cc8cce247e49bae79f15173ce97354'] = 'Guardar';
+$_MODULE['<{retailcrm}prestashop>settings_4f18e3f1c9941a6ec5a38bc716c521b4'] = 'Código que necesita insertar en la web';
+$_MODULE['<{retailcrm}prestashop>settings_ec3028a12402ab7f43962a6f3a667b6e'] = 'Modo de depuración';
+$_MODULE['<{retailcrm}prestashop>settings_9082f68bc90113d8950e4ed7fe8fa0a4'] = 'Administrador de tareas';
+$_MODULE['<{retailcrm}prestashop>settings_9194de58ce560c095f02cefc1c1c61e6'] = 'Nombre de la tarea';
+$_MODULE['<{retailcrm}prestashop>settings_05a3a24340b7b9cc8d4e08f0ef4f4dd9'] = 'Última ejecución';
+$_MODULE['<{retailcrm}prestashop>settings_ec53a8c4f07baed5d8825072c89799be'] = 'Estado';
+$_MODULE['<{retailcrm}prestashop>settings_0be8406951cdfda82f00f79328cf4efc'] = 'Comentario';
+$_MODULE['<{retailcrm}prestashop>settings_fe5b6cd4d7a31615bbec8d1505089d87'] = 'StackTrace';
+$_MODULE['<{retailcrm}prestashop>settings_b2d37ae1cedf42ff874289b721860af2'] = 'Registros';
+$_MODULE['<{retailcrm}prestashop>settings_34082694d21dbdcfc31e6e32d9fb2b9f'] = 'Nombre del archivo';
+$_MODULE['<{retailcrm}prestashop>settings_a4b7f1864cfdb47cd05b54eb10337506'] = 'Fecha de modificación';
+$_MODULE['<{retailcrm}prestashop>settings_6f6cb72d544962fa333e2e34ce64f719'] = 'Tamaño';
+$_MODULE['<{retailcrm}prestashop>settings_06df33001c1d7187fdd81ea1f5b277aa'] = 'Comportamiento';
+$_MODULE['<{retailcrm}prestashop>settings_801ab24683a4a8c433c6eb40c48bcd9d'] = 'Descargar';
+$_MODULE['<{retailcrm}prestashop>settings_61b0ada67b7f40bf3d40dcc88ae4f3e6'] = 'Descargar todo';
diff --git a/retailcrm/translations/ru.php b/retailcrm/translations/ru.php
index d90cc23..4b317b0 100644
--- a/retailcrm/translations/ru.php
+++ b/retailcrm/translations/ru.php
@@ -152,3 +152,62 @@ $_MODULE['<{retailcrm}prestashop>index_95428f32e5c696cf71baccb776bc5c15'] = 'Б
$_MODULE['<{retailcrm}prestashop>index_e7f9e382dc50889098cbe56f2554c77b'] = 'Кредитной картой';
$_MODULE['<{retailcrm}prestashop>index_7088f1d1d9c91d8b75e9882ffd78540c'] = 'Наши контакты';
$_MODULE['<{retailcrm}prestashop>index_50f158e2507321f1a5b6f8fb9e350818'] = 'Пишите нам если у Вас есть вопросы';
+$_MODULE['<{retailcrm}prestashop>settings_c2cc7082a89c1ad6631a2f66af5f00c0'] = 'Соединение';
+$_MODULE['<{retailcrm}prestashop>settings_065ab3a28ca4f16f55f103adc7d0226f'] = 'Способы доставки';
+$_MODULE['<{retailcrm}prestashop>settings_33af8066d3c83110d4bd897f687cedd2'] = 'Статусы заказов';
+$_MODULE['<{retailcrm}prestashop>settings_bab959acc06bb03897b294fbb892be6b'] = 'Способы оплаты';
+$_MODULE['<{retailcrm}prestashop>settings_7a1920d61156abc05a60135aefe8bc67'] = 'По умолчанию';
+$_MODULE['<{retailcrm}prestashop>settings_20cacc01d0de8bc6e9c9846f477e886b'] = 'Выгрузка заказов';
+$_MODULE['<{retailcrm}prestashop>settings_6bcde6286f8d1b76063ee52104a240cf'] = 'Брошенные корзины';
+$_MODULE['<{retailcrm}prestashop>settings_52a13123e134b8b72b6299bc14a36aad'] = 'Daemon Collector';
+$_MODULE['<{retailcrm}prestashop>settings_71098155ccc0a0d6e0b501fbee37e7a9'] = 'Онлайн-консультант';
+$_MODULE['<{retailcrm}prestashop>settings_9b6545e4cea9b4ad4979d41bb9170e2b'] = 'Дополнительно';
+$_MODULE['<{retailcrm}prestashop>settings_061b368c43f85d3fe2c7ccc842883a40'] = 'Настройка соединения';
+$_MODULE['<{retailcrm}prestashop>settings_22a65bd0ef1919aa4e6dee849a7a2925'] = 'URL адрес Simla.com';
+$_MODULE['<{retailcrm}prestashop>settings_656a6828d7ef1bb791e42087c4b5ee6e'] = 'API-ключ';
+$_MODULE['<{retailcrm}prestashop>settings_8ffa3281a35a0d80fef2cac0fa680523'] = 'Включить выгрузку истории';
+$_MODULE['<{retailcrm}prestashop>settings_65dd9f6e8bf4eaf54c3dc96f011dade1'] = 'Получать остатки из Simla.com';
+$_MODULE['<{retailcrm}prestashop>settings_4049d979b8e6b7d78194e96c3208a5a5'] = 'Номер заказа';
+$_MODULE['<{retailcrm}prestashop>settings_c95783013e3707fd4f0fd316133fdd1f'] = 'Передавать номер заказа в Simla.com';
+$_MODULE['<{retailcrm}prestashop>settings_4b60f9716ab3c3fb83260caafd46c55d'] = 'Получать номер заказа из Simla.com';
+$_MODULE['<{retailcrm}prestashop>settings_6b49e7ceb026c3d16264e01b9b919ce3'] = 'Корпоративные клиенты';
+$_MODULE['<{retailcrm}prestashop>settings_f8d7c52aa84f358caedb96fda86809da'] = 'Включить поддержку корпоративных клиентов';
+$_MODULE['<{retailcrm}prestashop>settings_6c3c1845e109a9ef67378effea0c0503'] = 'Активировать только при включенной опции \"Корпоративные клиенты\" в Simla.com';
+$_MODULE['<{retailcrm}prestashop>settings_917afe348e09163269225a89a825e634'] = 'Синхронизация корзин покупателей';
+$_MODULE['<{retailcrm}prestashop>settings_d8e002d770b6f98af7b7ae9a0e5acfe9'] = 'Создавать заказы для брошенных корзин покупателей';
+$_MODULE['<{retailcrm}prestashop>settings_35b5a9139a54caeb925556ceb2c38086'] = 'Статус заказа для брошенных корзин покупателей';
+$_MODULE['<{retailcrm}prestashop>settings_9b9cf9f8778f69b4c6cf37e66f886be8'] = 'Выберите статус';
+$_MODULE['<{retailcrm}prestashop>settings_a0d135501a738c3c98de385dc28cda61'] = 'Выгружать брошенные корзины';
+$_MODULE['<{retailcrm}prestashop>settings_27096e1243f98e1b3300f57ff1c76456'] = 'Выберите задержку';
+$_MODULE['<{retailcrm}prestashop>settings_4e537de8dd108eafec4c37603c8ab7fb'] = 'Управление типами доставки';
+$_MODULE['<{retailcrm}prestashop>settings_5b385947acf10ac0c5521161ce96aaa7'] = 'Выберите доставку';
+$_MODULE['<{retailcrm}prestashop>settings_c0fd6d31d096a5845f1d1abb4c132b7d'] = 'Управление статусами заказов';
+$_MODULE['<{retailcrm}prestashop>settings_dd53d9b3603b3279b25c74f6f3f189a4'] = 'Управление типами оплаты';
+$_MODULE['<{retailcrm}prestashop>settings_7dcc1208fa03381346955c6732d9ea85'] = 'Выберите тип';
+$_MODULE['<{retailcrm}prestashop>settings_6f1f9a3e435963417d08849fbef139c1'] = 'Введите идентификаторы заказов для загрузки в Simla.com, разделив их запятыми. Вы также можете указать диапазоны, например \"1-10\". Одновременно можно загружать до 10 заказов.';
+$_MODULE['<{retailcrm}prestashop>settings_acfa058ec9e6e4745eddc0cae3f0f881'] = 'ID заказов';
+$_MODULE['<{retailcrm}prestashop>settings_91412465ea9169dfd901dd5e7c96dd99'] = 'Выгрузить';
+$_MODULE['<{retailcrm}prestashop>settings_f4af7f6987dfee28741ce77ff2d09d46'] = 'Экспортировать заказы и клиентов';
+$_MODULE['<{retailcrm}prestashop>settings_418faff1c9df0d297ff586ac3230be97'] = 'Вы можете экспортировать все заказы и клиентов из CMS в Simla.com, нажав кнопку «Экспорт». Этот процесс может занять много времени, и до его завершения необходимо держать вкладку открытой.';
+$_MODULE['<{retailcrm}prestashop>settings_7442e29d7d53e549b78d93c46b8cdcfc'] = 'Заказы';
+$_MODULE['<{retailcrm}prestashop>settings_e6d0e1c8fc6a4fcf47869df87e04cd88'] = 'Клиенты';
+$_MODULE['<{retailcrm}prestashop>settings_f8f36c02fa6f370808135c66cfc788aa'] = 'Клиенты без заказов';
+$_MODULE['<{retailcrm}prestashop>settings_0095a9fa74d1713e43e370a7d7846224'] = 'Экспортировать';
+$_MODULE['<{retailcrm}prestashop>settings_4d3d769b812b6faa6b76e1a8abaece2d'] = 'Активно';
+$_MODULE['<{retailcrm}prestashop>settings_f75d8fa5c89351544d372cf90528ccf2'] = 'Ключ сайта';
+$_MODULE['<{retailcrm}prestashop>settings_c9cc8cce247e49bae79f15173ce97354'] = 'Сохранить';
+$_MODULE['<{retailcrm}prestashop>settings_4f18e3f1c9941a6ec5a38bc716c521b4'] = 'Код для вставки на сайт';
+$_MODULE['<{retailcrm}prestashop>settings_ec3028a12402ab7f43962a6f3a667b6e'] = 'Режим отладки';
+$_MODULE['<{retailcrm}prestashop>settings_9082f68bc90113d8950e4ed7fe8fa0a4'] = 'Менеджер задач';
+$_MODULE['<{retailcrm}prestashop>settings_9194de58ce560c095f02cefc1c1c61e6'] = 'Имя задачи';
+$_MODULE['<{retailcrm}prestashop>settings_05a3a24340b7b9cc8d4e08f0ef4f4dd9'] = 'Последний запуск';
+$_MODULE['<{retailcrm}prestashop>settings_ec53a8c4f07baed5d8825072c89799be'] = 'Статус';
+$_MODULE['<{retailcrm}prestashop>settings_0be8406951cdfda82f00f79328cf4efc'] = 'Комментарий';
+$_MODULE['<{retailcrm}prestashop>settings_fe5b6cd4d7a31615bbec8d1505089d87'] = 'StackTrace';
+$_MODULE['<{retailcrm}prestashop>settings_b2d37ae1cedf42ff874289b721860af2'] = 'Лог-файлы';
+$_MODULE['<{retailcrm}prestashop>settings_34082694d21dbdcfc31e6e32d9fb2b9f'] = 'Имя файла';
+$_MODULE['<{retailcrm}prestashop>settings_a4b7f1864cfdb47cd05b54eb10337506'] = 'Дата изменения';
+$_MODULE['<{retailcrm}prestashop>settings_6f6cb72d544962fa333e2e34ce64f719'] = 'Размер';
+$_MODULE['<{retailcrm}prestashop>settings_06df33001c1d7187fdd81ea1f5b277aa'] = 'Действия';
+$_MODULE['<{retailcrm}prestashop>settings_801ab24683a4a8c433c6eb40c48bcd9d'] = 'Скачать';
+$_MODULE['<{retailcrm}prestashop>settings_61b0ada67b7f40bf3d40dcc88ae4f3e6'] = 'Скачать все';
diff --git a/retailcrm/views/templates/admin/settings.tpl b/retailcrm/views/templates/admin/settings.tpl
index 5dd1368..e83417a 100644
--- a/retailcrm/views/templates/admin/settings.tpl
+++ b/retailcrm/views/templates/admin/settings.tpl
@@ -91,6 +91,22 @@
+
{l s='Order number' mod='retailcrm'}
+
+
+ {l s='Corporate clients' mod='retailcrm'}
diff --git a/tests/RetailcrmOrderBuilderTest.php b/tests/RetailcrmOrderBuilderTest.php
index ec1a155..b2cfa26 100644
--- a/tests/RetailcrmOrderBuilderTest.php
+++ b/tests/RetailcrmOrderBuilderTest.php
@@ -16,6 +16,24 @@ class RetailcrmOrderBuilderTest extends RetailcrmTestCase
$this->assertEquals(0, $resultItem['initialPrice']);
}
+ public function testBuildCrmOrder()
+ {
+ $order = new Order(1);
+ $order->reference = 'test_n';
+ $order->current_state = 0;
+ Configuration::updateValue('RETAILCRM_API_DELIVERY', '{"1":"test_delivery"}');
+ Configuration::updateValue('RETAILCRM_API_STATUS', '{"1":"test_status"}');
+ Configuration::updateValue(RetailCRM::ENABLE_ORDER_NUMBER_SENDING, false);
+ $crmOrder = RetailcrmOrderBuilder::buildCrmOrder($order);
+
+ $this->assertArrayNotHasKey('number', $crmOrder);
+
+ Configuration::updateValue(RetailCRM::ENABLE_ORDER_NUMBER_SENDING, true);
+ $crmOrder = RetailcrmOrderBuilder::buildCrmOrder($order);
+
+ $this->assertEquals($order->reference, $crmOrder['number']);
+ }
+
/**
* @return array
*/
diff --git a/tests/RetailcrmTest.php b/tests/RetailcrmTest.php
index 91de33c..36e2732 100644
--- a/tests/RetailcrmTest.php
+++ b/tests/RetailcrmTest.php
@@ -35,6 +35,43 @@ class RetailCRMTest extends RetailcrmTestCase
);
}
+ public function testUploadOrders()
+ {
+ Configuration::updateValue(RetailCRM::API_URL, 'https://test.test');
+ Configuration::updateValue(RetailCRM::API_KEY, 'test_key');
+ $order = new Order(1);
+ $reference = $order->reference;
+ $updReference = 'test';
+ $this->apiMock->expects($this->any())->method('ordersGet')->willReturn(new RetailcrmApiResponse(
+ 200,
+ json_encode(array(
+ 'success' => true,
+ 'order' => array(),
+ ))
+ ));
+ $this->apiMock->expects($this->any())->method('ordersCreate')->willReturn(new RetailcrmApiResponse(
+ 200,
+ json_encode(array(
+ 'success' => true,
+ 'order' => array(
+ 'number' => $updReference,
+ ),
+ ))
+ ));
+
+ Configuration::updateValue(RetailCRM::ENABLE_ORDER_NUMBER_RECEIVING, false);
+ $this->retailcrmModule->uploadOrders([1]);
+ $firstUpdOrder = new Order(1);
+
+ $this->assertEquals($reference, $firstUpdOrder->reference);
+
+ Configuration::updateValue(RetailCRM::ENABLE_ORDER_NUMBER_RECEIVING, true);
+ $this->retailcrmModule->uploadOrders([1]);
+ $secondUpdOrder = new Order(1);
+
+ $this->assertEquals($updReference, $secondUpdOrder->reference);
+ }
+
public function testHookActionCustomerAccountAdd()
{
$newCustomer = new Customer(1);
@@ -79,6 +116,8 @@ class RetailCRMTest extends RetailcrmTestCase
$cart->expects($this->any())->method('getProducts')->willReturn($this->getProducts());
$cart->expects($this->any())->method('getAddressCollection')->willReturn($this->getAddressCollection());
$status = new StdClass();
+ $reference = $order->reference;
+ $updReference = 'test';
if ($newOrder === false) {
$status->id = 11;
@@ -98,7 +137,25 @@ class RetailCRMTest extends RetailcrmTestCase
);
}
+ $this->apiMock->expects($this->any())->method('ordersCreate')->willReturn(new RetailcrmApiResponse(
+ 200,
+ json_encode(array(
+ 'success' => true,
+ 'order' => array(
+ 'number' => $updReference,
+ ),
+ ))
+ ));
+
+ Configuration::updateValue(RetailCRM::ENABLE_ORDER_NUMBER_RECEIVING, false);
+
$this->assertTrue($this->retailcrmModule->hookActionOrderStatusPostUpdate($params));
+ $this->assertEquals($reference, $order->reference);
+
+ Configuration::updateValue(RetailCRM::ENABLE_ORDER_NUMBER_RECEIVING, true);
+
+ $this->assertTrue($this->retailcrmModule->hookActionOrderStatusPostUpdate($params));
+ $this->assertEquals($updReference, $order->reference);
}
/**
diff --git a/tests/lib/RetailcrmHistoryTest.php b/tests/lib/RetailcrmHistoryTest.php
index 390d74d..fdd2bff 100644
--- a/tests/lib/RetailcrmHistoryTest.php
+++ b/tests/lib/RetailcrmHistoryTest.php
@@ -29,8 +29,8 @@ class RetailcrmHistoryTest extends RetailcrmTestCase
$data = $catalog->getData();
$this->product = $data[1]->current();
- Configuration::updateValue('RETAILCRM_API_DELIVERY_DEFAULT', 2);
- Configuration::updateValue('RETAILCRM_API_PAYMENT_DEFAULT', 'bankwire');
+ Configuration::updateValue(RetailCRM::DELIVERY_DEFAULT, 2);
+ Configuration::updateValue(RetailCRM::PAYMENT_DEFAULT, 'bankwire');
$this->setConfig();
}
@@ -84,6 +84,74 @@ class RetailcrmHistoryTest extends RetailcrmTestCase
$this->assertEquals(true, RetailcrmHistory::customersHistory());
}
+ public function testOrdersHistory()
+ {
+ RetailcrmHistory::$default_lang = (int)Configuration::get('PS_LANG_DEFAULT');
+ RetailcrmHistory::$api = $this->apiMock;
+
+ $order = new Order(1);
+ $reference = $order->reference;
+ $updReference = 'test';
+ $crmOrder = $this->getApiOrder();
+ $crmOrder['number'] = $updReference;
+ $checkArgs = array(
+ 'externalId' => 1,
+ 'number' => $reference,
+ );
+
+ $this->apiMock->expects($this->any())
+ ->method('ordersHistory')
+ ->willReturn(
+ new RetailcrmApiResponse(
+ '200',
+ json_encode(
+ $this->getHistoryExistOrder($crmOrder)
+ )
+ )
+ );
+
+ $this->apiMock->expects($this->any())
+ ->method('ordersGet')
+ ->willReturn(
+ new RetailcrmApiResponse(
+ '200',
+ json_encode(
+ array(
+ 'order' => $crmOrder,
+ )
+ )
+ )
+ );
+
+ $this->apiMock->expects($this->once())
+ ->method('ordersEdit')
+ ->with($checkArgs)
+ ->willReturn(
+ new RetailcrmApiResponse(
+ '200',
+ json_encode(
+ array(
+ 'order' => array(),
+ )
+ )
+ )
+ );
+
+ Configuration::updateValue(RetailCRM::ENABLE_ORDER_NUMBER_RECEIVING, false);
+ Configuration::updateValue(RetailCRM::ENABLE_ORDER_NUMBER_SENDING, false);
+ RetailcrmHistory::ordersHistory();
+ $firstUpdOrder = new Order(1);
+
+ $this->assertEquals($reference, $firstUpdOrder->reference);
+
+ Configuration::updateValue(RetailCRM::ENABLE_ORDER_NUMBER_RECEIVING, true);
+ Configuration::updateValue(RetailCRM::ENABLE_ORDER_NUMBER_SENDING, true);
+ RetailcrmHistory::ordersHistory();
+ $secondUpdOrder = new Order(1);
+
+ $this->assertEquals($updReference, $secondUpdOrder->reference);
+ }
+
private function orderCreate($apiMock, $orderData)
{
RetailcrmHistory::$default_lang = (int)Configuration::get('PS_LANG_DEFAULT');