Fix export archive from CRM with console script (#355)
This commit is contained in:
parent
cdc7ca71bc
commit
dee71bf631
@ -1,3 +1,6 @@
|
|||||||
|
## 2024-12-19 4.8.15
|
||||||
|
* Fix uploading archive in CRM using console script
|
||||||
|
|
||||||
## 2024-11-07 4.8.14
|
## 2024-11-07 4.8.14
|
||||||
* The method for determining the stock quantity has been optimized
|
* The method for determining the stock quantity has been optimized
|
||||||
|
|
||||||
|
@ -20,21 +20,43 @@
|
|||||||
В модуле возможно сделать необходимые кастомизация для генерации ICML-файла в желаемом формате <br>
|
В модуле возможно сделать необходимые кастомизация для генерации ICML-файла в желаемом формате <br>
|
||||||
|
|
||||||
**Выгрузка архивных данных** <br>
|
**Выгрузка архивных данных** <br>
|
||||||
Ранее модуль *(до версии 4.3.3)* мог выгружать не более 700-800 архивных заказов *(т.к. выгрузка происходила по web-хиту, работа скрипта была ограничена и не все данные успевали прогрузится в CRM)*, этот момент был доработан *(#70113)* и сейчас модуль загружает из Woo в CRM все присутствующие заказы пачками по 50 шт *(сделано для того, чтобы у слабых серверов не возникало проблем с загрузкой)*.
|
|
||||||
Также заказы архивные данные можно выгрузить с использованием консольного скрипта: нужно скачать этот скрипт, загрузить его в корень сайта на сервере
|
|
||||||
**upload_to_crm.php** *(название файла)*
|
|
||||||
|
|
||||||
|
Ранее модуль мог выгружать не более 700-800 архивных заказов *(т.к. выгрузка происходила по web-хиту, работа скрипта была ограничена и не все данные успевали прогрузится в CRM)*.<br>
|
||||||
|
Сейчас архивные данные можно выгрузить в CRM с использованием консольного скрипта. Этот скрипт позволяет выгружать все архивные заказы и данные о клиентах без ограничения на количество записей. Процесс выгрузки выполняется пакетами по 50 заказов или 50 клиентов за раз. <br>
|
||||||
|
После завершения обработки каждой пачки выводится ее порядковый номер, что позволяет отслеживать прогресс работы скрипта. Если во время выгрузки возникает ошибка, скрипт можно перезапустить с той страницы, где произошел сбой, что минимизирует потерю данных и время на повторную выгрузку.<br>
|
||||||
|
|
||||||
|
Для запуска выгрузки нужно:<br>
|
||||||
|
|
||||||
|
1. В корневой директории вашего сайта (по умолчанию - */var/www/html*) разместить файл **upload_to_crm.php** и вставить в него код:
|
||||||
|
|
||||||
|
```
|
||||||
<?php
|
<?php
|
||||||
/** Load WordPress Bootstrap **/
|
|
||||||
require_once dirname( __FILE__ ) . '/wp-load.php';
|
|
||||||
do_action("wp_ajax_do_upload");
|
|
||||||
После чего в командной строке ввести команду
|
|
||||||
|
|
||||||
> php upload_to_crm.php
|
require_once __DIR__ . '/wp-load.php';
|
||||||
|
|
||||||
тем самым запустить выполнение скрипта. Для последнего действия нужно использовать ssh.
|
$options = getopt('',['entity::','page::']);
|
||||||
После выполнения данных действий дожидаемся завершение работы. При этом информация об ошибках при выгрузке заказов будет фиксироваться в разделе WooCommerce "Статус", "Журналы".
|
|
||||||
Как скрипт завершит работу в командной строке появляется возможность ввести новую команду.
|
do_action('wp_console_upload', $options['entity'] ?? '', (int) $options['page'] ?? 0);
|
||||||
|
```
|
||||||
|
2. После чего в командной строке ввести команду для запуска скрипта: <br>
|
||||||
|
|
||||||
|
> php upload_to_crm.php --entity=orders/customers/full_upload --page=номер страницы
|
||||||
|
|
||||||
|
Параметры для выгрузки:<br>
|
||||||
|
|
||||||
|
**--entity**: Указывает, какие данные выгружать. Данный параметр **является обязательным**. Возможные значения:
|
||||||
|
|
||||||
|
- **orders**: архивные заказы;
|
||||||
|
- **customers**: архивные клиенты;
|
||||||
|
- **full_upload**: полная выгрузка всех заказов и клиентов (весь архив).
|
||||||
|
|
||||||
|
**--page**: Указывает номер страницы для выгрузки. Каждая страница содержит 50 заказов или клиентов. Нумерация страниц начинается с 0.<br>
|
||||||
|
|
||||||
|
Пример:
|
||||||
|
|
||||||
|
> php upload_to_crm.php --entity=orders --page=3
|
||||||
|
|
||||||
|
В этом примере будет выгружен архив заказов, начиная с 3-й страницы.
|
||||||
|
|
||||||
**Работа с зонами доставки** *(WooCommerce - Настройки - Доставка - Зоны доставки)*
|
**Работа с зонами доставки** *(WooCommerce - Настройки - Доставка - Зоны доставки)*
|
||||||
|
|
||||||
|
@ -111,6 +111,7 @@ if (!class_exists('WC_Retailcrm_Base')) {
|
|||||||
add_action('admin_enqueue_scripts', [$this, 'include_files_for_admin'], 101);
|
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('woocommerce_new_order', [$this, 'fill_array_create_orders'], 11, 1);
|
||||||
add_action('shutdown', [$this, 'create_order'], -2);
|
add_action('shutdown', [$this, 'create_order'], -2);
|
||||||
|
add_action('wp_console_upload', [$this, 'console_upload'], 99, 2);
|
||||||
|
|
||||||
if (
|
if (
|
||||||
!$this->get_option('deactivate_update_order')
|
!$this->get_option('deactivate_update_order')
|
||||||
@ -174,6 +175,10 @@ if (!class_exists('WC_Retailcrm_Base')) {
|
|||||||
$this->activateModule();
|
$this->activateModule();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function console_upload($entity, $page = 0)
|
||||||
|
{
|
||||||
|
$this->uploader->uploadConsole($entity, $page);
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* Init settings fields
|
* Init settings fields
|
||||||
*/
|
*/
|
||||||
|
@ -75,13 +75,13 @@ if (class_exists('WC_Retailcrm_Uploader') === false) {
|
|||||||
/**
|
/**
|
||||||
* Uploads archive order in CRM
|
* Uploads archive order in CRM
|
||||||
*
|
*
|
||||||
* @param null|int $page Number page uploads.
|
* @param int|null $page Number page uploads.
|
||||||
* @param array $ids Ids orders upload.
|
* @param array $ids Ids orders upload.
|
||||||
*
|
*
|
||||||
* @return void|null
|
* @return void|null
|
||||||
* @throws Exception Invalid argument exception.
|
* @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));
|
WC_Retailcrm_Logger::info(__METHOD__, 'Archive order IDs: ' . implode(', ', $ids));
|
||||||
|
|
||||||
@ -98,6 +98,7 @@ if (class_exists('WC_Retailcrm_Uploader') === false) {
|
|||||||
$orderIds = $ids;
|
$orderIds = $ids;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($orderIds !== []) {
|
||||||
foreach ($orderIds as $orderId) {
|
foreach ($orderIds as $orderId) {
|
||||||
$errorMessage = $this->orders->orderCreate($orderId);
|
$errorMessage = $this->orders->orderCreate($orderId);
|
||||||
|
|
||||||
@ -105,6 +106,7 @@ if (class_exists('WC_Retailcrm_Uploader') === false) {
|
|||||||
$uploadErrors[$orderId] = $errorMessage;
|
$uploadErrors[$orderId] = $errorMessage;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$this->logOrdersUploadErrors($uploadErrors);
|
$this->logOrdersUploadErrors($uploadErrors);
|
||||||
}
|
}
|
||||||
@ -125,7 +127,7 @@ if (class_exists('WC_Retailcrm_Uploader') === false) {
|
|||||||
|
|
||||||
$users = $this->getCmsUsers($page);
|
$users = $this->getCmsUsers($page);
|
||||||
|
|
||||||
if (false === empty($users)) {
|
if ($users !== []) {
|
||||||
$dataCustomers = [];
|
$dataCustomers = [];
|
||||||
|
|
||||||
foreach ($users as $user) {
|
foreach ($users as $user) {
|
||||||
@ -234,5 +236,47 @@ if (class_exists('WC_Retailcrm_Uploader') === false) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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
|
|
||||||
|
@ -5,7 +5,7 @@ Tags: Интеграция, Simla.com, simla
|
|||||||
Requires PHP: 7.1
|
Requires PHP: 7.1
|
||||||
Requires at least: 5.3
|
Requires at least: 5.3
|
||||||
Tested up to: 6.5
|
Tested up to: 6.5
|
||||||
Stable tag: 4.8.14
|
Stable tag: 4.8.15
|
||||||
License: GPLv1 or later
|
License: GPLv1 or later
|
||||||
License URI: http://www.gnu.org/licenses/gpl-1.0.html
|
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 ==
|
== Changelog ==
|
||||||
|
= 4.8.15 =
|
||||||
|
* Fix uploading archive in CRM using console script
|
||||||
|
|
||||||
= 4.8.14 =
|
= 4.8.14 =
|
||||||
* The method for determining the stock quantity has been optimized
|
* The method for determining the stock quantity has been optimized
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
* Description: Integration plugin for WooCommerce & Simla.com
|
* Description: Integration plugin for WooCommerce & Simla.com
|
||||||
* Author: RetailDriver LLC
|
* Author: RetailDriver LLC
|
||||||
* Author URI: http://retailcrm.pro/
|
* Author URI: http://retailcrm.pro/
|
||||||
* Version: 4.8.14
|
* Version: 4.8.15
|
||||||
* Tested up to: 6.5
|
* Tested up to: 6.5
|
||||||
* Requires Plugins: woocommerce
|
* Requires Plugins: woocommerce
|
||||||
* WC requires at least: 5.4
|
* WC requires at least: 5.4
|
||||||
@ -27,7 +27,7 @@ if (!class_exists( 'WC_Integration_Retailcrm')) :
|
|||||||
class WC_Integration_Retailcrm {
|
class WC_Integration_Retailcrm {
|
||||||
const WOOCOMMERCE_SLUG = 'woocommerce';
|
const WOOCOMMERCE_SLUG = 'woocommerce';
|
||||||
const WOOCOMMERCE_PLUGIN_PATH = 'woocommerce/woocommerce.php';
|
const WOOCOMMERCE_PLUGIN_PATH = 'woocommerce/woocommerce.php';
|
||||||
const MODULE_VERSION = '4.8.11';
|
const MODULE_VERSION = '4.8.15';
|
||||||
|
|
||||||
private static $instance;
|
private static $instance;
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
*
|
*
|
||||||
* @link https://wordpress.org/plugins/woo-retailcrm/
|
* @link https://wordpress.org/plugins/woo-retailcrm/
|
||||||
*
|
*
|
||||||
* @version 4.8.14
|
* @version 4.8.15
|
||||||
*
|
*
|
||||||
* @package RetailCRM
|
* @package RetailCRM
|
||||||
*/
|
*/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user