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');