mirror of
https://github.com/retailcrm/opencart-module.git
synced 2025-04-05 06:13:38 +03:00
Compare commits
37 commits
Author | SHA1 | Date | |
---|---|---|---|
|
b1d013dd30 | ||
|
c5916fc8f2 | ||
|
2c6cccc3b1 | ||
|
c893cf24fb | ||
|
d5f29dc5fe | ||
|
3a30986e4b | ||
|
571263ca2c | ||
|
a375804086 | ||
|
a56ce789ed | ||
|
f5f55dd449 | ||
|
62605b11ed | ||
|
22a9c2d819 | ||
|
a2a4eca8c7 | ||
|
63f625b329 | ||
|
6a7f395116 | ||
|
792546d007 | ||
|
7d3390bc02 | ||
|
ef6d09c03a | ||
|
e4cfdd8c9f | ||
|
8b7522ca6c | ||
|
b6181ab426 | ||
|
3e1c19fd8d | ||
|
090a5783c5 | ||
|
feaeca458f | ||
|
b22941cc3e | ||
|
6790cf7b0e | ||
463485509e | |||
|
78806e4aef | ||
|
4f15310fbb | ||
a1f97bc996 | |||
|
d058173aa4 | ||
|
4e09c021c8 | ||
f4e892d71a | |||
|
92d94c919e | ||
|
8445980d5a | ||
|
072b3a95b0 | ||
|
a0337479ae |
44 changed files with 832 additions and 626 deletions
|
@ -2,7 +2,7 @@ FROM php:7.1-apache
|
|||
|
||||
RUN apt-get update
|
||||
|
||||
RUN apt-get install -y netcat zlib1g-dev libpq-dev git libicu-dev libxml2-dev libpng-dev libjpeg-dev libmcrypt-dev libxslt-dev libfreetype6-dev \
|
||||
RUN apt-get install -y netcat zlib1g-dev libpq-dev git libicu-dev libxml2-dev libpng-dev libjpeg-dev libmcrypt-dev libxslt-dev libfreetype6-dev unzip \
|
||||
&& docker-php-ext-configure intl \
|
||||
&& docker-php-ext-install intl \
|
||||
&& docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql \
|
||||
|
|
|
@ -14,5 +14,5 @@ OC_EMAIL=you@example.com
|
|||
SERVER_PORT=8080
|
||||
SERVER_URL=http://localhost
|
||||
|
||||
TEST_SUITE=3.0
|
||||
TEST_SUITE=3
|
||||
OPENCART=3.0.2.0
|
||||
|
|
175
.github/workflows/ci.yml
vendored
175
.github/workflows/ci.yml
vendored
|
@ -26,133 +26,78 @@ jobs:
|
|||
strategy:
|
||||
matrix:
|
||||
include:
|
||||
- php-version: '7.0'
|
||||
test-suite: '2.3'
|
||||
oc: '2.3.0.0'
|
||||
coverage: 1
|
||||
- php-version: '7.0'
|
||||
test-suite: '2.3'
|
||||
oc: '2.3.0.1'
|
||||
- php-version: '7.0'
|
||||
test-suite: '2.3'
|
||||
oc: '2.3.0.2'
|
||||
- php-version: '7.1'
|
||||
test-suite: '2.3'
|
||||
oc: '2.3.0.0'
|
||||
- php-version: '7.1'
|
||||
test-suite: '2.3'
|
||||
oc: '2.3.0.1'
|
||||
- php-version: '7.1'
|
||||
test-suite: '2.3'
|
||||
oc: '2.3.0.2'
|
||||
- php-version: '7.0'
|
||||
test-suite: '3.0'
|
||||
oc: '3.0.0.0'
|
||||
- php-version: '7.0'
|
||||
test-suite: '3.0'
|
||||
oc: '3.0.0.2'
|
||||
- php-version: '7.0'
|
||||
test-suite: '3.0'
|
||||
oc: '3.0.1.0'
|
||||
- php-version: '7.0'
|
||||
test-suite: '3.0'
|
||||
oc: '3.0.1.1'
|
||||
- php-version: '7.0'
|
||||
test-suite: '3.0'
|
||||
oc: '3.0.1.2'
|
||||
- php-version: '7.0'
|
||||
test-suite: '3.0'
|
||||
oc: '3.0.2.0'
|
||||
- php-version: '7.0'
|
||||
test-suite: '3.0'
|
||||
oc: '3.0.3.0'
|
||||
- php-version: '7.0'
|
||||
test-suite: '3.0'
|
||||
oc: '3.0.3.1'
|
||||
- php-version: '7.0'
|
||||
test-suite: '3.0'
|
||||
oc: '3.0.3.2'
|
||||
- php-version: '7.1'
|
||||
test-suite: '3.0'
|
||||
oc: '3.0.0.0'
|
||||
- php-version: '7.1'
|
||||
test-suite: '3.0'
|
||||
oc: '3.0.0.2'
|
||||
- php-version: '7.1'
|
||||
test-suite: '3.0'
|
||||
oc: '3.0.1.0'
|
||||
- php-version: '7.1'
|
||||
test-suite: '3.0'
|
||||
oc: '3.0.1.1'
|
||||
- php-version: '7.1'
|
||||
test-suite: '3.0'
|
||||
oc: '3.0.1.2'
|
||||
- php-version: '7.1'
|
||||
test-suite: '3.0'
|
||||
oc: '3.0.2.0'
|
||||
- php-version: '7.1'
|
||||
test-suite: '3.0'
|
||||
oc: '3.0.3.0'
|
||||
- php-version: '7.1'
|
||||
test-suite: '3.0'
|
||||
oc: '3.0.3.1'
|
||||
- php-version: '7.1'
|
||||
test-suite: '3.0'
|
||||
oc: '3.0.3.2'
|
||||
- php-version: '7.2'
|
||||
test-suite: '3.0'
|
||||
oc: '3.0.0.0'
|
||||
- php-version: '7.2'
|
||||
test-suite: '3.0'
|
||||
oc: '3.0.0.2'
|
||||
- php-version: '7.2'
|
||||
test-suite: '3.0'
|
||||
oc: '3.0.1.0'
|
||||
- php-version: '7.2'
|
||||
test-suite: '3.0'
|
||||
oc: '3.0.1.1'
|
||||
- php-version: '7.2'
|
||||
test-suite: '3.0'
|
||||
oc: '3.0.1.2'
|
||||
- php-version: '7.2'
|
||||
test-suite: '3.0'
|
||||
oc: '3.0.2.0'
|
||||
- php-version: '7.2'
|
||||
test-suite: '3.0'
|
||||
oc: '3.0.3.0'
|
||||
- php-version: '7.2'
|
||||
test-suite: '3.0'
|
||||
oc: '3.0.3.1'
|
||||
- php-version: '7.2'
|
||||
test-suite: '3.0'
|
||||
oc: '3.0.3.2'
|
||||
- php-version: '7.3'
|
||||
test-suite: '3.0'
|
||||
oc: '3.0.0.0'
|
||||
- php-version: '7.3'
|
||||
test-suite: '3.0'
|
||||
oc: '3.0.0.2'
|
||||
- php-version: '7.3'
|
||||
test-suite: '3.0'
|
||||
oc: '3.0.1.0'
|
||||
- php-version: '7.3'
|
||||
test-suite: '3.0'
|
||||
test-suite: '3'
|
||||
oc: '3.0.1.1'
|
||||
- php-version: '7.3'
|
||||
test-suite: '3.0'
|
||||
test-suite: '3'
|
||||
oc: '3.0.1.2'
|
||||
- php-version: '7.3'
|
||||
test-suite: '3.0'
|
||||
test-suite: '3'
|
||||
oc: '3.0.2.0'
|
||||
- php-version: '7.3'
|
||||
test-suite: '3.0'
|
||||
test-suite: '3'
|
||||
oc: '3.0.3.0'
|
||||
- php-version: '7.3'
|
||||
test-suite: '3.0'
|
||||
test-suite: '3'
|
||||
oc: '3.0.3.1'
|
||||
- php-version: '7.3'
|
||||
test-suite: '3.0'
|
||||
test-suite: '3'
|
||||
oc: '3.0.3.2'
|
||||
- php-version: '7.3'
|
||||
test-suite: '3'
|
||||
oc: '3.0.3.3'
|
||||
- php-version: '7.3'
|
||||
test-suite: '3'
|
||||
oc: '3.0.3.4'
|
||||
- php-version: '7.3'
|
||||
test-suite: '3'
|
||||
oc: '3.0.3.5'
|
||||
- php-version: '7.3'
|
||||
test-suite: '3'
|
||||
oc: '3.0.3.6'
|
||||
- php-version: '7.3'
|
||||
test-suite: '3'
|
||||
oc: '3.0.3.7'
|
||||
- php-version: '7.3'
|
||||
test-suite: '3'
|
||||
oc: '3.0.3.8'
|
||||
- php-version: '7.4'
|
||||
test-suite: '3'
|
||||
oc: '3.0.1.1'
|
||||
- php-version: '7.4'
|
||||
test-suite: '3'
|
||||
oc: '3.0.1.2'
|
||||
- php-version: '7.4'
|
||||
test-suite: '3'
|
||||
oc: '3.0.2.0'
|
||||
- php-version: '7.4'
|
||||
test-suite: '3'
|
||||
oc: '3.0.3.0'
|
||||
- php-version: '7.4'
|
||||
test-suite: '3'
|
||||
oc: '3.0.3.1'
|
||||
- php-version: '7.4'
|
||||
test-suite: '3'
|
||||
oc: '3.0.3.2'
|
||||
- php-version: '7.4'
|
||||
test-suite: '3'
|
||||
oc: '3.0.3.3'
|
||||
- php-version: '7.4'
|
||||
test-suite: '3'
|
||||
oc: '3.0.3.4'
|
||||
- php-version: '7.4'
|
||||
test-suite: '3'
|
||||
oc: '3.0.3.5'
|
||||
- php-version: '7.4'
|
||||
test-suite: '3'
|
||||
oc: '3.0.3.6'
|
||||
- php-version: '7.4'
|
||||
test-suite: '3'
|
||||
oc: '3.0.3.7'
|
||||
- php-version: '7.4'
|
||||
test-suite: '3'
|
||||
oc: '3.0.3.8'
|
||||
services:
|
||||
mysql:
|
||||
image: mysql:5.7
|
||||
|
|
45
CHANGELOG.md
45
CHANGELOG.md
|
@ -1,3 +1,48 @@
|
|||
## v4.1.19
|
||||
* Added option to round order amount
|
||||
|
||||
## v4.1.18
|
||||
* Fixed constant with version of module.
|
||||
|
||||
## v4.1.17
|
||||
* Added additional parameters to GET requests.
|
||||
|
||||
## v4.1.16
|
||||
* Support for services in ICML
|
||||
|
||||
## v4.1.15
|
||||
* Display module version
|
||||
|
||||
## v4.1.14
|
||||
* Added currency validation when configuring the module
|
||||
|
||||
## v4.1.13
|
||||
* Changed the logic of customer subscriptions to promotional newsletters
|
||||
|
||||
## v4.1.12
|
||||
* Added escaping for db query in method for getting zone
|
||||
|
||||
## v4.1.11
|
||||
* Fixed the transfer of the weight offers
|
||||
|
||||
## v4.1.10
|
||||
* Types of deliveries and payments are displayed only active status and available stores
|
||||
|
||||
## v4.1.9
|
||||
* Optimization of the history processing algorithm
|
||||
|
||||
## v4.1.8
|
||||
* Fixed customer externalId when creating a customer and sending it to RetailCRM
|
||||
|
||||
## v4.1.7
|
||||
* Fixed notices in ICML generation and while setting delivery type
|
||||
* Fixed incorrect data check before setting payment data
|
||||
* Some other minor improvements
|
||||
|
||||
## v4.1.6
|
||||
* Fix for typo in the history routine
|
||||
* Fix for incorrect protocol in the ICML product image links
|
||||
|
||||
## v4.1.5
|
||||
* Send discount details into the system
|
||||
* Prefix for payment external ID (to ensure that it's unique)
|
||||
|
|
10
Makefile
10
Makefile
|
@ -17,9 +17,8 @@ delete_archive:
|
|||
|
||||
before_script:
|
||||
mkdir coverage
|
||||
composer require --dev beyondit/opencart-test-suite ~$(TEST_SUITE)
|
||||
composer require --dev opencart/opencart $(OPENCART)
|
||||
composer setup
|
||||
composer require --dev beyondit/opencart-test-suite:~$(TEST_SUITE)
|
||||
composer opencart:install
|
||||
bin/robo --load-from tests/RoboFile.php project:deploy
|
||||
(php -S localhost:80 -t www &) 2> /dev/null > /dev/null
|
||||
sleep 2
|
||||
|
@ -32,8 +31,7 @@ robo_deploy:
|
|||
|
||||
run:
|
||||
composer require --dev beyondit/opencart-test-suite ~$(TEST_SUITE)
|
||||
composer require --dev opencart/opencart $(OPENCART)
|
||||
composer setup
|
||||
composer opencart:install
|
||||
bin/robo --load-from tests/RoboFile.php project:deploy
|
||||
|
||||
run_test: run
|
||||
|
@ -48,4 +46,4 @@ phpcs-config:
|
|||
bin/phpcs --config-set installed_paths vendor/phpcompatibility/php-compatibility
|
||||
|
||||
phpcomp: phpcs-config
|
||||
@bin/phpcs -s -p ./src --standard=PHPCompatibility --runtime-set testVersion 5.4-7.3
|
||||
@bin/phpcs -s -p ./src --standard=PHPCompatibility --runtime-set testVersion 7.3-7.4
|
||||
|
|
36
README.md
36
README.md
|
@ -6,7 +6,7 @@
|
|||
Opencart module
|
||||
===============
|
||||
|
||||
Module allows integrate CMS Opencart >= 2.3 with [RetailCRM](https://retailcrm.pro)
|
||||
This module allows to integrate CMS Opencart >= 2.3 with [RetailCRM](https://retailcrm.pro).
|
||||
|
||||
### Previous versions:
|
||||
|
||||
|
@ -16,51 +16,59 @@ Module allows integrate CMS Opencart >= 2.3 with [RetailCRM](https://retailcrm.p
|
|||
|
||||
#### Features:
|
||||
|
||||
* Export orders to RetailCRM & fetch changes back
|
||||
* Export product catalog into [ICML](https://help.retailcrm.pro/Developers/ICML) format
|
||||
* Export orders to RetailCRM & receive changes from RetailCRM.
|
||||
* Export product catalog to the [ICML](https://help.retailcrm.pro/Developers/ICML) format.
|
||||
|
||||
#### Install
|
||||
|
||||
Copy files to the site root
|
||||
**Note:** `/path/to/your/site` is just a placeholder. You should replace it with the actual path to your site root in the examples below. The module won't work if you'll use those examples without changing the path placeholder.
|
||||
|
||||
Copy module files to the site root (replace `/path/to/your/site` with the actual path to your site):
|
||||
|
||||
```
|
||||
unzip master.zip
|
||||
cp -r opencart-module/src/* /path/to/site/root
|
||||
cp -r opencart-module/src/* /path/to/your/site
|
||||
```
|
||||
|
||||
#### Setup
|
||||
|
||||
* Go to Admin -> Extensions -> Modules -> RetailCRM
|
||||
* Fill you api url & api key
|
||||
* Fill you API URL & API key
|
||||
* Specify directories matching
|
||||
|
||||
#### Migrating to 4.* from early modules versions
|
||||
|
||||
Before you copy the files of module you will to remove the directory `path/to/opencart/system/library/retailcrm`
|
||||
It's necessary to remove the `/path/to/your/site/system/library/retailcrm` before copying current module into your site.
|
||||
|
||||
#### Getting changes in orders
|
||||
|
||||
Add to cron:
|
||||
Add to cron (replace `/path/to/your/site` with the actual path to your site):
|
||||
|
||||
```
|
||||
*/5 * * * * /usr/bin/php /path/to/opencart/system/library/retailcrm/cron/history.php >> /path/to/opencart/system/storage/logs/cronjob_history.log 2>&1
|
||||
*/5 * * * * /usr/bin/php /path/to/your/site/system/library/retailcrm/cron/history.php >> /path/to/your/site/system/storage/logs/cronjob_history.log 2>&1
|
||||
```
|
||||
|
||||
#### Setting product catalog export
|
||||
|
||||
Add to cron:
|
||||
Add to cron (replace `/path/to/your/site` with the actual path to your site):
|
||||
|
||||
```
|
||||
* */4 * * * /usr/bin/php /path/to/opencart/system/library/retailcrm/cron/icml.php >> /path/to/opencart/system/storage/logs/cronjob_icml.log 2>&1
|
||||
* */4 * * * /usr/bin/php /path/to/your/site/system/library/retailcrm/cron/icml.php >> /path/to/your/site/system/storage/logs/cronjob_icml.log 2>&1
|
||||
```
|
||||
|
||||
Your export file will be available by following url
|
||||
Your export file should be available by following url:
|
||||
|
||||
```
|
||||
http://youropencartsite.com/retailcrm.xml
|
||||
```
|
||||
|
||||
Replace `youropencartsite.com` with your site domain and `http` with your site scheme.
|
||||
|
||||
#### Export existing orders and customers
|
||||
|
||||
You want to run this command onecly:
|
||||
/usr/bin/php /path/to/opencart/system/library/retailcrm/cron/export.php
|
||||
Run this command (replace `/path/to/your/site` with the actual path to your site):
|
||||
```sh
|
||||
/usr/bin/php /path/to/your/site/system/library/retailcrm/cron/export.php
|
||||
```
|
||||
|
||||
You should run this command only once.
|
||||
|
|
2
VERSION
2
VERSION
|
@ -1 +1 @@
|
|||
4.1.5
|
||||
4.1.19
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
"@test-catalog",
|
||||
"@test-system"
|
||||
],
|
||||
"setup" : "bin/robo --load-from tests/RoboFile.php opencart:setup"
|
||||
"opencart:install" : "bin/robo --load-from tests/RoboFile.php opencart:install"
|
||||
},
|
||||
"require": {
|
||||
"ext-json": "*"
|
||||
|
@ -33,7 +33,6 @@
|
|||
"require-dev": {
|
||||
"consolidation/robo": "~1.0",
|
||||
"phpcompatibility/php-compatibility": "^9.3",
|
||||
"beyondit/opencart-test-suite": "~3.0",
|
||||
"opencart/opencart": "3.0.2.0"
|
||||
"beyondit/opencart-test-suite": "~3.0"
|
||||
}
|
||||
}
|
||||
|
|
6
doc/Update module.md
Normal file
6
doc/Update module.md
Normal file
|
@ -0,0 +1,6 @@
|
|||
### Обновление версии модуля
|
||||
|
||||
Для обновления версии модуля необходимо обновить следующие файлы:
|
||||
* VERSION
|
||||
* CHANGELOG.md
|
||||
* src/upload/admin/controller/extension/module/retailcrm.php
|
|
@ -1,8 +1,10 @@
|
|||
<?php
|
||||
|
||||
use retailcrm\Retailcrm;
|
||||
|
||||
class ControllerExtensionModuleRetailcrm extends Controller
|
||||
{
|
||||
private $_error = array();
|
||||
private $_error = [];
|
||||
protected $log, $statuses, $payments, $deliveryTypes, $retailcrmApiClient, $moduleTitle, $tokenTitle;
|
||||
public $children, $template;
|
||||
|
||||
|
@ -25,10 +27,10 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
|||
|
||||
$this->model_setting_setting->editSetting(
|
||||
$this->moduleTitle,
|
||||
array(
|
||||
[
|
||||
$this->moduleTitle . '_status' => 1,
|
||||
$this->moduleTitle . '_country' => array($this->config->get('config_country_id'))
|
||||
)
|
||||
$this->moduleTitle . '_country' => [$this->config->get('config_country_id')]
|
||||
]
|
||||
);
|
||||
|
||||
$this->addEvents();
|
||||
|
@ -59,7 +61,7 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
|||
$this->uninstall_collector();
|
||||
$this->model_setting_setting->editSetting(
|
||||
$this->moduleTitle,
|
||||
array($this->moduleTitle . '_status' => 0)
|
||||
[$this->moduleTitle . '_status' => 0]
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -79,7 +81,7 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
|||
$this->loadModels();
|
||||
$this->load->model('setting/setting');
|
||||
$this->{'model_' . $this->modelExtension}->install('analytics', 'daemon_collector');
|
||||
$this->model_setting_setting->editSetting($collector, array($collector . '_status' => 1));
|
||||
$this->model_setting_setting->editSetting($collector, [$collector . '_status' => 1]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -92,7 +94,7 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
|||
$collector = $this->getCollectorTitle();
|
||||
$this->loadModels();
|
||||
$this->load->model('setting/setting');
|
||||
$this->model_setting_setting->editSetting($collector, array($collector . '_status' => 0));
|
||||
$this->model_setting_setting->editSetting($collector, [$collector . '_status' => 0]);
|
||||
$this->{'model_' . $this->modelExtension}->uninstall('analytics', 'daemon_collector');
|
||||
}
|
||||
|
||||
|
@ -107,7 +109,7 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
|||
$this->loadModels();
|
||||
$this->load->model('setting/setting');
|
||||
$this->{'model_' . $this->modelExtension}->install('analytics', 'online_consultant');
|
||||
$this->model_setting_setting->editSetting($consultant, array($consultant . '_status' => 1));
|
||||
$this->model_setting_setting->editSetting($consultant, [$consultant . '_status' => 1]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -120,7 +122,7 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
|||
$consultant = $this->getConsultantTitle();
|
||||
$this->loadModels();
|
||||
$this->load->model('setting/setting');
|
||||
$this->model_setting_setting->editSetting($consultant, array($consultant . '_status' => 0));
|
||||
$this->model_setting_setting->editSetting($consultant, [$consultant . '_status' => 0]);
|
||||
$this->{'model_' . $this->modelExtension}->uninstall('analytics', 'online_consultant');
|
||||
}
|
||||
|
||||
|
@ -186,42 +188,21 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
|||
$this->request->post
|
||||
);
|
||||
|
||||
if (!isset($history_setting['retailcrm_history_orders']) && !isset($history_setting['retailcrm_history_customers'])) {
|
||||
if (
|
||||
!isset($history_setting['retailcrm_history_orders'])
|
||||
&& !isset($history_setting['retailcrm_history_customers'])
|
||||
) {
|
||||
$api = $this->retailcrm->getApiClient(
|
||||
$this->request->post[$this->moduleTitle . '_url'],
|
||||
$this->request->post[$this->moduleTitle . '_apikey']
|
||||
);
|
||||
|
||||
$ordersHistory = $api->ordersHistory();
|
||||
|
||||
if ($ordersHistory && $ordersHistory->isSuccessful() && !empty($ordersHistory['history'])) {
|
||||
$ordersHistory = $api->ordersHistory(array(), $ordersHistory['pagination']['totalPageCount']);
|
||||
|
||||
if ($ordersHistory && $ordersHistory->isSuccessful()) {
|
||||
$ordersHistoryArr = $ordersHistory['history'];
|
||||
$lastChangeOrders = end($ordersHistoryArr);
|
||||
$sinceIdOrders = $lastChangeOrders['id'];
|
||||
}
|
||||
}
|
||||
|
||||
$customersHistory = $api->customersHistory();
|
||||
|
||||
if ($customersHistory && $customersHistory->isSuccessful() && !empty($customersHistory['history'])) {
|
||||
$customersHistory = $api->customersHistory(array(), $customersHistory['pagination']['totalPageCount']);
|
||||
|
||||
if ($customersHistory && $customersHistory->isSuccessful()) {
|
||||
$customersHistoryArr = $customersHistory['history'];
|
||||
$lastChangeCustomers = end($customersHistoryArr);
|
||||
$sinceIdCustomers = $lastChangeCustomers['id'];
|
||||
}
|
||||
}
|
||||
|
||||
$this->model_setting_setting->editSetting(
|
||||
'retailcrm_history',
|
||||
array(
|
||||
'retailcrm_history_orders' => isset($sinceIdOrders) ? $sinceIdOrders : 1,
|
||||
'retailcrm_history_customers' => isset($sinceIdCustomers) ? $sinceIdCustomers : 1
|
||||
)
|
||||
[
|
||||
'retailcrm_history_orders' => $this->getHistorySinceId($api, 'ordersHistory'),
|
||||
'retailcrm_history_customers' => $this->getHistorySinceId($api, 'customersHistory'),
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -242,12 +223,12 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
|||
if ($result === true) {
|
||||
$this->model_setting_setting->editSetting(
|
||||
'retailcrm_setting',
|
||||
array(
|
||||
[
|
||||
'retailcrm_setting_active_in_crm' => true,
|
||||
'retailcrm_setting_client_id' => $clientId,
|
||||
'retailcrm_setting_url' => $this->request->post[$this->moduleTitle . '_url'],
|
||||
'retailcrm_setting_key' => $this->request->post[$this->moduleTitle . '_apikey']
|
||||
)
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -261,7 +242,7 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
|||
$this->response->redirect($redirect);
|
||||
}
|
||||
|
||||
$text_strings = array(
|
||||
$text_strings = [
|
||||
'heading_title',
|
||||
'text_enabled',
|
||||
'text_disabled',
|
||||
|
@ -320,7 +301,11 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
|||
'special_price',
|
||||
'order_number',
|
||||
'text_order_number',
|
||||
'text_currency',
|
||||
'summ_around',
|
||||
'text_summ_around',
|
||||
'icml_settings',
|
||||
'icml_service_enabled_label',
|
||||
'icml_service_description',
|
||||
'text_currency_label',
|
||||
'status_changes',
|
||||
'text_status_changes',
|
||||
|
@ -333,35 +318,39 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
|||
'text_retailcrm_label_discount',
|
||||
'default_retailcrm_label_discount',
|
||||
'sum_payment',
|
||||
'text_sum_payment'
|
||||
);
|
||||
'text_sum_payment',
|
||||
];
|
||||
|
||||
$_data = &$data;
|
||||
|
||||
$_data['module_version'] = Retailcrm::VERSION_MODULE;
|
||||
|
||||
foreach ($text_strings as $text) {
|
||||
$_data[$text] = $this->language->get($text);
|
||||
}
|
||||
|
||||
$_data['currencies'] = $this->model_localisation_currency->getCurrencies(0);
|
||||
$_data['retailcrm_errors'] = array();
|
||||
$_data['retailcrm_errors'] = [];
|
||||
$_data['saved_settings'] = $this->model_setting_setting
|
||||
->getSetting($this->moduleTitle);
|
||||
|
||||
$url = isset($_data['saved_settings'][$this->moduleTitle . '_url'])
|
||||
? $_data['saved_settings'][$this->moduleTitle . '_url']
|
||||
: null;
|
||||
$key = isset($_data['saved_settings'][$this->moduleTitle . '_apikey'])
|
||||
? $_data['saved_settings'][$this->moduleTitle . '_apikey']
|
||||
: null;
|
||||
$url = $_data['saved_settings'][$this->moduleTitle . '_url'] ?? null;
|
||||
$key = $_data['saved_settings'][$this->moduleTitle . '_apikey'] ?? null;
|
||||
|
||||
if (!empty($url) && !empty($key)) {
|
||||
$this->validate($url, $key);
|
||||
|
||||
$_data['delivery'] = $this->model_extension_retailcrm_references
|
||||
->getDeliveryTypes();
|
||||
$site = $this->model_extension_retailcrm_references->getApiSite();
|
||||
$_data['delivery'] = $this->getAvailableTypes(
|
||||
$site,
|
||||
$this->model_extension_retailcrm_references->getDeliveryTypes()
|
||||
);
|
||||
$_data['payments'] = $this->getAvailableTypes(
|
||||
$site,
|
||||
$this->model_extension_retailcrm_references->getPaymentTypes()
|
||||
);
|
||||
$_data['statuses'] = $this->model_extension_retailcrm_references
|
||||
->getOrderStatuses();
|
||||
$_data['payments'] = $this->model_extension_retailcrm_references
|
||||
->getPaymentTypes();
|
||||
$_data['customFields'] = $this->model_extension_retailcrm_references
|
||||
->getCustomFields();
|
||||
|
||||
|
@ -371,9 +360,7 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
|||
$_data['customerGroups'] = $this->model_customer_customer_group->getCustomerGroups();
|
||||
}
|
||||
|
||||
$config_data = array(
|
||||
$this->moduleTitle . '_status'
|
||||
);
|
||||
$config_data = [$this->moduleTitle . '_status'];
|
||||
|
||||
foreach ($config_data as $conf) {
|
||||
if (isset($this->request->post[$conf])) {
|
||||
|
@ -383,40 +370,35 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
|||
}
|
||||
}
|
||||
|
||||
if (isset($this->_error['warning'])) {
|
||||
$_data['error_warning'] = $this->_error['warning'];
|
||||
} else {
|
||||
$_data['error_warning'] = '';
|
||||
}
|
||||
$_data['error_warning'] = $this->_error['warning'] ?? '';
|
||||
$_data['breadcrumbs'] = [];
|
||||
|
||||
$_data['breadcrumbs'] = array();
|
||||
|
||||
$_data['breadcrumbs'][] = array(
|
||||
$_data['breadcrumbs'][] = [
|
||||
'text' => $this->language->get('text_home'),
|
||||
'href' => $this->url->link(
|
||||
'common/dashboard',
|
||||
$this->tokenTitle . '=' . $this->session->data[$this->tokenTitle], 'SSL'
|
||||
),
|
||||
'separator' => false
|
||||
);
|
||||
];
|
||||
|
||||
$_data['breadcrumbs'][] = array(
|
||||
$_data['breadcrumbs'][] = [
|
||||
'text' => $this->language->get('text_module'),
|
||||
'href' => $this->url->link(
|
||||
'extension/extension',
|
||||
$this->tokenTitle . '=' . $this->session->data[$this->tokenTitle], 'SSL'
|
||||
),
|
||||
'separator' => ' :: '
|
||||
);
|
||||
];
|
||||
|
||||
$_data['breadcrumbs'][] = array(
|
||||
$_data['breadcrumbs'][] = [
|
||||
'text' => $this->language->get('retailcrm_title'),
|
||||
'href' => $this->url->link(
|
||||
'extension/module/retailcrm',
|
||||
$this->tokenTitle . '=' . $this->session->data[$this->tokenTitle], 'SSL'
|
||||
),
|
||||
'separator' => ' :: '
|
||||
);
|
||||
];
|
||||
|
||||
$_data['action'] = $this->url->link(
|
||||
'extension/module/retailcrm',
|
||||
|
@ -428,7 +410,7 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
|||
$this->tokenTitle . '=' . $this->session->data[$this->tokenTitle], 'SSL'
|
||||
);
|
||||
|
||||
$_data['modules'] = array();
|
||||
$_data['modules'] = [];
|
||||
|
||||
if (isset($this->request->post['retailcrm_module'])) {
|
||||
$_data['modules'] = $this->request->post['retailcrm_module'];
|
||||
|
@ -452,11 +434,11 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
|||
$_data['export_file'] = true;
|
||||
}
|
||||
|
||||
$collectorFields = array(
|
||||
$collectorFields = [
|
||||
'name' => $this->language->get('field_name'),
|
||||
'email' => $this->language->get('field_email'),
|
||||
'phone' => $this->language->get('field_phone')
|
||||
);
|
||||
];
|
||||
|
||||
$_data['collectorFields'] = $collectorFields;
|
||||
|
||||
|
@ -575,20 +557,12 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
|||
|
||||
$this->response->setOutput(
|
||||
json_encode(
|
||||
array(
|
||||
'status_code' => $response->getStatusCode(),
|
||||
'error_msg' => $error
|
||||
)
|
||||
['status_code' => $response->getStatusCode(), 'error_msg' => $error],
|
||||
JSON_THROW_ON_ERROR
|
||||
)
|
||||
);
|
||||
} else {
|
||||
$this->response->setOutput(
|
||||
json_encode(
|
||||
array(
|
||||
'status_code' => $response->getStatusCode()
|
||||
)
|
||||
)
|
||||
);
|
||||
$this->response->setOutput(json_encode(['status_code' => $response->getStatusCode()]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -608,7 +582,7 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
|||
$this->model_extension_retailcrm_customer->uploadToCrm($customers, $this->retailcrm->getApiClient());
|
||||
$orders = $this->model_sale_order->getOrders();
|
||||
|
||||
$fullOrders = array();
|
||||
$fullOrders = [];
|
||||
|
||||
foreach ($orders as $order) {
|
||||
$fullOrder = $this->model_sale_order->getOrder($order['order_id']);
|
||||
|
@ -651,39 +625,57 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
|||
*
|
||||
* @return bool
|
||||
*/
|
||||
private function validate()
|
||||
private function validate($apiUrl = null, $apiKey = null)
|
||||
{
|
||||
if (!empty($this->request->post[$this->moduleTitle . '_url']) && !empty($this->request->post[$this->moduleTitle . '_apikey'])) {
|
||||
$apiClient = $this->retailcrm->getApiClient(
|
||||
$this->request->post[$this->moduleTitle . '_url'],
|
||||
$this->request->post[$this->moduleTitle . '_apikey']
|
||||
$warningMessage = '';
|
||||
|
||||
$apiUrl = $this->request->post[$this->moduleTitle . '_url'] ?? $apiUrl;
|
||||
$apiKey = $this->request->post[$this->moduleTitle . '_apikey'] ?? $apiKey;
|
||||
|
||||
try {
|
||||
if ( !empty($apiUrl) && !empty($apiKey)) {
|
||||
$apiClient = $this->retailcrm->getApiClient($apiUrl, $apiKey);
|
||||
$response = $apiClient->sitesList();
|
||||
|
||||
if (empty($response['sites']) || !$response->isSuccessful()) {
|
||||
$warningMessage = 'text_error_api_key';
|
||||
} elseif (count($response['sites']) > 1) {
|
||||
$warningMessage = 'text_error_api_key_site';
|
||||
} else {
|
||||
$site = current($response['sites']);
|
||||
|
||||
if ($this->config->get('config_currency') !== $site['currency']) {
|
||||
$warningMessage = 'text_error_api_key_currency';
|
||||
}
|
||||
}
|
||||
|
||||
if (!$this->user->hasPermission('modify', 'extension/module/retailcrm')) {
|
||||
$this->_error['warning'] = $this->language->get('error_permission');
|
||||
}
|
||||
|
||||
if (isset($this->request->post[$this->moduleTitle . '_collector']['custom']) &&
|
||||
$this->request->post[$this->moduleTitle . '_collector']['custom_form'] == 1) {
|
||||
$customField = $this->request->post[$this->moduleTitle . '_collector']['custom'];
|
||||
|
||||
if (empty($customField['name']) && empty($customField['email']) && empty($customField['phone'])) {
|
||||
$this->_error['fields'] = $this->language->get('text_error_collector_fields');
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$warningMessage = 'text_error_api_empty';
|
||||
}
|
||||
} catch (Throwable $exception) {
|
||||
$warningMessage = sprintf(
|
||||
'An error has occurred! In file: %s, on line: %s. Error message: %s',
|
||||
$exception->getFile(), $exception->getLine(), $exception->getMessage()
|
||||
);
|
||||
}
|
||||
|
||||
$response = $apiClient->apiVersions();
|
||||
|
||||
if (!$response || !$response->isSuccessful()) {
|
||||
$this->_error['warning'] = $this->language->get('text_error_api');
|
||||
if ('' !== $warningMessage) {
|
||||
$this->_error['warning'] = $this->language->get($warningMessage);
|
||||
}
|
||||
|
||||
if (!$this->user->hasPermission('modify', 'extension/module/retailcrm')) {
|
||||
$this->_error['warning'] = $this->language->get('error_permission');
|
||||
}
|
||||
|
||||
if (isset($this->request->post[$this->moduleTitle . '_collector']['custom']) &&
|
||||
$this->request->post[$this->moduleTitle . '_collector']['custom_form'] == 1) {
|
||||
$customField = $this->request->post[$this->moduleTitle . '_collector']['custom'];
|
||||
|
||||
if (empty($customField['name']) && empty($customField['email']) && empty($customField['phone'])) {
|
||||
$this->_error['fields'] = $this->language->get('text_error_collector_fields');
|
||||
}
|
||||
}
|
||||
|
||||
if (!$this->_error) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
return empty($this->_error);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -839,6 +831,13 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
|||
'extension/module/retailcrm/customer_edit'
|
||||
);
|
||||
|
||||
$this->{'model_' . $this->modelEvent}
|
||||
->addEvent(
|
||||
$this->moduleTitle,
|
||||
'catalog/model/account/customer/editNewsletter/after',
|
||||
'extension/module/retailcrm/customer_edit_newsletter'
|
||||
);
|
||||
|
||||
$this->{'model_' . $this->modelEvent}
|
||||
->addEvent(
|
||||
$this->moduleTitle,
|
||||
|
@ -912,15 +911,15 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
|||
$name = 'Opencart';
|
||||
$accountUrl = $scheme . $this->request->server['HTTP_HOST'] . '/admin';
|
||||
|
||||
$configuration = array(
|
||||
$configuration = [
|
||||
'clientId' => $clientId,
|
||||
'code' => $integrationCode . '-' . $clientId,
|
||||
'integrationCode' => $integrationCode,
|
||||
'active' => $active,
|
||||
'name' => $name,
|
||||
'logo' => $logo,
|
||||
'accountUrl' => $accountUrl
|
||||
);
|
||||
'accountUrl' => $accountUrl,
|
||||
];
|
||||
|
||||
$response = $apiClient->integrationModulesEdit($configuration);
|
||||
|
||||
|
@ -934,4 +933,57 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
|||
|
||||
return false;
|
||||
}
|
||||
|
||||
private function getHistorySinceId($api, $method)
|
||||
{
|
||||
$lastSinceId = 0;
|
||||
$startDate = new DateTime('-1 days');
|
||||
$historyResponse = $api->$method(['startDate' => $startDate->format('Y-m-d H:i:s')]);
|
||||
|
||||
if (
|
||||
!$historyResponse instanceof ApiResponse
|
||||
|| !$historyResponse->isSuccessful()
|
||||
|| empty($historyResponse['history'])
|
||||
|| empty($historyResponse['pagination'])
|
||||
) {
|
||||
return $lastSinceId;
|
||||
}
|
||||
|
||||
$startPage = $historyResponse['pagination']['currentPage'];
|
||||
$lastPage = $historyResponse['pagination']['totalPageCount'];
|
||||
|
||||
for ($startPage; $startPage <= $lastPage; ++$startPage) {
|
||||
if ($historyResponse instanceof ApiResponse && !empty($historyResponse['history'])) {
|
||||
$history = $historyResponse['history'];
|
||||
$lastSinceId = end($history)['id'];
|
||||
$historyResponse = $api->$method(['sinceId' => $lastSinceId]);
|
||||
}
|
||||
}
|
||||
|
||||
return $lastSinceId;
|
||||
}
|
||||
|
||||
private function getAvailableTypes($availableSite, $types)
|
||||
{
|
||||
$result['opencart'] = $types['opencart'];
|
||||
$result['retailcrm'] = [];
|
||||
|
||||
if (empty($availableSite)) {
|
||||
return $result;
|
||||
}
|
||||
|
||||
foreach ($types['retailcrm'] as $codeKey => $type) {
|
||||
if ($type['active'] !== true) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!empty($type['sites']) && !in_array($availableSite['code'], $type['sites'])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$result['retailcrm'][$codeKey] = $type;
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -50,8 +50,11 @@ $_['text_payment'] = 'Payment';
|
|||
$_['text_shipping'] = 'Delivery';
|
||||
$_['text_orders_custom_fields'] = 'Custom fields of orders';
|
||||
$_['text_customers_custom_fields'] = 'Custom fields of customers';
|
||||
$_['text_error_collector_fields']= 'Fill in the names of fields of Demon Collector form';
|
||||
$_['text_error_api'] = 'The selected API version is not available.';
|
||||
$_['text_error_collector_fields'] = 'Fill in the names of fields of Demon Collector form';
|
||||
$_['text_error_api_empty'] = 'The "RetailCRM URL" and "RetailCRM API key" fields cannot be empty, enter the correct value';
|
||||
$_['text_error_api_key'] = 'Invalid API key';
|
||||
$_['text_error_api_key_site'] = 'API key with one-shop access required';
|
||||
$_['text_error_api_key_currency'] = 'The currency of the site differs from the currency of the store in CRM. For the integration to work correctly, the currencies in CRM and CMS must match';
|
||||
$_['text_error_custom_field'] = 'Create custom fields on a customer page in Opencart and RetailCRM in order to set up their transfer';
|
||||
$_['text_error_cf_opencart'] = 'There are no custom fields in Opencart';
|
||||
$_['text_error_cf_retailcrm'] = 'There are no custom fields in RetailCRM';
|
||||
|
@ -69,10 +72,14 @@ $_['retailcrm_missing_status'] = 'Status of lost orders';
|
|||
|
||||
$_['order_number'] = 'Order number';
|
||||
$_['text_order_number'] = 'Upload the order number to RetailCRM';
|
||||
$_['text_currency'] = 'Currency setting';
|
||||
$_['text_currency_label'] = 'Currency in ICML';
|
||||
$_['summ_around'] = 'Around total summ';
|
||||
$_['text_summ_around'] = 'Around the order total summ';
|
||||
$_['icml_settings'] = 'ICML settings';
|
||||
$_['icml_service_enabled_label'] = 'Upload services in ICML';
|
||||
$_['icml_service_description'] = 'When the option is enabled, all products for which delivery is disabled will be considered as services and uploaded to CRM as services';
|
||||
$_['text_currency_label'] = 'Currency of goods';
|
||||
$_['text_lenght'] = 'Setting of the unit of measurement';
|
||||
$_['text_lenght_label'] = 'Unit of measurement in ICML';
|
||||
$_['text_lenght_label'] = 'Unit of measurement of goods';
|
||||
$_['status_changes'] = 'History of changes';
|
||||
$_['text_status_changes'] = 'Record changes to the order history of Opencart';
|
||||
|
||||
|
|
|
@ -51,7 +51,10 @@ $_['text_shipping'] = 'Envío';
|
|||
$_['text_orders_custom_fields'] = 'Los campos de pedidos personalizados';
|
||||
$_['text_customers_custom_fields'] = 'Los campos de clientes personalizados';
|
||||
$_['text_error_collector_fields']= 'Rellene los nombres de los campos del formulario Daemon Collector';
|
||||
$_['text_error_api'] = 'La versión seleccionada de la API no está disponible.';
|
||||
$_['text_error_api_empty'] = 'Los campos "URL de RetailCRM" y "Clave de API de RetailCRM" no pueden estar vacíos, ingrese el valor correcto';
|
||||
$_['text_error_api_key'] = 'Clave API del CRM no válida';
|
||||
$_['text_error_api_key_site'] = 'Se requiere clave API con acceso a una tienda';
|
||||
$_['text_error_api_key_currency'] = 'La moneda del sitio web es distinto a la tienda del CRM. Para el funcionamiento correcto de la integración, las monedas del CMS y CRM deben coincid';
|
||||
$_['text_error_custom_field'] = 'Cree campos personalizados en la ficha del cliente en Opencart y RetailCRM para configurar sus transmisión.';
|
||||
$_['text_error_cf_opencart'] = 'Faltan campos personalizados en Opencart';
|
||||
$_['text_error_cf_retailcrm'] = 'Faltan campos personalizados en RetailCRM';
|
||||
|
@ -69,10 +72,15 @@ $_['retailcrm_missing_status'] = 'Estado de pedidos perdidos';
|
|||
|
||||
$_['order_number'] = 'Número de pedido';
|
||||
$_['text_order_number'] = 'Transferir número de pedido a RetailCRM';
|
||||
$_['text_currency'] = 'Ajustes de moneda';
|
||||
$_['text_currency_label'] = 'Moneda en ICML';
|
||||
$_['summ_around'] = 'Redondeo del costo del pedido';
|
||||
$_['text_summ_around'] = 'Redondear los costos del pedido a RetailCRM';
|
||||
$_['icml_settings'] = 'Ajustes de ICML';
|
||||
$_['icml_service_enabled_label'] = 'Subir servicios de ICML';
|
||||
$_['icml_service_description'] = 'Si habilita la opción, todos los productos para los que la entrega está desactivada se tratarán como servicios y se cargarán en CRM como servicios';
|
||||
|
||||
$_['text_currency_label'] = 'Moneda de bienes';
|
||||
$_['text_lenght'] = 'Ajustar unidad de medida';
|
||||
$_['text_lenght_label'] = 'Unidad de medida en ICML';
|
||||
$_['text_lenght_label'] = 'Unidad de medida de bienes';
|
||||
$_['status_changes'] = 'Historial de cambios';
|
||||
$_['text_status_changes'] = 'Registrar los cambios en el historial de pedidos de Opencart';
|
||||
|
||||
|
|
|
@ -50,8 +50,11 @@ $_['text_payment'] = 'Оплата';
|
|||
$_['text_shipping'] = 'Доставка';
|
||||
$_['text_orders_custom_fields'] = 'Кастомные поля заказов';
|
||||
$_['text_customers_custom_fields'] = 'Кастомные поля клиентов';
|
||||
$_['text_error_collector_fields']= 'Заполните названия полей формы Демон Collector';
|
||||
$_['text_error_api'] = 'Недоступна выбранная версия API.';
|
||||
$_['text_error_collector_fields'] = 'Заполните названия полей формы Демон Collector';
|
||||
$_['text_error_api_empty'] = 'Поля "URL RetailCRM" и "Ключ API RetailCRM" не могут быть пустыми, введите корректное значение';
|
||||
$_['text_error_api_key'] = 'Неверный API ключ';
|
||||
$_['text_error_api_key_site'] = 'Требуется API ключ с доступом к одному магазину';
|
||||
$_['text_error_api_key_currency'] = 'Валюта сайта отличается от валюты магазина в CRM. Для корректной работы интеграции, валюты в CRM и CMS должны совпадать';
|
||||
$_['text_error_custom_field'] = 'Создайте пользовательские поля в карточке клиента в Opencart и RetailCRM, чтобы настроить их передачу';
|
||||
$_['text_error_cf_opencart'] = 'Отсутствуют пользовательские поля в Opencart';
|
||||
$_['text_error_cf_retailcrm'] = 'Отсутствуют пользовательские поля в RetailCRM';
|
||||
|
@ -69,10 +72,14 @@ $_['retailcrm_missing_status'] = 'Статус пропавших заказо
|
|||
|
||||
$_['order_number'] = 'Номер заказа';
|
||||
$_['text_order_number'] = 'Передавать номер заказа в RetailCRM';
|
||||
$_['text_currency'] = 'Настройка валюты';
|
||||
$_['text_currency_label'] = 'Валюта в ICML';
|
||||
$_['summ_around'] = 'Округление суммы заказа';
|
||||
$_['text_summ_around'] = 'Округлять сумму заказа';
|
||||
$_['icml_settings'] = 'Настройки ICML';
|
||||
$_['icml_service_enabled_label'] = 'Выгружать услуги в ICML';
|
||||
$_['icml_service_description'] = 'При включении опции все товары, для которых отключена доставка, будут рассматриваться как услуги и загружаться в CRM как услуги';
|
||||
$_['text_currency_label'] = 'Валюта товаров';
|
||||
$_['text_lenght'] = 'Настройка единицы измерения';
|
||||
$_['text_lenght_label'] = 'Единица измерения в ICML';
|
||||
$_['text_lenght_label'] = 'Единица измерения товаров';
|
||||
$_['status_changes'] = 'История изменений';
|
||||
$_['text_status_changes'] = 'Фиксировать изменения в истории заказа Opencart';
|
||||
|
||||
|
|
|
@ -72,15 +72,10 @@ class ModelExtensionRetailcrmHistory extends Model {
|
|||
return false;
|
||||
}
|
||||
|
||||
$sinceIdOrders = $history['retailcrm_history_orders'] ? $history['retailcrm_history_orders'] : null;
|
||||
$sinceIdCustomers = $history['retailcrm_history_customers'] ? $history['retailcrm_history_customers'] : null;
|
||||
|
||||
$packsOrders = $retailcrmApiClient->ordersHistory(array(
|
||||
'sinceId' => $sinceIdOrders ? $sinceIdOrders : 0
|
||||
), 1, 100);
|
||||
$packsCustomers = $retailcrmApiClient->customersHistory(array(
|
||||
'sinceId' => $sinceIdCustomers ? $sinceIdCustomers : 0
|
||||
), 1, 100);
|
||||
$sinceIdOrders = $history['retailcrm_history_orders'] ?? 0;
|
||||
$sinceIdCustomers = $history['retailcrm_history_customers'] ?? 0;
|
||||
$packsOrders = $retailcrmApiClient->ordersHistory(['sinceId' => $sinceIdOrders]);
|
||||
$packsCustomers = $retailcrmApiClient->customersHistory(['sinceId' => $sinceIdCustomers]);
|
||||
|
||||
if (!$packsOrders->isSuccessful() && count($packsOrders->history) <= 0
|
||||
&& !$packsCustomers->isSuccessful() && count($packsCustomers->history) <= 0
|
||||
|
@ -88,30 +83,28 @@ class ModelExtensionRetailcrmHistory extends Model {
|
|||
return false;
|
||||
}
|
||||
|
||||
$orders = RetailcrmHistoryHelper::assemblyOrder($packsOrders->history);
|
||||
$customers = RetailcrmHistoryHelper::assemblyCustomer($packsCustomers->history);
|
||||
|
||||
$ordersHistory = $packsOrders->history;
|
||||
$customersHistory = $packsCustomers->history;
|
||||
|
||||
$lastChangeOrders = $ordersHistory ? end($ordersHistory) : null;
|
||||
$lastChangeCustomers = $customersHistory ? end($customersHistory) : null;
|
||||
|
||||
if ($lastChangeOrders !== null) {
|
||||
$sinceIdOrders = $lastChangeOrders['id'];
|
||||
}
|
||||
|
||||
if ($lastChangeCustomers !== null) {
|
||||
$sinceIdCustomers = $lastChangeCustomers['id'];
|
||||
if ($lastChangeOrders !== null && $lastChangeCustomers !== null) {
|
||||
$this->model_setting_setting->editSetting(
|
||||
'retailcrm_history',
|
||||
[
|
||||
'retailcrm_history_orders' => $lastChangeOrders['id'],
|
||||
'retailcrm_history_customers' => $lastChangeCustomers['id']
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
$orders = RetailcrmHistoryHelper::assemblyOrder($ordersHistory);
|
||||
$customers = RetailcrmHistoryHelper::assemblyCustomer($customersHistory);
|
||||
$newOrders = [];
|
||||
$updatedOrders = [];
|
||||
$this->settings = $settings;
|
||||
|
||||
$this->status = array_flip($settings[$this->moduleTitle . '_status']);
|
||||
|
||||
$updatedOrders = array();
|
||||
$newOrders = array();
|
||||
|
||||
foreach ($orders as $order) {
|
||||
if (isset($order['deleted'])) {
|
||||
continue;
|
||||
|
@ -126,7 +119,7 @@ class ModelExtensionRetailcrmHistory extends Model {
|
|||
|
||||
unset($orders);
|
||||
|
||||
$updateCustomers = array();
|
||||
$updateCustomers = [];
|
||||
|
||||
foreach ($customers as $customer) {
|
||||
if (isset($customer['deleted'])) {
|
||||
|
@ -141,34 +134,27 @@ class ModelExtensionRetailcrmHistory extends Model {
|
|||
unset($customers);
|
||||
|
||||
if (!empty($updateCustomers)) {
|
||||
$customers = $retailcrmApiClient->customersList(array('ids' => $updateCustomers));
|
||||
$customers = $retailcrmApiClient->customersList(['ids' => $updateCustomers]);
|
||||
if ($customers) {
|
||||
$this->updateCustomers($customers['customers']);
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($newOrders)) {
|
||||
$orders = $retailcrmApiClient->ordersList(array('ids' => $newOrders));
|
||||
$orders = $retailcrmApiClient->ordersList(['ids' => $newOrders]);
|
||||
if ($orders) {
|
||||
$this->createResult = $this->createOrders($orders['orders'], $retailcrmApiClient);
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($updatedOrders)) {
|
||||
$orders = $retailcrmApiClient->ordersList(array('ids' => $updatedOrders));
|
||||
$orders = $retailcrmApiClient->ordersList(['ids' => $updatedOrders]);
|
||||
|
||||
if ($orders) {
|
||||
$this->updateOrders($orders['orders'], $retailcrmApiClient);
|
||||
}
|
||||
}
|
||||
|
||||
$this->model_setting_setting->editSetting(
|
||||
'retailcrm_history',
|
||||
array(
|
||||
'retailcrm_history_orders' => $sinceIdOrders,
|
||||
'retailcrm_history_customers' => $sinceIdCustomers
|
||||
)
|
||||
);
|
||||
|
||||
if (!empty($this->createResult['customers'])) {
|
||||
$retailcrmApiClient->customersFixExternalIds($this->createResult['customers']);
|
||||
}
|
||||
|
|
|
@ -15,13 +15,14 @@ class ModelExtensionRetailcrmIcml extends Model
|
|||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
*
|
||||
* @param Registry $registry
|
||||
*/
|
||||
public function __construct($registry)
|
||||
{
|
||||
parent::__construct($registry);
|
||||
$this->load->library('retailcrm/retailcrm');
|
||||
$this->load->model('localisation/weight_class');
|
||||
}
|
||||
|
||||
public function generateICML()
|
||||
|
@ -77,7 +78,7 @@ class ModelExtensionRetailcrmIcml extends Model
|
|||
*/
|
||||
private function addCategories()
|
||||
{
|
||||
$categories = $this->model_catalog_category->getCategories(array());
|
||||
$categories = $this->model_catalog_category->getCategories([]);
|
||||
foreach ($categories as $category) {
|
||||
$category = $this->model_catalog_category->getCategory($category['category_id']);
|
||||
|
||||
|
@ -102,11 +103,18 @@ class ModelExtensionRetailcrmIcml extends Model
|
|||
}
|
||||
|
||||
private function addOffers() {
|
||||
$offerManufacturers = array();
|
||||
$offerManufacturers = [];
|
||||
$servicesForIcml = $this->retailcrm->useServicesForIcml();
|
||||
$currencyForIcml = $this->retailcrm->getCurrencyForIcml();
|
||||
$defaultCurrency = $this->getDefaultCurrency();
|
||||
$settingLenght = $this->retailcrm->getLenghtForIcml();
|
||||
$leghtsArray = $this->model_localisation_length_class->getLengthClasses();
|
||||
$weightClassesMas = $this->model_localisation_weight_class->getWeightClasses();
|
||||
$weightClasses = [];
|
||||
|
||||
foreach ($weightClassesMas as $weightClass) {
|
||||
$weightClasses[$weightClass['weight_class_id']]['value'] = $weightClass['value'];
|
||||
}
|
||||
|
||||
foreach ($leghtsArray as $lenght) {
|
||||
if ($lenght['value'] == 1) {
|
||||
|
@ -115,20 +123,20 @@ class ModelExtensionRetailcrmIcml extends Model
|
|||
}
|
||||
|
||||
$manufacturers = $this->model_catalog_manufacturer
|
||||
->getManufacturers(array());
|
||||
->getManufacturers([]);
|
||||
|
||||
foreach ($manufacturers as $manufacturer) {
|
||||
$offerManufacturers[$manufacturer['manufacturer_id']] = $manufacturer['name'];
|
||||
}
|
||||
|
||||
$products = $this->model_catalog_product->getProducts(array());
|
||||
$products = $this->model_catalog_product->getProducts([]);
|
||||
|
||||
foreach ($products as $product) {
|
||||
$offers = $this->retailcrm->getOffers($product);
|
||||
|
||||
foreach ($offers as $optionsString => $optionsValues) {
|
||||
$optionsString = explode('_', $optionsString);
|
||||
$options = array();
|
||||
$options = [];
|
||||
|
||||
foreach($optionsString as $optionString) {
|
||||
$option = explode('-', $optionString);
|
||||
|
@ -143,35 +151,43 @@ class ModelExtensionRetailcrmIcml extends Model
|
|||
'value_id' => $option[1],
|
||||
'option_id' => $optionIds[1]
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ksort($options);
|
||||
|
||||
$offerId = array();
|
||||
$offerId = [];
|
||||
|
||||
foreach($options as $optionKey => $optionData) {
|
||||
$offerId[] = $optionKey.'-'.$optionData['value_id'];
|
||||
}
|
||||
|
||||
$offerId = implode('_', $offerId);
|
||||
$e = $this->eOffers->appendChild($this->dd->createElement('offer'));
|
||||
$catalog = $this->eOffers->appendChild($this->dd->createElement('offer'));
|
||||
|
||||
if (!empty($offerId)) {
|
||||
$e->setAttribute('id', $product['product_id'] . '#' . $offerId);
|
||||
$e->setAttribute('productId', $product['product_id']);
|
||||
$e->setAttribute('quantity', $optionsValues['qty']);
|
||||
$catalog->setAttribute('id', $product['product_id'] . '#' . $offerId);
|
||||
$catalog->setAttribute('productId', $product['product_id']);
|
||||
$catalog->setAttribute('quantity', $optionsValues['qty']);
|
||||
} else {
|
||||
$e->setAttribute('id', $product['product_id']);
|
||||
$e->setAttribute('productId', $product['product_id']);
|
||||
$e->setAttribute('quantity', $product['quantity']);
|
||||
$catalog->setAttribute('id', $product['product_id']);
|
||||
$catalog->setAttribute('productId', $product['product_id']);
|
||||
$catalog->setAttribute('quantity', $product['quantity']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set type for offers
|
||||
*/
|
||||
$useServices = $servicesForIcml && isset($product['shipping']) && $product['shipping'] == 0;
|
||||
|
||||
$catalog->setAttribute('type', $useServices ? 'service' : 'product');
|
||||
|
||||
/**
|
||||
* Offer activity
|
||||
*/
|
||||
$activity = $product['status'] == 1 ? 'Y' : 'N';
|
||||
$e->appendChild(
|
||||
$catalog->appendChild(
|
||||
$this->dd->createElement('productActivity')
|
||||
)->appendChild(
|
||||
$this->dd->createTextNode($activity)
|
||||
|
@ -183,7 +199,7 @@ class ModelExtensionRetailcrmIcml extends Model
|
|||
->getProductCategories($product['product_id']);
|
||||
if (!empty($categories)) {
|
||||
foreach ($categories as $category) {
|
||||
$e->appendChild($this->dd->createElement('categoryId'))
|
||||
$catalog->appendChild($this->dd->createElement('categoryId'))
|
||||
->appendChild(
|
||||
$this->dd->createTextNode($category)
|
||||
);
|
||||
|
@ -192,18 +208,18 @@ class ModelExtensionRetailcrmIcml extends Model
|
|||
/**
|
||||
* Name & price
|
||||
*/
|
||||
$e->appendChild($this->dd->createElement('productName'))
|
||||
$catalog->appendChild($this->dd->createElement('productName'))
|
||||
->appendChild($this->dd->createTextNode($product['name']));
|
||||
if (!empty($options)) {
|
||||
$optionsString = array();
|
||||
$optionsString = [];
|
||||
foreach($options as $option) {
|
||||
$optionsString[] = $option['name'].': '.$option['value'];
|
||||
}
|
||||
$optionsString = ' ('.implode(', ', $optionsString).')';
|
||||
$e->appendChild($this->dd->createElement('name'))
|
||||
$catalog->appendChild($this->dd->createElement('name'))
|
||||
->appendChild($this->dd->createTextNode($product['name'].$optionsString));
|
||||
} else {
|
||||
$e->appendChild($this->dd->createElement('name'))
|
||||
$catalog->appendChild($this->dd->createElement('name'))
|
||||
->appendChild($this->dd->createTextNode($product['name']));
|
||||
}
|
||||
|
||||
|
@ -217,13 +233,13 @@ class ModelExtensionRetailcrmIcml extends Model
|
|||
$price = $product['price'] + $optionsValues['price'];
|
||||
}
|
||||
|
||||
$e->appendChild($this->dd->createElement('price'))
|
||||
$catalog->appendChild($this->dd->createElement('price'))
|
||||
->appendChild($this->dd->createTextNode($price));
|
||||
/**
|
||||
* Vendor
|
||||
*/
|
||||
if ($product['manufacturer_id'] != 0) {
|
||||
$e->appendChild($this->dd->createElement('vendor'))
|
||||
$catalog->appendChild($this->dd->createElement('vendor'))
|
||||
->appendChild(
|
||||
$this->dd->createTextNode(
|
||||
$offerManufacturers[$product['manufacturer_id']]
|
||||
|
@ -264,7 +280,7 @@ class ModelExtensionRetailcrmIcml extends Model
|
|||
$productHeight
|
||||
);
|
||||
|
||||
$e->appendChild($this->dd->createElement('dimensions'))
|
||||
$catalog->appendChild($this->dd->createElement('dimensions'))
|
||||
->appendChild($this->dd->createTextNode($dimensions));
|
||||
}
|
||||
|
||||
|
@ -273,23 +289,20 @@ class ModelExtensionRetailcrmIcml extends Model
|
|||
*/
|
||||
if ($product['image']) {
|
||||
$image = $this->generateImage($product['image']);
|
||||
$e->appendChild($this->dd->createElement('picture'))
|
||||
$catalog->appendChild($this->dd->createElement('picture'))
|
||||
->appendChild($this->dd->createTextNode($image));
|
||||
}
|
||||
/**
|
||||
* Url
|
||||
*/
|
||||
$this->url = new Url(
|
||||
HTTP_CATALOG,
|
||||
$this->config->get('config_secure')
|
||||
? HTTP_CATALOG
|
||||
: HTTPS_CATALOG
|
||||
);
|
||||
$e->appendChild($this->dd->createElement('url'))
|
||||
$this->url = new Url(HTTP_CATALOG, HTTPS_CATALOG);
|
||||
$catalog->appendChild($this->dd->createElement('url'))
|
||||
->appendChild(
|
||||
$this->dd->createTextNode(
|
||||
$this->url->link(
|
||||
'product/product&product_id=' . $product['product_id']
|
||||
'product/product&product_id=' . $product['product_id'],
|
||||
'',
|
||||
(bool) $this->config->get('config_secure')
|
||||
)
|
||||
)
|
||||
);
|
||||
|
@ -301,7 +314,7 @@ class ModelExtensionRetailcrmIcml extends Model
|
|||
$param->setAttribute('code', $optionData['option_id']);
|
||||
$param->setAttribute('name', $optionData['name']);
|
||||
$param->appendChild($this->dd->createTextNode($optionData['value']));
|
||||
$e->appendChild($param);
|
||||
$catalog->appendChild($param);
|
||||
}
|
||||
}
|
||||
if ($product['sku']) {
|
||||
|
@ -309,20 +322,24 @@ class ModelExtensionRetailcrmIcml extends Model
|
|||
$sku->setAttribute('code', 'article');
|
||||
$sku->setAttribute('name', $this->language->get('article'));
|
||||
$sku->appendChild($this->dd->createTextNode($product['sku']));
|
||||
$e->appendChild($sku);
|
||||
$catalog->appendChild($sku);
|
||||
}
|
||||
if ($product['weight'] != '') {
|
||||
$weight = $this->dd->createElement('param');
|
||||
$weight->setAttribute('code', 'weight');
|
||||
$weight->setAttribute('name', $this->language->get('weight'));
|
||||
$weightValue = round($product['weight'] + $optionsValues['weight'], 3);
|
||||
$weight = $this->dd->createElement('weight');
|
||||
$coeffWeight = 1;
|
||||
|
||||
if (isset($product['weight_class'])) {
|
||||
$weightValue = $weightValue . ' ' . $product['weight_class'];
|
||||
if (!empty($weightClasses[$product['weight_class_id']]['value'])) {
|
||||
$coeffWeight = $weightClasses[$product['weight_class_id']]['value'];
|
||||
}
|
||||
|
||||
$weightValue = !empty($optionsValues['weight'])
|
||||
? $product['weight'] + $optionsValues['weight']
|
||||
: $product['weight']
|
||||
;
|
||||
$weightValue = round($weightValue / $coeffWeight, 6);
|
||||
|
||||
$weight->appendChild($this->dd->createTextNode($weightValue));
|
||||
$e->appendChild($weight);
|
||||
$catalog->appendChild($weight);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -335,7 +352,7 @@ class ModelExtensionRetailcrmIcml extends Model
|
|||
private function generateImage($image)
|
||||
{
|
||||
$this->load->model('tool/image');
|
||||
|
||||
|
||||
$currentTheme = $this->config->get('config_theme');
|
||||
$width = $this->config->get($currentTheme . '_image_related_width') ? $this->config->get($currentTheme . '_image_related_width') : 200;
|
||||
$height = $this->config->get($currentTheme . '_image_related_height') ? $this->config->get($currentTheme . '_image_related_height') : 200;
|
||||
|
|
|
@ -158,6 +158,22 @@ class ModelExtensionRetailcrmReferences extends Model
|
|||
return (!$response->isSuccessful()) ? array() : $response->deliveryTypes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get RetailCRM available sites list
|
||||
*/
|
||||
public function getApiSite()
|
||||
{
|
||||
$response = $this->retailcrmApiClient->sitesList();
|
||||
|
||||
if (!$response || !$response->isSuccessful()) {
|
||||
return [];
|
||||
}
|
||||
|
||||
$sites = $response->sites;
|
||||
|
||||
return end($sites);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get RetailCRM order statuses
|
||||
*
|
||||
|
|
|
@ -1,5 +1,11 @@
|
|||
.retailcrm_unit {margin-bottom: 10px;}
|
||||
.retailcrm_disable_border {border: none !important;}
|
||||
.retailcrm_unit input {width: 30%;}
|
||||
.checkbox input{width: auto;}
|
||||
.retailcrm_unit input[type=checkbox] {width: 13px;}
|
||||
.retailcrm_unit select {max-width: 500px;}
|
||||
.retailcrm_unit select {max-width: 500px;}
|
||||
|
||||
.question-mark {
|
||||
cursor: help;
|
||||
position: relative;
|
||||
}
|
|
@ -97,7 +97,22 @@
|
|||
</div>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<legend><?php echo $text_currency; ?></legend>
|
||||
<legend><?php echo $icml_settings; ?></legend>
|
||||
<div class="form-group retailcrm_unit">
|
||||
<label class="col-sm-2 control-label question-mark" for="retailcrm_icml_service_enabled" title="When the option is enabled, all products for which delivery is disabled will be considered as services and uploaded to CRM as services"><?php echo $icml_service_enabled_label; ?></label>
|
||||
<div class="col-sm-10">
|
||||
<label class="radio-inline">
|
||||
<input type="radio" name="retailcrm_icml_service_enabled value="1"
|
||||
<?php if(isset($saved_settings['retailcrm_icml_service_enabled']) && $saved_settings['retailcrm_icml_service_enabled'] == 1): echo 'checked'; endif;?>/>
|
||||
<?php echo $text_yes; ?>
|
||||
</label>
|
||||
<label class="radio-inline">
|
||||
<input type="radio" name="retailcrm_icml_service_enabled" value="0"
|
||||
<?php if(!isset($saved_settings['retailcrm_icml_service_enabled']) || $saved_settings['retailcrm_icml_service_enabled'] == 0): echo 'checked'; endif;?>/>
|
||||
<?php echo $text_no; ?>
|
||||
</label>
|
||||
</div>
|
||||
</div
|
||||
<div class="form-group retailcrm_unit">
|
||||
<label class="col-sm-2 control-label"><?php echo $text_currency; ?></label>
|
||||
<div class="col-md-4 col-sm-10">
|
||||
|
@ -112,9 +127,6 @@
|
|||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<legend><?php echo $text_lenght; ?></legend>
|
||||
<div class="form-group retailcrm_unit">
|
||||
<label class="col-sm-2 control-label"><?php echo $text_lenght_label; ?></label>
|
||||
<div class="col-md-4 col-sm-10">
|
||||
|
@ -213,6 +225,26 @@
|
|||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<legend><?php echo $summ_around; ?></legend>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label" for="retailcrm_summ_around"><?php echo $text_summ_around; ?></label>
|
||||
<div class="col-sm-10">
|
||||
<label class="radio-inline">
|
||||
<input type="radio" name="retailcrm_summ_around" value="1" <?php if (isset($saved_settings['retailcrm_summ_around']) &&
|
||||
$saved_settings['retailcrm_summ_around'] == 1) :
|
||||
echo 'checked'; endif; ?> />
|
||||
<?php echo $text_yes; ?>
|
||||
</label>
|
||||
<label class="radio-inline">
|
||||
<input type="radio" name="retailcrm_summ_around" value="0" <?php if (!isset($saved_settings['retailcrm_summ_around']) ||
|
||||
$saved_settings['retailcrm_summ_around'] == 0) :
|
||||
echo 'checked'; endif; ?> />
|
||||
<?php echo $text_no; ?>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<legend><?php echo $text_retailcrm_discount; ?></legend>
|
||||
<div class="form-group">
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
<button type="button" id="icml" data-toggle="tooltip" title="{{ text_button_catalog }}" class="btn btn-success"><i class="fa fa-file-text-o"></i></button>
|
||||
<button type="submit" form="form-module" data-toggle="tooltip" title="{{ button_save }}" class="btn btn-primary"><i class="fa fa-save"></i></button>
|
||||
<a href="{{ cancel }}" data-toggle="tooltip" title="{{ button_cancel }}" class="btn btn-default"><i class="fa fa-reply"></i></a></div>
|
||||
<h1>{{ heading_title }}</h1>
|
||||
<h1>{{ heading_title }} {{ module_version }}</h1>
|
||||
<ul class="breadcrumb">
|
||||
{% for breadcrumb in breadcrumbs %}
|
||||
<li><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li>
|
||||
|
@ -55,7 +55,7 @@
|
|||
<input class="form-control" id="retailcrm_url" type="text" name="module_retailcrm_url" value="{% if saved_settings.module_retailcrm_url is defined %}{{ saved_settings.module_retailcrm_url }}{% endif %}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group retailcrm_unit">
|
||||
<div class="form-group retailcrm_unit retailcrm_disable_border">
|
||||
<label class="col-sm-2 control-label" for="retailcrm_apikey">{{ retailcrm_apikey }}</label>
|
||||
<div class="col-lg-4 col-md-6 col-sm-10">
|
||||
<input class="form-control" id="retailcrm_apikey" type="text" name="module_retailcrm_apikey" value="{% if saved_settings.module_retailcrm_apikey is defined %}{{ saved_settings.module_retailcrm_apikey }}{% endif %}">
|
||||
|
@ -100,8 +100,27 @@
|
|||
</div>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<legend>{{ text_currency }}</legend>
|
||||
<div class="form-group retailcrm_unit">
|
||||
<legend>{{ icml_settings }}</legend>
|
||||
<div class="form-group retailcrm_unit retailcrm_disable_border">
|
||||
<label class="col-sm-2 control-label question-mark" for="module_retailcrm_icml_service_enabled" title="{{ icml_service_description }}">{{ icml_service_enabled_label }}</label>
|
||||
<div class="col-sm-10">
|
||||
<label class="radio-inline">
|
||||
<input type="radio" name="module_retailcrm_icml_service_enabled" value="1"
|
||||
{% if saved_settings.module_retailcrm_icml_service_enabled is defined and saved_settings.module_retailcrm_icml_service_enabled == 1 %}
|
||||
checked
|
||||
{% endif %} />
|
||||
{{ text_yes }}
|
||||
</label>
|
||||
<label class="radio-inline">
|
||||
<input type="radio" name="module_retailcrm_icml_service_enabled" value="0"
|
||||
{% if saved_settings.module_retailcrm_icml_service_enabled is not defined or saved_settings.module_retailcrm_icml_service_enabled == 0 %}
|
||||
checked
|
||||
{% endif %} />
|
||||
{{ text_no }}
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group retailcrm_unit retailcrm_disable_border">
|
||||
<label class="col-sm-2 control-label">{{ text_currency_label }}</label>
|
||||
<div class="col-md-4 col-sm-10">
|
||||
<select id="module_retailcrm_currency" name="module_retailcrm_currency" class="form-control">
|
||||
|
@ -115,17 +134,14 @@
|
|||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<legend>{{ text_lenght }}</legend>
|
||||
<div class="form-group retailcrm_unit">
|
||||
<div class="form-group retailcrm_unit retailcrm_disable_border">
|
||||
<label class="col-sm-2 control-label">{{ text_lenght_label }}</label>
|
||||
<div class="col-md-4 col-sm-10">
|
||||
<select id="module_retailcrm_lenght" name="module_retailcrm_lenght" class="form-control">
|
||||
{% for lenght in lenghts %}
|
||||
<option value="{{ lenght.length_class_id }}" {% if saved_settings.module_retailcrm_lenght is defined and saved_settings.module_retailcrm_lenght == lenght.length_class_id %} selected="selected" {% endif %}>
|
||||
{{ lenght.title }}
|
||||
</option>
|
||||
<option value="{{ lenght.length_class_id }}" {% if saved_settings.module_retailcrm_lenght is defined and saved_settings.module_retailcrm_lenght == lenght.length_class_id %} selected="selected" {% endif %}>
|
||||
{{ lenght.title }}
|
||||
</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
|
@ -220,6 +236,28 @@
|
|||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<legend>{{ summ_around }}</legend>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label" class="col-sm-2 control-label" for="module_retailcrm_summ_around">{{ text_summ_around }}</label>
|
||||
<div class="col-sm-10">
|
||||
<label class="control-label" class="radio-inline">
|
||||
<input type="radio" name="module_retailcrm_summ_around" value="1"
|
||||
{% if saved_settings.module_retailcrm_summ_around is defined and saved_settings.module_retailcrm_summ_around == 1 %}
|
||||
checked
|
||||
{% endif %} />
|
||||
{{ text_yes }}
|
||||
</label>
|
||||
<label class="control-label" class="radio-inline">
|
||||
<input type="radio" name="module_retailcrm_summ_around" value="0"
|
||||
{% if saved_settings.module_retailcrm_summ_around is not defined or saved_settings.module_retailcrm_summ_around == 0 %}
|
||||
checked
|
||||
{% endif %} />
|
||||
{{ text_no }}
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<legend>{{ text_retailcrm_discount }}</legend>
|
||||
<div class="form-group">
|
||||
|
|
|
@ -77,8 +77,8 @@ class ControllerApiRetailcrm extends Controller
|
|||
$address = array(
|
||||
'country_id' => $country_id,
|
||||
'zone_id' => $zone['zone_id'],
|
||||
'iso_code_2' => $country['iso_code_2'],
|
||||
'iso_code_3' => $country['iso_code_3'],
|
||||
'iso_code_2' => $country['iso_code_2'] ?? '',
|
||||
'iso_code_3' => $country['iso_code_3'] ?? '',
|
||||
'zone_code' => $zone['code'],
|
||||
'postcode' => '',
|
||||
'city' => ''
|
||||
|
|
|
@ -138,6 +138,20 @@ class ControllerExtensionModuleRetailcrm extends Controller {
|
|||
}
|
||||
}
|
||||
|
||||
public function customer_edit_newsletter($parameter1, $parameter2, $parameter3)
|
||||
{
|
||||
$customerId = $this->customer->getId();
|
||||
$customer = $this->model_account_customer->getCustomer($customerId);
|
||||
|
||||
if (file_exists(DIR_APPLICATION . 'model/extension/retailcrm/custom/customer.php')) {
|
||||
$this->load->model('extension/retailcrm/custom/customer');
|
||||
$this->model_extension_retailcrm_custom_customer->changeInCrm($customer, $this->retailcrmApiClient);
|
||||
} else {
|
||||
$customer_manager = $this->retailcrm->getCustomerManager();
|
||||
$customer_manager->editCustomerNewsLetter($customer);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update customer on event
|
||||
*
|
||||
|
|
|
@ -136,6 +136,12 @@ class ModelExtensionRetailcrmOrder extends Model {
|
|||
$order['number'] = $order_data['order_id'];
|
||||
}
|
||||
|
||||
if (isset($this->settings[$this->moduleTitle . '_summ_around'])
|
||||
&& $this->settings[$this->moduleTitle . '_summ_around'] == 1
|
||||
) {
|
||||
$order['applyRound'] = true;
|
||||
}
|
||||
|
||||
$order['externalId'] = $order_id;
|
||||
$order['firstName'] = $order_data['shipping_firstname'];
|
||||
$order['lastName'] = $order_data['shipping_lastname'];
|
||||
|
@ -265,28 +271,29 @@ class ModelExtensionRetailcrmOrder extends Model {
|
|||
if (isset($properties)) $item['properties'] = $properties;
|
||||
|
||||
$order['items'][] = $item;
|
||||
|
||||
if (isset($order_data['order_status_id']) && $order_data['order_status_id'] > 0) {
|
||||
$order['status'] = $this->settings[$this->moduleTitle . '_status'][$order_data['order_status_id']];
|
||||
} elseif (isset($order_data['order_status_id']) && $order_data['order_status_id'] == 0) {
|
||||
$order['status'] = $this->settings[$this->moduleTitle . '_missing_status'];
|
||||
}
|
||||
|
||||
if (isset($this->settings[$this->moduleTitle . '_custom_field']) && $order_data['custom_field']) {
|
||||
$customFields = $order_data['custom_field'];
|
||||
|
||||
foreach ($customFields as $key => $value) {
|
||||
if (isset($this->settings[$this->moduleTitle . '_custom_field']['o_' . $key])) {
|
||||
$customFieldsToCrm[$this->settings[$this->moduleTitle . '_custom_field']['o_' . $key]] = $value;
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($customFieldsToCrm)) {
|
||||
$order['customFields'] = $customFieldsToCrm;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (isset($order_data['order_status_id']) && $order_data['order_status_id'] > 0) {
|
||||
$order['status'] = $this->settings[$this->moduleTitle . '_status'][$order_data['order_status_id']];
|
||||
} elseif (isset($order_data['order_status_id']) && $order_data['order_status_id'] == 0) {
|
||||
$order['status'] = $this->settings[$this->moduleTitle . '_missing_status'];
|
||||
}
|
||||
|
||||
if (isset($this->settings[$this->moduleTitle . '_custom_field']) && $order_data['custom_field']) {
|
||||
$customFields = $order_data['custom_field'];
|
||||
|
||||
foreach ($customFields as $key => $value) {
|
||||
if (isset($this->settings[$this->moduleTitle . '_custom_field']['o_' . $key])) {
|
||||
$customFieldsToCrm[$this->settings[$this->moduleTitle . '_custom_field']['o_' . $key]] = $value;
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($customFieldsToCrm)) {
|
||||
$order['customFields'] = $customFieldsToCrm;
|
||||
}
|
||||
}
|
||||
|
||||
$payment = array(
|
||||
'externalId' => $order_id,
|
||||
'type' => $payment_code,
|
||||
|
@ -419,6 +426,7 @@ class ModelExtensionRetailcrmOrder extends Model {
|
|||
'lastName' => $data['lastname'],
|
||||
'email' => $data['email'],
|
||||
'createdAt' => $data['date_added'],
|
||||
'externalId' => $data['customer_id'],
|
||||
'address' => array(
|
||||
'countryIso' => $data['payment_iso_code_2'],
|
||||
'index' => $data['payment_postcode'],
|
||||
|
|
|
@ -31,7 +31,7 @@ class OpencartApiClient {
|
|||
|
||||
$cookies = array();
|
||||
foreach ($cookieFile as $line) {
|
||||
if (empty($line) OR $line{0} == '#') {
|
||||
if (empty($line) OR $line[0] == '#') {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
|
@ -584,30 +584,18 @@ class RetailcrmApiClient5
|
|||
|
||||
/**
|
||||
* Get orders history
|
||||
*
|
||||
* @param array $filter
|
||||
* @param null $page
|
||||
* @param null $limit
|
||||
* @param int|null $limit
|
||||
*
|
||||
* @return ApiResponse
|
||||
*/
|
||||
public function ordersHistory(array $filter = array(), $page = null, $limit = null)
|
||||
public function ordersHistory(array $filter = [], ?int $limit = 100)
|
||||
{
|
||||
$parameters = array();
|
||||
|
||||
if (count($filter)) {
|
||||
$parameters['filter'] = $filter;
|
||||
}
|
||||
if (null !== $page) {
|
||||
$parameters['page'] = (int) $page;
|
||||
}
|
||||
if (null !== $limit) {
|
||||
$parameters['limit'] = (int) $limit;
|
||||
}
|
||||
|
||||
return $this->client->makeRequest(
|
||||
'/orders/history',
|
||||
RetailcrmHttpClient::METHOD_GET,
|
||||
$parameters
|
||||
['filter' => $filter, 'limit' => $limit]
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -908,30 +896,18 @@ class RetailcrmApiClient5
|
|||
|
||||
/**
|
||||
* Get customers history
|
||||
*
|
||||
* @param array $filter
|
||||
* @param null $page
|
||||
* @param null $limit
|
||||
* @param int|null $limit
|
||||
*
|
||||
* @return ApiResponse
|
||||
*/
|
||||
public function customersHistory(array $filter = array(), $page = null, $limit = null)
|
||||
public function customersHistory(array $filter = [], ?int $limit = 100)
|
||||
{
|
||||
$parameters = array();
|
||||
|
||||
if (count($filter)) {
|
||||
$parameters['filter'] = $filter;
|
||||
}
|
||||
if (null !== $page) {
|
||||
$parameters['page'] = (int) $page;
|
||||
}
|
||||
if (null !== $limit) {
|
||||
$parameters['limit'] = (int) $limit;
|
||||
}
|
||||
|
||||
return $this->client->makeRequest(
|
||||
'/customers/history',
|
||||
RetailcrmHttpClient::METHOD_GET,
|
||||
$parameters
|
||||
['filter' => $filter, 'limit' => $limit]
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -1108,34 +1084,17 @@ class RetailcrmApiClient5
|
|||
/**
|
||||
* Get orders assembly history
|
||||
*
|
||||
* @param array $filter (default: array())
|
||||
* @param int $page (default: null)
|
||||
* @param int $limit (default: null)
|
||||
*
|
||||
* @throws \InvalidArgumentException
|
||||
* @throws \RetailCrm\Exception\CurlException
|
||||
* @throws \RetailCrm\Exception\InvalidJsonException
|
||||
* @param array $filter
|
||||
* @param int|null $limit
|
||||
*
|
||||
* @return ApiResponse
|
||||
*/
|
||||
public function ordersPacksHistory(array $filter = array(), $page = null, $limit = null)
|
||||
public function ordersPacksHistory(array $filter = [], ?int $limit = 100)
|
||||
{
|
||||
$parameters = array();
|
||||
|
||||
if (count($filter)) {
|
||||
$parameters['filter'] = $filter;
|
||||
}
|
||||
if (null !== $page) {
|
||||
$parameters['page'] = (int) $page;
|
||||
}
|
||||
if (null !== $limit) {
|
||||
$parameters['limit'] = (int) $limit;
|
||||
}
|
||||
|
||||
return $this->client->makeRequest(
|
||||
'/orders/packs/history',
|
||||
RetailcrmHttpClient::METHOD_GET,
|
||||
$parameters
|
||||
['filter' => $filter, 'limit' => $limit]
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -2452,30 +2411,18 @@ class RetailcrmApiClient5
|
|||
|
||||
/**
|
||||
* Get corporate customers history
|
||||
* @param array $filter
|
||||
* @param null $page
|
||||
* @param null $limit
|
||||
*
|
||||
* @return \ApiResponse
|
||||
* @param array $filter
|
||||
* @param int|null $limit
|
||||
*
|
||||
* @return ApiResponse
|
||||
*/
|
||||
public function customersCorporateHistory(array $filter = [], $page = null, $limit = null)
|
||||
public function customersCorporateHistory(array $filter = [], ?int $limit = 100)
|
||||
{
|
||||
$parameters = [];
|
||||
|
||||
if (count($filter)) {
|
||||
$parameters['filter'] = $filter;
|
||||
}
|
||||
if (null !== $page) {
|
||||
$parameters['page'] = (int) $page;
|
||||
}
|
||||
if (null !== $limit) {
|
||||
$parameters['limit'] = (int) $limit;
|
||||
}
|
||||
|
||||
return $this->client->makeRequest(
|
||||
'/customers-corporate/history',
|
||||
RetailcrmHttpClient::METHOD_GET,
|
||||
$parameters
|
||||
['filter' => $filter, 'limit' => $limit]
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
<?php
|
||||
|
||||
use retailcrm\Retailcrm;
|
||||
|
||||
class RetailcrmHttpClient
|
||||
{
|
||||
const METHOD_GET = 'GET';
|
||||
|
@ -46,9 +48,9 @@ class RetailcrmHttpClient
|
|||
public function makeRequest(
|
||||
$path,
|
||||
$method,
|
||||
array $parameters = array()
|
||||
array $parameters = []
|
||||
) {
|
||||
$allowedMethods = array(self::METHOD_GET, self::METHOD_POST);
|
||||
$allowedMethods = [self::METHOD_GET, self::METHOD_POST];
|
||||
|
||||
if (!in_array($method, $allowedMethods, false)) {
|
||||
throw new \InvalidArgumentException(
|
||||
|
@ -60,7 +62,16 @@ class RetailcrmHttpClient
|
|||
);
|
||||
}
|
||||
|
||||
$parameters = array_merge($this->defaultParameters, $parameters);
|
||||
|
||||
$parameters = self::METHOD_GET === $method
|
||||
? array_merge($this->defaultParameters, $parameters, [
|
||||
'cms_source' => 'OpenCart',
|
||||
'cms_version' => VERSION,
|
||||
'php_version' => function_exists('phpversion') ? phpversion() : '',
|
||||
'module_version' => Retailcrm::VERSION_MODULE,
|
||||
])
|
||||
: $parameters = array_merge($this->defaultParameters, $parameters);
|
||||
|
||||
|
||||
$url = $this->url . $path;
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
* @method ordersCreate($order, $site = null)
|
||||
* @method ordersEdit($order, $by = 'externalId', $site = null)
|
||||
* @method ordersGet($order, $by = 'externalId', $site = null)
|
||||
* @method ordersList($filter, $page, $limit)
|
||||
* @method ordersList(array $filter = [], $page = null, $limit = null)
|
||||
* @method customersCreate($customer, $site = null)
|
||||
* @method customersEdit($customer, $by = 'externalId', $site = null)
|
||||
* @method customersList(array $filter = [], $page = null, $limit = null)
|
||||
|
@ -27,16 +27,16 @@ class RetailcrmProxy {
|
|||
|
||||
public function __construct($url, $key) {
|
||||
$this->api = new RetailcrmApiClient5($url, $key);
|
||||
|
||||
$this->log = new \Log('retailcrm.log');
|
||||
}
|
||||
|
||||
public function __call($method, $arguments) {
|
||||
try {
|
||||
$response = call_user_func_array(array($this->api, $method), $arguments);
|
||||
$response = call_user_func_array([$this->api, $method], $arguments);
|
||||
|
||||
if (!$response->isSuccessful()) {
|
||||
$this->log->write(sprintf("[%s] %s", $method, $response->getErrorMsg()));
|
||||
|
||||
if (isset($response['errors'])) {
|
||||
$error = implode("\n", $response['errors']);
|
||||
$this->log->write($error . "\n");
|
||||
|
|
|
@ -38,10 +38,14 @@ class Customer {
|
|||
}
|
||||
|
||||
$customer_data['firstname'] = $customer['firstName'];
|
||||
$customer_data['lastname'] = isset($customer['lastName']) ? $customer['lastName'] : '';
|
||||
$customer_data['lastname'] = $customer['lastName'] ?? '';
|
||||
$customer_data['email'] = $customer['email'];
|
||||
$customer_data['telephone'] = $customer['phones'] ? $customer['phones'][0]['number'] : '';
|
||||
|
||||
if (!empty($customer['emailMarketingUnsubscribedAt'])) {
|
||||
$customer_data['newsletter'] = 0;
|
||||
}
|
||||
|
||||
$customer_data['affiliate'] = false;
|
||||
}
|
||||
|
||||
|
@ -109,7 +113,7 @@ class Customer {
|
|||
}
|
||||
}
|
||||
|
||||
$customer_data['custom_field'] = isset($custom_fields) ? $custom_fields : '';
|
||||
$customer_data['custom_field'] = $custom_fields ?? [];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -209,7 +209,7 @@ class Order {
|
|||
$shipping = explode('.', $data['shipping_code']);
|
||||
$shippingModule = $shipping[0];
|
||||
|
||||
if (isset($this->ocDelivery[$shippingModule][$data['shipping_code']]['title'])) {
|
||||
if (isset($this->oc_delivery[$shippingModule][$data['shipping_code']]['title'])) {
|
||||
$data['shipping_method'] = $this->oc_delivery[$shippingModule][$data['shipping_code']]['title'];
|
||||
} else {
|
||||
$data['shipping_method'] = $this->oc_delivery[$shippingModule]['title'];
|
||||
|
|
|
@ -124,6 +124,7 @@ class DataRepository extends \retailcrm\Base {
|
|||
* @return array
|
||||
*/
|
||||
public function getZoneByName($name) {
|
||||
$name = $this->db->escape($name);
|
||||
$query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "zone` WHERE name = '" . $name . "'");
|
||||
|
||||
return $query->row;
|
||||
|
|
|
@ -12,7 +12,7 @@ class CustomerManager {
|
|||
}
|
||||
|
||||
public function createCustomer($customer_data, $address) {
|
||||
$customer = $this->prepareCustomer($customer_data, $address);
|
||||
$customer = $this->prepareCustomer($customer_data, $address, !empty($customer_data['newsletter']));
|
||||
|
||||
$this->api->customersCreate($customer);
|
||||
}
|
||||
|
@ -23,13 +23,22 @@ class CustomerManager {
|
|||
$this->api->customersEdit($customer);
|
||||
}
|
||||
|
||||
public function editCustomerNewsLetter($customer_data) {
|
||||
$this->api->customersEdit(
|
||||
[
|
||||
'externalId' => $customer_data['customer_id'],
|
||||
'subscribed' => !empty($customer_data['newsletter']),
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
public function uploadCustomers($customers) {
|
||||
$this->api->customersUpload($customers);
|
||||
}
|
||||
|
||||
public function prepareCustomer($customer_data, $address) {
|
||||
public function prepareCustomer($customer_data, $address, $isSubscribed = null) {
|
||||
return $this->customer_converter
|
||||
->initCustomerData($customer_data, $address)
|
||||
->initCustomerData($customer_data, $address, $isSubscribed)
|
||||
->setCustomerData()
|
||||
->setAddress()
|
||||
->setCustomFields()
|
||||
|
|
|
@ -39,7 +39,10 @@ class OrderManager {
|
|||
public function createOrder($order_data, $order_products, $order_totals) {
|
||||
$order = $this->prepareOrder($order_data, $order_products, $order_totals);
|
||||
|
||||
if (!isset($order['customer'])) {
|
||||
if (!isset($order['customer'])
|
||||
|| (isset($order['customer']['externalId'])
|
||||
&& !$this->checkExistCustomer($order['customer']['externalId']))
|
||||
) {
|
||||
$customer = $this->customer_manager->getCustomerForOrder($order_data);
|
||||
if (!empty($customer)) {
|
||||
$order['customer'] = $customer;
|
||||
|
@ -152,7 +155,7 @@ class OrderManager {
|
|||
}
|
||||
|
||||
foreach ($order_info['payments'] as $payment_data) {
|
||||
if (isset($payment_data['externalId']) && $payment_data['externalId'] == $orderId) {
|
||||
if (isset($payment_data['externalId'])) {
|
||||
$payment = $payment_data;
|
||||
}
|
||||
}
|
||||
|
@ -167,4 +170,15 @@ class OrderManager {
|
|||
$this->api->ordersPaymentEdit($order_payment);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $customerExternalId Customer's external id
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
private function checkExistCustomer($customerExternalId) {
|
||||
$result = $this->api->customersGet($customerExternalId);
|
||||
|
||||
return $result && $result->isSuccessful() && $result->offsetExists('customer');
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,9 +4,9 @@ namespace retailcrm\service;
|
|||
|
||||
class RetailcrmCustomerConverter {
|
||||
protected $data;
|
||||
protected $customer_data = array();
|
||||
protected $address = array();
|
||||
|
||||
protected $customer_data = [];
|
||||
protected $address = [];
|
||||
protected $isSubscribed;
|
||||
protected $settingsManager;
|
||||
|
||||
public function __construct(
|
||||
|
@ -19,10 +19,11 @@ class RetailcrmCustomerConverter {
|
|||
return $this->data;
|
||||
}
|
||||
|
||||
public function initCustomerData($customer_data, $address) {
|
||||
$this->data = array();
|
||||
public function initCustomerData($customer_data, $address, $isSubscribed) {
|
||||
$this->data = [];
|
||||
$this->customer_data = $customer_data;
|
||||
$this->address = $address;
|
||||
$this->isSubscribed = $isSubscribed;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
@ -34,12 +35,12 @@ class RetailcrmCustomerConverter {
|
|||
$this->data['email'] = $this->customer_data['email'];
|
||||
$this->data['createdAt'] = $this->customer_data['date_added'];
|
||||
|
||||
if ($this->isSubscribed !== null) {
|
||||
$this->data['subscribed'] = $this->isSubscribed;
|
||||
}
|
||||
|
||||
if (!empty($this->customer_data['telephone'])) {
|
||||
$this->data['phones'] = array(
|
||||
array(
|
||||
'number' => $this->customer_data['telephone']
|
||||
)
|
||||
);
|
||||
$this->data['phones'] = [['number' => $this->customer_data['telephone']]];
|
||||
}
|
||||
|
||||
return $this;
|
||||
|
@ -47,13 +48,13 @@ class RetailcrmCustomerConverter {
|
|||
|
||||
public function setAddress() {
|
||||
if (!empty($this->address)) {
|
||||
$this->data['address'] = array(
|
||||
$this->data['address'] = [
|
||||
'index' => $this->address['postcode'],
|
||||
'countryIso' => $this->address['iso_code_2'],
|
||||
'region' => $this->address['zone'],
|
||||
'city' => $this->address['city'],
|
||||
'text' => $this->address['address_1'] . ' ' . $this->address['address_2']
|
||||
);
|
||||
];
|
||||
}
|
||||
|
||||
return $this;
|
||||
|
|
|
@ -43,12 +43,14 @@ class RetailcrmOrderConverter {
|
|||
$this->data['countryIso'] = $this->order_data['shipping_iso_code_2'];
|
||||
}
|
||||
|
||||
if ($this->settingsManager->getSetting('order_number')
|
||||
&& $this->settingsManager->getSetting('order_number') == 1
|
||||
) {
|
||||
if ($this->settingsManager->getSetting('order_number') == 1) {
|
||||
$this->data['number'] = $this->order_data['order_id'];
|
||||
}
|
||||
|
||||
if ($this->settingsManager->getSetting('summ_around') == 1) {
|
||||
$this->data['applyRound'] = true;
|
||||
}
|
||||
|
||||
$this->data['externalId'] = $this->order_data['order_id'];
|
||||
$this->data['firstName'] = $this->order_data['shipping_firstname'];
|
||||
$this->data['lastName'] = $this->order_data['shipping_lastname'];
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
<field id="cumulative_discount" group="customer">cumulativeDiscount</field>
|
||||
<field id="personal_discount" group="customer">personalDiscount</field>
|
||||
<field id="discount_card_number" group="customer">discountCardNumber</field>
|
||||
<field id="email_marketing_unsubscribed_at" group="customer">emailMarketingUnsubscribedAt</field>
|
||||
|
||||
<field id="address.index" group="customerAddress">index</field>
|
||||
<field id="address.country" group="customerAddress">country</field>
|
||||
|
|
|
@ -10,12 +10,13 @@ use retailcrm\factory\OrderConverterFactory;
|
|||
use retailcrm\factory\CustomerConverterFactory;
|
||||
use retailcrm\service\SettingsManager;
|
||||
|
||||
require_once 'bootstrap.php';
|
||||
require_once DIR_SYSTEM . 'library/retailcrm/bootstrap.php';
|
||||
|
||||
class Retailcrm {
|
||||
|
||||
const RETAILCRM_DISCOUNT = 'retailcrm_discount';
|
||||
const RETAILCRM_DISCOUNT_SORT_ORDER = 8;
|
||||
const VERSION_MODULE = '4.1.19';
|
||||
|
||||
protected $registry;
|
||||
|
||||
|
@ -242,6 +243,15 @@ class Retailcrm {
|
|||
return false;
|
||||
}
|
||||
|
||||
public function useServicesForIcml()
|
||||
{
|
||||
$this->load->model('setting/setting');
|
||||
|
||||
$setting = $this->model_setting_setting->getSetting($this->getModuleTitle());
|
||||
|
||||
return $setting['module_retailcrm_icml_service_enabled'] ?? false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return mixed
|
||||
*/
|
||||
|
|
|
@ -1,54 +0,0 @@
|
|||
<?php
|
||||
|
||||
class TestCase extends OpenCartTest {
|
||||
public function setUp() {
|
||||
parent::setUp();
|
||||
|
||||
$this->load->library('retailcrm/retailcrm');
|
||||
|
||||
$this->setSetting(
|
||||
$this->retailcrm->getModuleTitle(),
|
||||
array(
|
||||
$this->retailcrm->getModuleTitle() . '_apiversion' => 'v5',
|
||||
$this->retailcrm->getModuleTitle() . '_order_number' => 1,
|
||||
$this->retailcrm->getModuleTitle() . '_status' => array(
|
||||
1 => 'new'
|
||||
),
|
||||
$this->retailcrm->getModuleTitle() . '_delivery' => array(
|
||||
'flat.flat' => 'flat'
|
||||
),
|
||||
$this->retailcrm->getModuleTitle() . '_payment' => array(
|
||||
'cod' => 'cod'
|
||||
),
|
||||
$this->retailcrm->getModuleTitle() . '_special_1' => 'special1',
|
||||
$this->retailcrm->getModuleTitle() . '_special_2' => 'special2',
|
||||
$this->retailcrm->getModuleTitle() . '_special_3' => 'special3',
|
||||
$this->retailcrm->getModuleTitle() . '_collector' => array(
|
||||
'site_key' => 'RC-XXXXXXXXXX-X',
|
||||
'custom_form' => 1,
|
||||
'custom' => array(
|
||||
'name' => 'Name',
|
||||
'email' => 'Email',
|
||||
'phone' => 'Phone',
|
||||
),
|
||||
'form_capture' => 1,
|
||||
'period' => 1
|
||||
)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
protected function setSetting($code, $data, $store_id = 0) {
|
||||
$this->db->query("DELETE FROM `" . DB_PREFIX . "setting` WHERE store_id = '" . (int)$store_id . "' AND `code` = '" . $this->db->escape($code) . "'");
|
||||
|
||||
foreach ($data as $key => $value) {
|
||||
if (substr($key, 0, strlen($code)) == $code) {
|
||||
if (!is_array($value)) {
|
||||
$this->db->query("INSERT INTO " . DB_PREFIX . "setting SET store_id = '" . (int)$store_id . "', `code` = '" . $this->db->escape($code) . "', `key` = '" . $this->db->escape($key) . "', `value` = '" . $this->db->escape($value) . "'");
|
||||
} else {
|
||||
$this->db->query("INSERT INTO " . DB_PREFIX . "setting SET store_id = '" . (int)$store_id . "', `code` = '" . $this->db->escape($code) . "', `key` = '" . $this->db->escape($key) . "', `value` = '" . $this->db->escape(json_encode($value, true)) . "', serialized = '1'");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -7,6 +7,16 @@ class RoboFile extends \Robo\Tasks
|
|||
use \Robo\Task\Development\loadTasks;
|
||||
use \Robo\Common\TaskIO;
|
||||
|
||||
const OPENCART_DOWNLOAD_URL = [
|
||||
'3.0.1.2' => 'https://github.com/opencart/opencart/releases/download/3.0.1.2/3.0.1.2-opencart.zip',
|
||||
'3.0.2.0' => 'https://github.com/opencart/opencart/releases/download/3.0.2.0/3.0.2.0-OpenCart.zip',
|
||||
'3.0.3.4' => 'https://github.com/opencart/opencart/releases/download/3.0.3.4/opencart-3.0.3.4-core-pre.zip'
|
||||
];
|
||||
|
||||
const OPENCART_ROOT_DIR = [
|
||||
'3.0.3.4' => 'opencart-3.0.3.4/upload'
|
||||
];
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
|
@ -67,19 +77,21 @@ class RoboFile extends \Robo\Tasks
|
|||
}
|
||||
}
|
||||
|
||||
public function opencartSetup()
|
||||
public function opencartInstall()
|
||||
{
|
||||
$startUp = getenv('TEST_SUITE') === '2.3'
|
||||
? 'catalog/controller/startup/test_startup.php'
|
||||
: 'admin/controller/startup/test_startup.php';
|
||||
$startUpTo = getenv('TEST_SUITE') === '2.3'
|
||||
? 'catalog/controller/startup/test_startup.php'
|
||||
: 'admin/controller/startup/test_startup.php';
|
||||
$startUp = 'admin/controller/startup/test_startup.php';
|
||||
$startUpTo = 'admin/controller/startup/test_startup.php';
|
||||
$version = getenv('OPENCART');
|
||||
$ocZip = sprintf('/tmp/opencart-%s.zip', $version);
|
||||
|
||||
$this->taskDeleteDir($this->root_dir . 'www')->run();
|
||||
|
||||
file_put_contents($ocZip, file_get_contents($this->getOpencartDownloadUrl($version)));
|
||||
|
||||
$this->_exec(sprintf('unzip %s -d /tmp/opencart', $ocZip));
|
||||
$this->taskFileSystemStack()
|
||||
->mirror(
|
||||
$this->root_dir . 'vendor/opencart/opencart/upload',
|
||||
$this->getOpencartRootDir($version),
|
||||
$this->root_dir . 'www'
|
||||
)
|
||||
->copy(
|
||||
|
@ -93,13 +105,31 @@ class RoboFile extends \Robo\Tasks
|
|||
->chmod($this->root_dir . 'www', 0777, 0000, true)
|
||||
->run();
|
||||
|
||||
if (getenv('TEST_SUITE') === '3.0') {
|
||||
if (getenv('TEST_SUITE') === '3') {
|
||||
$this->taskFileSystemStack()->copy(
|
||||
$this->root_dir . 'vendor/beyondit/opencart-test-suite/src/upload/system/library/session/test.php',
|
||||
$this->root_dir . 'www/system/library/session/test.php'
|
||||
)->run();
|
||||
}
|
||||
|
||||
// Openbay was removed in 3.0.3.6
|
||||
// Unfortunately, those configs from test suite still require it.
|
||||
if (
|
||||
'3.0.3.4' === getenv('OPENCART') ||
|
||||
version_compare(getenv('OPENCART'), '3.0.3.6', '>=')
|
||||
) {
|
||||
$testConfigFile = $this->root_dir . 'www/system/config/test-config.php';
|
||||
$testStartupFile = $this->root_dir . 'www/' . $startUpTo;
|
||||
$testConfig = file_get_contents($testConfigFile);
|
||||
$testStartup = file_get_contents($testStartupFile);
|
||||
|
||||
$testConfig = str_ireplace("'openbay'", '', $testConfig);
|
||||
$testStartup = str_ireplace('$this->registry->set(\'openbay\', new Openbay($this->registry));', '', $testStartup);
|
||||
|
||||
file_put_contents($testConfigFile, $testConfig);
|
||||
file_put_contents($testStartupFile, $testStartup);
|
||||
}
|
||||
|
||||
// Create new database, drop if exists already
|
||||
try {
|
||||
$conn = new PDO("mysql:host=".$this->opencart_config['db_hostname'], $this->opencart_config['db_username'], $this->opencart_config['db_password']);
|
||||
|
@ -192,13 +222,31 @@ EOF;
|
|||
$zip->close();
|
||||
}
|
||||
|
||||
private function getOpencartDownloadUrl(string $version): string
|
||||
{
|
||||
if (version_compare($version, '3.0.1.1', '<=')) {
|
||||
return sprintf('https://github.com/opencart/opencart/releases/download/%s/%s-compiled.zip', $version, $version);
|
||||
}
|
||||
|
||||
if (array_key_exists($version, self::OPENCART_DOWNLOAD_URL)) {
|
||||
return self::OPENCART_DOWNLOAD_URL[$version];
|
||||
}
|
||||
|
||||
return sprintf('https://github.com/opencart/opencart/releases/download/%s/opencart-%s.zip', $version, $version);
|
||||
}
|
||||
|
||||
private function getOpencartRootDir(string $version): string
|
||||
{
|
||||
if (array_key_exists($version, self::OPENCART_ROOT_DIR)) {
|
||||
return '/tmp/opencart/' . self::OPENCART_ROOT_DIR[$version];
|
||||
}
|
||||
|
||||
return '/tmp/opencart/upload';
|
||||
}
|
||||
|
||||
private function restoreSampleData($conn)
|
||||
{
|
||||
if (getenv('TEST_SUITE') === '2.3') {
|
||||
$sql = file_get_contents($this->root_dir . 'tests/opencart_sample_data.sql');
|
||||
} else {
|
||||
$sql = file_get_contents($this->root_dir . 'tests/opencart_sample_data_3.sql');
|
||||
}
|
||||
$sql = file_get_contents($this->root_dir . 'tests/opencart_sample_data_3.sql');
|
||||
|
||||
$conn->exec("USE " . $this->opencart_config['db_database']);
|
||||
|
||||
|
|
|
@ -41,4 +41,63 @@ class ControllerRetailcrmAdminTest extends TestCase
|
|||
$response = $this->dispatchAction('extension/module/retailcrm/uninstall_collector');
|
||||
$this->assertRegExp('/Connection settings/', $response->getOutput());
|
||||
}
|
||||
|
||||
public function testGetAvailableTypes()
|
||||
{
|
||||
$data = $this->getDataForTestAvailableTypes();
|
||||
$sites = end($data['site']);
|
||||
$types = $data['types'];
|
||||
|
||||
$retailCrm = new ControllerExtensionModuleRetailcrm(self::$registry);
|
||||
$class = new ReflectionClass($retailCrm);
|
||||
$method = $class->getMethod('getAvailableTypes');
|
||||
$method->setAccessible(true);
|
||||
|
||||
$result = $method->invokeArgs($retailCrm, [$sites, $types]);
|
||||
|
||||
$this->assertNotEmpty($result['opencart']);
|
||||
$this->assertNotEmpty($result['retailcrm']);
|
||||
$this->assertCount(2, $result['retailcrm']);
|
||||
$this->assertNotEmpty($result['retailcrm']['test1']['code']);
|
||||
$this->assertNotEmpty($result['retailcrm']['test4']['code']);
|
||||
}
|
||||
|
||||
private function getDataForTestAvailableTypes(): array
|
||||
{
|
||||
return [
|
||||
'site' => [
|
||||
'opencart' => [
|
||||
'code' => 'opencart',
|
||||
'name' => 'OpenCart'
|
||||
]
|
||||
],
|
||||
'types' => [
|
||||
'opencart' => [
|
||||
'test'
|
||||
],
|
||||
'retailcrm' => [
|
||||
'test1' => [
|
||||
'active' => true,
|
||||
'sites' => [],
|
||||
'code' => 'test1'
|
||||
],
|
||||
'test2' => [
|
||||
'active' => false,
|
||||
'sites' => [],
|
||||
'code' => 'test2'
|
||||
],
|
||||
'test3' => [
|
||||
'active' => true,
|
||||
'sites' => ['otherSite'],
|
||||
'code' => 'test3'
|
||||
],
|
||||
'test4' => [
|
||||
'active' => true,
|
||||
'sites' => ['cms1', 'cms2', 'opencart'],
|
||||
'code' => 'test4'
|
||||
]
|
||||
]
|
||||
]
|
||||
];
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,12 +10,7 @@ class ModelRetailcrmEventAdminTest extends TestCase
|
|||
{
|
||||
parent::setUp();
|
||||
|
||||
if (getenv('TEST_SUITE') === '3.0') {
|
||||
$eventModel = $this->loadModel('setting/event');
|
||||
} else {
|
||||
$eventModel = $this->loadModel('extension/event');
|
||||
}
|
||||
|
||||
$eventModel = $this->loadModel('setting/event');
|
||||
$eventModel->addEvent(self::CODE, 'test', 'test');
|
||||
}
|
||||
|
||||
|
|
|
@ -1,58 +0,0 @@
|
|||
TRUNCATE TABLE `oc_customer`;
|
||||
INSERT INTO `oc_customer` (`customer_id`, `customer_group_id`, `store_id`, `language_id`, `firstname`, `lastname`, `email`, `telephone`, `fax`, `password`, `salt`, `cart`, `wishlist`, `newsletter`, `address_id`, `custom_field`, `ip`, `status`, `approved`, `safe`, `token`, `code`, `date_added`) VALUES ('1', '1', '0', '1', 'Test', 'Test', 'test@mail.ru', '+7 (000) 000-00-00', '', 'ed3798da75d6cdd695e99e87a60d587a10aa95ff', '51TalnrgH', '', '', '0', '1', '', '172.21.0.1', '1', '1', '0', '', '', '2018-06-07 13:50:08');
|
||||
|
||||
TRUNCATE TABLE `oc_address`;
|
||||
INSERT INTO `oc_address` (`address_id`, `customer_id`, `firstname`, `lastname`, `company`, `address_1`, `address_2`, `city`, `postcode`, `country_id`, `zone_id`, `custom_field`) values (1, 1, 'Test', 'Test', '', 'Address 1', '', 'City', '111111', '176', '99', '');
|
||||
|
||||
TRUNCATE TABLE `oc_customer_activity`;
|
||||
TRUNCATE TABLE `oc_customer_group`;
|
||||
INSERT INTO `oc_customer_group` (`customer_group_id`, `approval`, `sort_order`) VALUES ('1', '0', '1');
|
||||
INSERT INTO `oc_customer_group` (`customer_group_id`, `approval`, `sort_order`) VALUES ('2', '0', '1');
|
||||
INSERT INTO `oc_customer_group` (`customer_group_id`, `approval`, `sort_order`) VALUES ('3', '0', '0');
|
||||
|
||||
TRUNCATE TABLE `oc_customer_group_description`;
|
||||
INSERT INTO `oc_customer_group_description` (`customer_group_id`, `language_id`, `name`, `description`) VALUES ('1', '1', 'Default', 'test');
|
||||
INSERT INTO `oc_customer_group_description` (`customer_group_id`, `language_id`, `name`, `description`) VALUES ('2', '1', 'Test2', 'test2');
|
||||
INSERT INTO `oc_customer_group_description` (`customer_group_id`, `language_id`, `name`, `description`) VALUES ('3', '1', 'test3', 'test3');
|
||||
|
||||
TRUNCATE TABLE `oc_customer_history`;
|
||||
TRUNCATE TABLE `oc_customer_ip`;
|
||||
INSERT INTO `oc_customer_ip` (`customer_ip_id`, `customer_id`, `ip`, `date_added`) VALUES ('4', '1', '172.21.0.1', '2018-06-07 13:50:29');
|
||||
|
||||
TRUNCATE TABLE `oc_customer_login`;
|
||||
TRUNCATE TABLE `oc_customer_online`;
|
||||
TRUNCATE TABLE `oc_customer_reward`;
|
||||
TRUNCATE TABLE `oc_customer_search`;
|
||||
TRUNCATE TABLE `oc_customer_transaction`;
|
||||
TRUNCATE TABLE `oc_customer_wishlist`;
|
||||
TRUNCATE TABLE `oc_order`;
|
||||
|
||||
INSERT INTO `oc_order` (`order_id`, `invoice_no`, `invoice_prefix`, `store_id`, `store_name`, `store_url`, `customer_id`, `customer_group_id`, `firstname`, `lastname`, `email`, `telephone`, `fax`, `custom_field`, `payment_firstname`, `payment_lastname`, `payment_company`, `payment_address_1`, `payment_address_2`, `payment_city`, `payment_postcode`, `payment_country`, `payment_country_id`, `payment_zone`, `payment_zone_id`, `payment_address_format`, `payment_custom_field`, `payment_method`, `payment_code`, `shipping_firstname`, `shipping_lastname`, `shipping_company`, `shipping_address_1`, `shipping_address_2`, `shipping_city`, `shipping_postcode`, `shipping_country`, `shipping_country_id`, `shipping_zone`, `shipping_zone_id`, `shipping_address_format`, `shipping_custom_field`, `shipping_method`, `shipping_code`, `comment`, `total`, `order_status_id`, `affiliate_id`, `commission`, `marketing_id`, `tracking`, `language_id`, `currency_id`, `currency_code`, `currency_value`, `ip`, `forwarded_ip`, `user_agent`, `accept_language`, `date_added`, `date_modified`) VALUES ('1', '0', 'INV-2016-00', '0', 'Opencart', 'http://localhost:8000/', '1', '1', 'Test', 'Test', 'test@mail.ru', '+7 (000) 000-00-00', '', '', 'Test', 'Test', '', 'Address', 'Address 2', 'Test', '111111', 'Russian Federation', '176', 'Rostov-na-Donu', '99', '', '[]', 'Cash on delivery', 'cod', 'Test', 'Test', '', 'Address', 'Address 2', 'Test', '111111', 'Russian Federation', '176', 'Rostov-na-Donu', '99', '', '[]', 'Flat Rate', 'flat.flat', 'test comment', '106.0000', '1', '0', '0.0000', '0', '', '1', '1', 'USD', '1.00000000', '172.21.0.1', '', 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36', 'ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7', '2018-06-07 13:51:10', '2018-06-07 13:51:23');
|
||||
INSERT INTO `oc_order` (`order_id`, `invoice_no`, `invoice_prefix`, `store_id`, `store_name`, `store_url`, `customer_id`, `customer_group_id`, `firstname`, `lastname`, `email`, `telephone`, `fax`, `custom_field`, `payment_firstname`, `payment_lastname`, `payment_company`, `payment_address_1`, `payment_address_2`, `payment_city`, `payment_postcode`, `payment_country`, `payment_country_id`, `payment_zone`, `payment_zone_id`, `payment_address_format`, `payment_custom_field`, `payment_method`, `payment_code`, `shipping_firstname`, `shipping_lastname`, `shipping_company`, `shipping_address_1`, `shipping_address_2`, `shipping_city`, `shipping_postcode`, `shipping_country`, `shipping_country_id`, `shipping_zone`, `shipping_zone_id`, `shipping_address_format`, `shipping_custom_field`, `shipping_method`, `shipping_code`, `comment`, `total`, `order_status_id`, `affiliate_id`, `commission`, `marketing_id`, `tracking`, `language_id`, `currency_id`, `currency_code`, `currency_value`, `ip`, `forwarded_ip`, `user_agent`, `accept_language`, `date_added`, `date_modified`) VALUES ('2', '0', 'INV-2016-00', '0', 'Opencart', 'http://localhost:8000/', '0', '1', 'Test', 'Test', 'test@mail.ru', '+7 (000) 000-00-00', '', '[]', 'Test', 'Test', '', 'Address', 'Address 2', 'Test', '111111', 'Russian Federation', '176', 'Rostov-na-Donu', '99', '', '[]', 'Cash on delivery', 'cod', 'Test', 'Test', '', 'Address', 'Address 2', 'Test', '111111', 'Russian Federation', '176', 'Rostov-na-Donu', '99', '', '[]', 'Flat Rate', 'flat.flat', 'test comment', '85.0000', '1', '0', '0.0000', '0', '', '1', '1', 'USD', '1.00000000', '172.21.0.1', '', 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36', 'ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7', '2018-06-07 13:53:50', '2018-06-07 13:54:00');
|
||||
|
||||
TRUNCATE TABLE `oc_order_history`;
|
||||
INSERT INTO `oc_order_history` (`order_history_id`, `order_id`, `order_status_id`, `notify`, `comment`, `date_added`) VALUES ('19', '2', '1', '0', '', '2018-06-07 13:54:00');
|
||||
INSERT INTO `oc_order_history` (`order_history_id`, `order_id`, `order_status_id`, `notify`, `comment`, `date_added`) VALUES ('18', '1', '1', '0', '', '2018-06-07 13:51:23');
|
||||
|
||||
TRUNCATE TABLE `oc_order_option`;
|
||||
|
||||
INSERT INTO `oc_order_option` (`order_option_id`, `order_id`, `order_product_id`, `product_option_id`, `product_option_value_id`, `name`, `value`, `type`) VALUES ('15', '2', '55', '226', '15', 'Select', 'Red', 'select');
|
||||
|
||||
TRUNCATE TABLE `oc_order_product`;
|
||||
INSERT INTO `oc_order_product` (`order_product_id`, `order_id`, `product_id`, `name`, `model`, `quantity`, `price`, `total`, `tax`, `reward`) VALUES ('54', '1', '40', 'iPhone', 'product 11', '1', '101.0000', '101.0000', '18.0000', '20');
|
||||
INSERT INTO `oc_order_product` (`order_product_id`, `order_id`, `product_id`, `name`, `model`, `quantity`, `price`, `total`, `tax`, `reward`) VALUES ('55', '2', '30', 'Canon EOS 5D', 'Product 3', '1', '80.0000', '80.0000', '18.0000', '200');
|
||||
|
||||
TRUNCATE TABLE `oc_order_recurring`;
|
||||
TRUNCATE TABLE `oc_order_recurring_transaction`;
|
||||
TRUNCATE TABLE `oc_order_total`;
|
||||
|
||||
INSERT INTO `oc_order_total` (`order_total_id`, `order_id`, `code`, `title`, `value`, `sort_order`) VALUES ('162', '1', 'shipping', 'Flat Rate', '5.0000', '3');
|
||||
INSERT INTO `oc_order_total` (`order_total_id`, `order_id`, `code`, `title`, `value`, `sort_order`) VALUES ('161', '1', 'sub_total', 'Sub-Total', '101.0000', '1');
|
||||
INSERT INTO `oc_order_total` (`order_total_id`, `order_id`, `code`, `title`, `value`, `sort_order`) VALUES ('164', '2', 'sub_total', 'Sub-Total', '80.0000', '1');
|
||||
INSERT INTO `oc_order_total` (`order_total_id`, `order_id`, `code`, `title`, `value`, `sort_order`) VALUES ('165', '2', 'shipping', 'Flat Rate', '5.0000', '3');
|
||||
INSERT INTO `oc_order_total` (`order_total_id`, `order_id`, `code`, `title`, `value`, `sort_order`) VALUES ('163', '1', 'total', 'Total', '106.0000', '9');
|
||||
INSERT INTO `oc_order_total` (`order_total_id`, `order_id`, `code`, `title`, `value`, `sort_order`) VALUES ('166', '2', 'total', 'Total', '85.0000', '9');
|
||||
INSERT INTO `oc_product_special` (`product_id`, `customer_group_id`, `priority`, `price`,`date_start`, `date_end`) values ('42', '2', '1', '110.000', CURDATE(), ADDDATE(CURDATE(),INTERVAL 10 DAY));
|
||||
INSERT INTO `oc_product_special` (`product_id`, `customer_group_id`, `priority`, `price`,`date_start`, `date_end`) values ('40', '1', '1', '50.000', CURDATE(), ADDDATE(CURDATE(),INTERVAL 10 DAY));
|
||||
|
||||
TRUNCATE TABLE `oc_order_voucher`;
|
|
@ -19,6 +19,8 @@ class DataRepositoryAdminTest extends TestCase {
|
|||
|
||||
$this->assertNotEmpty($zone);
|
||||
$this->assertNotEmpty($zone['zone_id']);
|
||||
|
||||
$repository->getZoneByName('Rostov-na-Do\'nu');
|
||||
}
|
||||
|
||||
public function testGetCurrencyByCode() {
|
||||
|
|
|
@ -10,11 +10,32 @@ class OrderManagerTest extends TestCase {
|
|||
public function testCreateOrderWithCustomer() {
|
||||
$proxy = $this->getMockBuilder(\RetailcrmProxy::class)
|
||||
->disableOriginalConstructor()
|
||||
->setMethods(['ordersCreate'])
|
||||
->setMethods(['ordersCreate','customersGet'])
|
||||
->getMock();
|
||||
|
||||
$proxy->expects($this->once())->method('ordersCreate');
|
||||
|
||||
$proxy->expects($this->once())
|
||||
->method('customersGet')
|
||||
->willReturn(new \RetailcrmApiResponse(
|
||||
200,
|
||||
json_encode(
|
||||
[
|
||||
'success' => true,
|
||||
'pagination' => [
|
||||
'limit'=> 20,
|
||||
'totalCount' => 0,
|
||||
'currentPage' => 1,
|
||||
'totalPageCount' => 0
|
||||
],
|
||||
'customer' => [
|
||||
'id' => 1,
|
||||
'externalId' => 1
|
||||
]
|
||||
]
|
||||
)
|
||||
));
|
||||
|
||||
$order_manager = $this->getOrderManager($proxy);
|
||||
|
||||
$orderCheckoutModel = $this->loadModel('checkout/order');
|
||||
|
|
|
@ -11,7 +11,7 @@ class RetailcrmCustomerConverterTest extends TestCase {
|
|||
$customer_data = $model->getCustomer(1);
|
||||
|
||||
$customer = $converter
|
||||
->initCustomerData($customer_data, array())
|
||||
->initCustomerData($customer_data, [], true)
|
||||
->setCustomerData()
|
||||
->getCustomer();
|
||||
|
||||
|
@ -20,23 +20,24 @@ class RetailcrmCustomerConverterTest extends TestCase {
|
|||
$this->assertEquals($customer_data['lastname'], $customer['lastName']);
|
||||
$this->assertEquals($customer_data['email'], $customer['email']);
|
||||
$this->assertEquals($customer_data['date_added'], $customer['createdAt']);
|
||||
$this->assertTrue($customer['subscribed']);
|
||||
}
|
||||
|
||||
public function testSetAddress() {
|
||||
$converter = \retailcrm\factory\CustomerConverterFactory::create(static::$registry);
|
||||
$model = $this->loadModel('account/customer');
|
||||
$customer_data = $model->getCustomer(static::CUSTOMER_ID);
|
||||
$address = array(
|
||||
$address = [
|
||||
'postcode' => '111111',
|
||||
'iso_code_2' => 'EN',
|
||||
'zone' => 'Zone',
|
||||
'city' => 'City',
|
||||
'address_1' => 'Address',
|
||||
'address_2' => ''
|
||||
);
|
||||
];
|
||||
|
||||
$customer = $converter
|
||||
->initCustomerData($customer_data, $address)
|
||||
->initCustomerData($customer_data, $address, null)
|
||||
->setAddress()
|
||||
->getCustomer();
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue