diff --git a/CHANGELOG.md b/CHANGELOG.md
index 503a7a2d..9f41b164 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,6 @@
+## 2024-12-19 4.8.15
+* Fix uploading archive in CRM using console script
+
## 2024-11-07 4.8.14
* The method for determining the stock quantity has been optimized
diff --git a/VERSION b/VERSION
index ae9ac8ef..fdee45c3 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-4.8.14
+4.8.15
diff --git a/doc/FAQ/FAQ.md b/doc/FAQ/FAQ.md
index 9a180257..d9d1af7f 100644
--- a/doc/FAQ/FAQ.md
+++ b/doc/FAQ/FAQ.md
@@ -20,23 +20,45 @@
В модуле возможно сделать необходимые кастомизация для генерации ICML-файла в желаемом формате
**Выгрузка архивных данных**
-Ранее модуль *(до версии 4.3.3)* мог выгружать не более 700-800 архивных заказов *(т.к. выгрузка происходила по web-хиту, работа скрипта была ограничена и не все данные успевали прогрузится в CRM)*, этот момент был доработан *(#70113)* и сейчас модуль загружает из Woo в CRM все присутствующие заказы пачками по 50 шт *(сделано для того, чтобы у слабых серверов не возникало проблем с загрузкой)*.
-Также заказы архивные данные можно выгрузить с использованием консольного скрипта: нужно скачать этот скрипт, загрузить его в корень сайта на сервере
-**upload_to_crm.php** *(название файла)*
-
+Сейчас архивные данные можно выгрузить в CRM с использованием консольного скрипта. Этот скрипт позволяет выгружать все архивные заказы и данные о клиентах без ограничения на количество записей. Процесс выгрузки выполняется пакетами по 50 заказов или 50 клиентов за раз.
+После завершения обработки каждой пачки выводится ее порядковый номер, что позволяет отслеживать прогресс работы скрипта. Если во время выгрузки возникает ошибка, скрипт можно перезапустить с той страницы, где произошел сбой, что минимизирует потерю данных и время на повторную выгрузку.
-> php upload_to_crm.php
+Для запуска выгрузки нужно:
- тем самым запустить выполнение скрипта. Для последнего действия нужно использовать ssh.
-После выполнения данных действий дожидаемся завершение работы. При этом информация об ошибках при выгрузке заказов будет фиксироваться в разделе WooCommerce "Статус", "Журналы".
-Как скрипт завершит работу в командной строке появляется возможность ввести новую команду.
+1. В корневой директории вашего сайта (по умолчанию - */var/www/html*) разместить файл **upload_to_crm.php** и вставить в него код:
-**Работа с зонами доставки** *(WooCommerce - Настройки - Доставка - Зоны доставки)*
+```
+
+
+> php upload_to_crm.php --entity=orders/customers/full_upload --page=номер страницы
+
+Параметры для выгрузки:
+
+**--entity**: Указывает, какие данные выгружать. Данный параметр **является обязательным**. Возможные значения:
+
+- **orders**: архивные заказы;
+- **customers**: архивные клиенты;
+- **full_upload**: полная выгрузка всех заказов и клиентов (весь архив).
+
+**--page**: Указывает номер страницы для выгрузки. Каждая страница содержит 50 заказов или клиентов. Нумерация страниц начинается с 0.
+
+Пример:
+
+> php upload_to_crm.php --entity=orders --page=3
+
+В этом примере будет выгружен архив заказов, начиная с 3-й страницы.
+
+**Работа с зонами доставки** *(WooCommerce - Настройки - Доставка - Зоны доставки)*
С зонами доставки модуль не работает
diff --git a/src/include/class-wc-retailcrm-base.php b/src/include/class-wc-retailcrm-base.php
index 758763f8..4bfe9a60 100644
--- a/src/include/class-wc-retailcrm-base.php
+++ b/src/include/class-wc-retailcrm-base.php
@@ -111,6 +111,7 @@ public function __construct($retailcrm = false)
add_action('admin_enqueue_scripts', [$this, 'include_files_for_admin'], 101);
add_action('woocommerce_new_order', [$this, 'fill_array_create_orders'], 11, 1);
add_action('shutdown', [$this, 'create_order'], -2);
+ add_action('wp_console_upload', [$this, 'console_upload'], 99, 2);
if (
!$this->get_option('deactivate_update_order')
@@ -174,6 +175,10 @@ public function __construct($retailcrm = false)
$this->activateModule();
}
+ public function console_upload($entity, $page = 0)
+ {
+ $this->uploader->uploadConsole($entity, $page);
+ }
/**
* Init settings fields
*/
diff --git a/src/include/class-wc-retailcrm-uploader.php b/src/include/class-wc-retailcrm-uploader.php
index f3119e1b..2422d27e 100644
--- a/src/include/class-wc-retailcrm-uploader.php
+++ b/src/include/class-wc-retailcrm-uploader.php
@@ -75,13 +75,13 @@ public function uploadSelectedOrders()
/**
* Uploads archive order in CRM
*
- * @param null|int $page Number page uploads.
- * @param array $ids Ids orders upload.
+ * @param int|null $page Number page uploads.
+ * @param array $ids Ids orders upload.
*
* @return void|null
* @throws Exception Invalid argument exception.
*/
- public function uploadArchiveOrders($page, $ids = [])
+ public function uploadArchiveOrders(?int $page, array $ids = [])
{
WC_Retailcrm_Logger::info(__METHOD__, 'Archive order IDs: ' . implode(', ', $ids));
@@ -98,11 +98,13 @@ public function uploadArchiveOrders($page, $ids = [])
$orderIds = $ids;
}
- foreach ($orderIds as $orderId) {
- $errorMessage = $this->orders->orderCreate($orderId);
+ if ($orderIds !== []) {
+ foreach ($orderIds as $orderId) {
+ $errorMessage = $this->orders->orderCreate($orderId);
- if (is_string($errorMessage)) {
- $uploadErrors[$orderId] = $errorMessage;
+ if (is_string($errorMessage)) {
+ $uploadErrors[$orderId] = $errorMessage;
+ }
}
}
@@ -125,7 +127,7 @@ public function uploadArchiveCustomers($page)
$users = $this->getCmsUsers($page);
- if (false === empty($users)) {
+ if ($users !== []) {
$dataCustomers = [];
foreach ($users as $user) {
@@ -234,5 +236,47 @@ private function logOrdersUploadErrors($errors)
);
}
}
+
+ public function uploadConsole($entity, $page = 0)
+ {
+ $ordersPages = (int) ceil($this->getCountOrders() / 50);
+ $customerPages = (int) ceil($this->getCountUsers() / 50);
+
+ try {
+ switch ($entity) {
+ case 'orders':
+ $this->archiveUpload('orders', $page, $ordersPages);
+ break;
+ case 'customers':
+ $this->archiveUpload('customers', $page, $customerPages);
+ break;
+ case 'full_upload':
+ $this->archiveUpload('customers', 0, $customerPages);
+ $this->archiveUpload('orders', 0, $ordersPages);
+ break;
+ default:
+ echo 'Unknown entity: ' . $entity;
+ }
+ } catch (Exception $exception) {
+ echo $exception->getMessage();
+ }
+ }
+
+ public function archiveUpload($entity, $page, $totalPages)
+ {
+ echo $entity . ' uploading started' . PHP_EOL;
+
+ do {
+ if ($entity === 'orders') {
+ $this->uploadArchiveOrders($page);
+ } elseif ($entity === 'customers') {
+ $this->uploadArchiveCustomers($page);
+ }
+
+ echo $page . ' page uploaded' . PHP_EOL;
+
+ $page++;
+ } while ($page <= $totalPages);
+ }
}
-}//end if
+}
diff --git a/src/readme.txt b/src/readme.txt
index 7a82f70b..cc6631c5 100644
--- a/src/readme.txt
+++ b/src/readme.txt
@@ -5,7 +5,7 @@ Tags: Интеграция, Simla.com, simla
Requires PHP: 7.1
Requires at least: 5.3
Tested up to: 6.5
-Stable tag: 4.8.14
+Stable tag: 4.8.15
License: GPLv1 or later
License URI: http://www.gnu.org/licenses/gpl-1.0.html
@@ -82,6 +82,9 @@ Asegúrate de tener una clave API específica para cada tienda. Las siguientes i
== Changelog ==
+= 4.8.15 =
+* Fix uploading archive in CRM using console script
+
= 4.8.14 =
* The method for determining the stock quantity has been optimized
diff --git a/src/retailcrm.php b/src/retailcrm.php
index 8178e7d7..d73a1dfd 100644
--- a/src/retailcrm.php
+++ b/src/retailcrm.php
@@ -5,7 +5,7 @@
* Description: Integration plugin for WooCommerce & Simla.com
* Author: RetailDriver LLC
* Author URI: http://retailcrm.pro/
- * Version: 4.8.14
+ * Version: 4.8.15
* Tested up to: 6.5
* Requires Plugins: woocommerce
* WC requires at least: 5.4
@@ -27,7 +27,7 @@
class WC_Integration_Retailcrm {
const WOOCOMMERCE_SLUG = 'woocommerce';
const WOOCOMMERCE_PLUGIN_PATH = 'woocommerce/woocommerce.php';
- const MODULE_VERSION = '4.8.11';
+ const MODULE_VERSION = '4.8.15';
private static $instance;
diff --git a/src/uninstall.php b/src/uninstall.php
index 60118d9d..6aadd01a 100644
--- a/src/uninstall.php
+++ b/src/uninstall.php
@@ -16,7 +16,7 @@
*
* @link https://wordpress.org/plugins/woo-retailcrm/
*
- * @version 4.8.14
+ * @version 4.8.15
*
* @package RetailCRM
*/