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 */