mirror of
https://github.com/retailcrm/opencart-module.git
synced 2024-11-21 20:56:07 +03:00
Tests
This commit is contained in:
parent
65459af91b
commit
c454db172f
5
.gitignore
vendored
5
.gitignore
vendored
@ -3,4 +3,7 @@
|
|||||||
*.settings
|
*.settings
|
||||||
*.buildpath
|
*.buildpath
|
||||||
*.project
|
*.project
|
||||||
|
/vendor
|
||||||
|
/www
|
||||||
|
/bin
|
||||||
|
.env
|
||||||
|
45
.travis.yml
Normal file
45
.travis.yml
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
language: php
|
||||||
|
|
||||||
|
sudo: false
|
||||||
|
|
||||||
|
php:
|
||||||
|
- 5.4
|
||||||
|
- 5.5
|
||||||
|
- 5.6
|
||||||
|
- 7.0
|
||||||
|
- 7.1
|
||||||
|
- 7.2
|
||||||
|
|
||||||
|
env:
|
||||||
|
- OC_DB_HOSTNAME=localhost
|
||||||
|
- OC_DB_USERNAME=root
|
||||||
|
- OC_DB_PASSWORD=root
|
||||||
|
- OC_DB_DATABASE=tests_opencart
|
||||||
|
- OC_DB_DRIVER=mysqli
|
||||||
|
- OC_USERNAME=admin
|
||||||
|
- OC_PASSWORD=admin
|
||||||
|
- OC_EMAIL=you@example.com
|
||||||
|
- SERVER_PORT=8000
|
||||||
|
- SERVER_URL=http://localhost
|
||||||
|
|
||||||
|
before_script:
|
||||||
|
# Change MySQL root password
|
||||||
|
- echo "USE mysql;\nUPDATE user SET password=PASSWORD('root') WHERE user='root';\nFLUSH PRIVILEGES;\n" | mysql -u root
|
||||||
|
|
||||||
|
- composer install
|
||||||
|
- composer setup
|
||||||
|
- bin/robo project:deploy
|
||||||
|
- (php -S localhost:8000 -t www &) 2> /dev/null > /dev/null
|
||||||
|
- sleep 2
|
||||||
|
|
||||||
|
script:
|
||||||
|
- composer test
|
||||||
|
|
||||||
|
deploy:
|
||||||
|
skip_cleanup: true
|
||||||
|
provider: script
|
||||||
|
script: make
|
||||||
|
on:
|
||||||
|
php: 7.2
|
||||||
|
branch: master
|
||||||
|
condition: "$DEPLOY = true"
|
2
LICENSE
2
LICENSE
@ -18,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
THE SOFTWARE.
|
THE SOFTWARE
|
67
README.md
67
README.md
@ -1,57 +1,26 @@
|
|||||||
Opencart module
|
# OpenCart Project Template
|
||||||
===============
|
|
||||||
|
|
||||||
Module allows integrate CMS Opencart >= 2.3 with [retailCRM](http://retailcrm.pro)
|
## Getting Started
|
||||||
|
|
||||||
### Previous versions:
|
1. Create a new project: `composer create-project beyondit/opencart-project-template ./my/project/folder -s dev`
|
||||||
|
2. Copy the `.env.sample` file to `.env` and set the configuration parameters respectively
|
||||||
|
3. Run `bin/robo opencart:setup` and afterwards `bin/robo opencart:run` on command line (`bin/robo opencart:run &` to run in background)
|
||||||
|
4. Open `http://localhost:8000` in your browser
|
||||||
|
|
||||||
[v1.x](https://github.com/retailcrm/opencart-module/tree/v1.x)
|
## Robo Commands
|
||||||
|
|
||||||
[v2.x (2.0, 2.1, 2.2)](https://github.com/retailcrm/opencart-module/tree/v2.2)
|
* `bin/robo opencart:setup` : Install OpenCart with configuration set in `.env` file
|
||||||
|
* `bin/robo opencart:run` : Run OpenCart on a php build-in web server on port 8000
|
||||||
|
* `bin/robo project:deploy` : Mirror contents of the src folder to the OpenCart test environment
|
||||||
|
* `bin/robo project:watch` : Redeploy after changes inside the src/ folder or the composer.json file
|
||||||
|
* `bin/robo project:package`: Package a `build.ocmod.zip` inside the target/ folder
|
||||||
|
|
||||||
|
## Writing Tests
|
||||||
|
|
||||||
|
* Based on the [OpenCart Testing Suite](https://github.com/beyondit/opencart-test-suite) project tests can be written.
|
||||||
|
* After successful setup and deployment, tests can be executed by running the `bin/phpunit` command.
|
||||||
|
* Two examples inside the `/tests` folder are given, which can be executed as separat Testsuites by `bin/phpunit --testsuite admin-tests` or `bin/phpunit --testsuite catalog-tests`
|
||||||
|
|
||||||
#### Features:
|
|
||||||
|
|
||||||
* Export orders to retailCRM & fetch changes back
|
|
||||||
* Export product catalog into [ICML](http://www.retailcrm.pro/docs/Developers/ICML) format
|
|
||||||
|
|
||||||
#### Install
|
|
||||||
|
|
||||||
Copy files to the site root
|
|
||||||
|
|
||||||
```
|
|
||||||
unzip master.zip
|
|
||||||
cp -r opencart-module/* /path/to/site/root
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Setup
|
|
||||||
|
|
||||||
* Go to Admin -> Extensions -> Modules -> retailCRM
|
|
||||||
* Fill you api url & api key
|
|
||||||
* Specify directories matching
|
|
||||||
|
|
||||||
#### Getting changes in orders
|
|
||||||
|
|
||||||
Add to cron:
|
|
||||||
|
|
||||||
```
|
|
||||||
*/5 * * * * /usr/bin/php /path/to/opencart/system/cron/history.php >> /path/to/opencart/system/storage/logs/cronjob_history.log 2>&1
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Setting product catalog export
|
|
||||||
|
|
||||||
Add to cron:
|
|
||||||
|
|
||||||
```
|
|
||||||
* */4 * * * /usr/bin/php /path/to/opencart/system/cron/icml.php >> /path/to/opencart/system/storage/logs/cronjob_icml.log 2>&1
|
|
||||||
```
|
|
||||||
|
|
||||||
Your export file will be available by following url
|
|
||||||
|
|
||||||
```
|
|
||||||
http://youropencartsite.com/retailcrm.xml
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Export existing orders and customers
|
|
||||||
|
|
||||||
You want to run this command onecly:
|
|
||||||
/usr/bin/php /path/to/opencart/system/cron/export.php
|
|
||||||
|
159
RoboFile.php
Normal file
159
RoboFile.php
Normal file
@ -0,0 +1,159 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
require_once('vendor/autoload.php');
|
||||||
|
if (file_exists(__DIR__.'/.env')) {
|
||||||
|
Dotenv::load(__DIR__);
|
||||||
|
}
|
||||||
|
|
||||||
|
class RoboFile extends \Robo\Tasks
|
||||||
|
{
|
||||||
|
use \Robo\Task\Development\loadTasks;
|
||||||
|
use \Robo\Common\TaskIO;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
private $opencart_config;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var int
|
||||||
|
*/
|
||||||
|
private $server_port = 80;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private $server_url = 'http://localhost';
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
foreach ($_ENV as $option => $value) {
|
||||||
|
if (substr($option, 0, 3) === 'OC_') {
|
||||||
|
$option = strtolower(substr($option, 3));
|
||||||
|
$this->opencart_config[$option] = $value;
|
||||||
|
} elseif ($option === 'SERVER_PORT') {
|
||||||
|
$this->server_port = (int) $value;
|
||||||
|
} elseif ($option === 'SERVER_URL') {
|
||||||
|
$this->server_url = $value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->opencart_config['http_server'] = $this->server_url.':'.$this->server_port.'/';
|
||||||
|
|
||||||
|
$required = array('db_username', 'password', 'email');
|
||||||
|
$missing = array();
|
||||||
|
foreach ($required as $config) {
|
||||||
|
if (empty($this->opencart_config[$config])) {
|
||||||
|
$missing[] = 'OC_'.strtoupper($config);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($missing)) {
|
||||||
|
$this->printTaskError("<error> Missing ".implode(', ', $missing));
|
||||||
|
$this->printTaskError("<error> See .env.sample ");
|
||||||
|
die();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function opencartSetup()
|
||||||
|
{
|
||||||
|
$this->taskDeleteDir('www')->run();
|
||||||
|
$this->taskFileSystemStack()
|
||||||
|
->mirror('vendor/opencart/opencart/upload', 'www')
|
||||||
|
->copy('vendor/beyondit/opencart-test-suite/src/upload/system/config/test-config.php','www/system/config/test-config.php')
|
||||||
|
->copy('vendor/beyondit/opencart-test-suite/src/upload/catalog/controller/startup/test_startup.php','www/catalog/controller/startup/test_startup.php')
|
||||||
|
->chmod('www', 0777, 0000, true)
|
||||||
|
->run();
|
||||||
|
|
||||||
|
// 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']);
|
||||||
|
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
||||||
|
$conn->exec("DROP DATABASE IF EXISTS `" . $this->opencart_config['db_database'] . "`");
|
||||||
|
$conn->exec("CREATE DATABASE `" . $this->opencart_config['db_database'] . "`");
|
||||||
|
}
|
||||||
|
catch(PDOException $e)
|
||||||
|
{
|
||||||
|
$this->printTaskError("<error> Could not connect ot database...");
|
||||||
|
}
|
||||||
|
|
||||||
|
$install = $this->taskExec('php')->arg('www/install/cli_install.php')->arg('install');
|
||||||
|
foreach ($this->opencart_config as $option => $value) {
|
||||||
|
$install->option($option, $value);
|
||||||
|
}
|
||||||
|
$install->run();
|
||||||
|
$this->taskDeleteDir('www/install')->run();
|
||||||
|
|
||||||
|
$this->restoreSampleData($conn);
|
||||||
|
|
||||||
|
$conn = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function opencartRun()
|
||||||
|
{
|
||||||
|
$this->taskServer($this->server_port)
|
||||||
|
->dir('www')
|
||||||
|
->run();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function projectDeploy()
|
||||||
|
{
|
||||||
|
$this->taskFileSystemStack()
|
||||||
|
->mirror('src/upload', 'www')
|
||||||
|
// ->copy('src/install.xml','www/system/install.ocmod.xml') if exist modification for OCMOD
|
||||||
|
->run();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function projectWatch()
|
||||||
|
{
|
||||||
|
$this->projectDeploy();
|
||||||
|
|
||||||
|
$this->taskWatch()
|
||||||
|
->monitor('composer.json', function () {
|
||||||
|
$this->taskComposerUpdate()->run();
|
||||||
|
$this->projectDeploy();
|
||||||
|
})->monitor('src/', function () {
|
||||||
|
$this->projectDeploy();
|
||||||
|
})->run();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function projectPackage()
|
||||||
|
{
|
||||||
|
$this->taskDeleteDir('target')->run();
|
||||||
|
$this->taskFileSystemStack()->mkdir('target')->run();
|
||||||
|
|
||||||
|
$zip = new ZipArchive();
|
||||||
|
$filename = "target/build.ocmod.zip";
|
||||||
|
|
||||||
|
if ($zip->open($filename, ZipArchive::CREATE)!==TRUE) {
|
||||||
|
$this->printTaskError("<error> Could not create ZipArchive");
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
$iterator = new \RecursiveIteratorIterator(
|
||||||
|
new \RecursiveDirectoryIterator("src", \RecursiveDirectoryIterator::SKIP_DOTS), \RecursiveIteratorIterator::CHILD_FIRST
|
||||||
|
);
|
||||||
|
foreach ($iterator as $file) {
|
||||||
|
if ($file->isFile() && $file->isReadable()) {
|
||||||
|
$zip->addFile($file->getPathname(),substr($file->getPathname(),4));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$zip->close();
|
||||||
|
}
|
||||||
|
|
||||||
|
private function restoreSampleData($conn)
|
||||||
|
{
|
||||||
|
$sql = file_get_contents('tests/opencart_sample_data.sql');
|
||||||
|
|
||||||
|
$conn->exec("USE " . $this->opencart_config['db_database']);
|
||||||
|
|
||||||
|
foreach (explode(";\n", $sql) as $sql) {
|
||||||
|
$sql = trim($sql);
|
||||||
|
|
||||||
|
if ($sql) {
|
||||||
|
$conn->exec($sql);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
36
composer.json
Normal file
36
composer.json
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"name": "retailcrm/opencart-module",
|
||||||
|
"description": "Integration module for Opencart & RetailCRM",
|
||||||
|
"license": "GPL-3.0",
|
||||||
|
"type": "project",
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "RetailDriverLLC",
|
||||||
|
"email": "integration@retailcrm.ru"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"require-dev": {
|
||||||
|
"opencart/opencart" : "2.3.0.2",
|
||||||
|
"vlucas/phpdotenv": "~1.1.0",
|
||||||
|
"phpunit/phpunit" : "~4.0",
|
||||||
|
"beyondit/opencart-test-suite": "~2.3.0",
|
||||||
|
"consolidation/robo": "~1",
|
||||||
|
"henrikbjorn/lurker": "^1.2"
|
||||||
|
},
|
||||||
|
"config": {
|
||||||
|
"bin-dir": "bin/",
|
||||||
|
"preferred-install": "source"
|
||||||
|
},
|
||||||
|
"extra": {
|
||||||
|
"opencart-dir" : "www"
|
||||||
|
},
|
||||||
|
"scripts" : {
|
||||||
|
"test-admin": "bin/phpunit --testsuite admin-tests --colors=always",
|
||||||
|
"test-catalog": "bin/phpunit --testsuite catalog-tests --colors=always",
|
||||||
|
"test": [
|
||||||
|
"@test-admin",
|
||||||
|
"@test-catalog"
|
||||||
|
],
|
||||||
|
"setup" : "bin/robo opencart:setup"
|
||||||
|
}
|
||||||
|
}
|
3197
composer.lock
generated
Normal file
3197
composer.lock
generated
Normal file
File diff suppressed because it is too large
Load Diff
23
phpunit.xml
Normal file
23
phpunit.xml
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<phpunit backupGlobals="false"
|
||||||
|
backupStaticAttributes="false"
|
||||||
|
bootstrap="vendor/autoload.php"
|
||||||
|
colors="true"
|
||||||
|
convertErrorsToExceptions="true"
|
||||||
|
convertNoticesToExceptions="true"
|
||||||
|
convertWarningsToExceptions="true"
|
||||||
|
processIsolation="false"
|
||||||
|
stopOnFailure="false"
|
||||||
|
syntaxCheck="false">
|
||||||
|
<testsuites>
|
||||||
|
<testsuite name="catalog-tests">
|
||||||
|
<directory suffix="CatalogTest.php">./tests/catalog/</directory>
|
||||||
|
</testsuite>
|
||||||
|
<testsuite name="admin-tests">
|
||||||
|
<directory suffix="AdminTest.php">./tests/admin/</directory>
|
||||||
|
</testsuite>
|
||||||
|
</testsuites>
|
||||||
|
<php>
|
||||||
|
<env name="OC_ROOT" value="./www/" />
|
||||||
|
</php>
|
||||||
|
</phpunit>
|
@ -12,7 +12,7 @@
|
|||||||
class ControllerExtensionModuleRetailcrm extends Controller
|
class ControllerExtensionModuleRetailcrm extends Controller
|
||||||
{
|
{
|
||||||
private $_error = array();
|
private $_error = array();
|
||||||
protected $log, $statuses, $payments, $deliveryTypes, $retailcrmApiClient;
|
protected $log, $statuses, $payments, $deliveryTypes, $retailcrmApiClient, $moduleTitle, $tokenTitle;
|
||||||
public $children, $template;
|
public $children, $template;
|
||||||
|
|
||||||
public function __construct($registry)
|
public function __construct($registry)
|
||||||
@ -20,6 +20,7 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
|||||||
parent::__construct($registry);
|
parent::__construct($registry);
|
||||||
$this->load->library('retailcrm/retailcrm');
|
$this->load->library('retailcrm/retailcrm');
|
||||||
$this->moduleTitle = $this->retailcrm->getModuleTitle();
|
$this->moduleTitle = $this->retailcrm->getModuleTitle();
|
||||||
|
$this->tokenTitle = $this->retailcrm->getTokenTitle();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -31,12 +32,13 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
|||||||
{
|
{
|
||||||
$this->load->model('setting/setting');
|
$this->load->model('setting/setting');
|
||||||
|
|
||||||
$this->model_setting_setting
|
$this->model_setting_setting->editSetting(
|
||||||
->editSetting($this->moduleTitle, array(
|
$this->moduleTitle,
|
||||||
$this->moduleTitle . '_status' => 1,
|
array(
|
||||||
$this->moduleTitle . '_country' => array($this->config->get('config_country_id'))
|
$this->moduleTitle . '_status' => 1,
|
||||||
)
|
$this->moduleTitle . '_country' => array($this->config->get('config_country_id'))
|
||||||
);
|
)
|
||||||
|
);
|
||||||
|
|
||||||
$this->addEvents();
|
$this->addEvents();
|
||||||
}
|
}
|
||||||
@ -50,8 +52,10 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
|||||||
{
|
{
|
||||||
$this->uninstall_collector();
|
$this->uninstall_collector();
|
||||||
$this->load->model('setting/setting');
|
$this->load->model('setting/setting');
|
||||||
$this->model_setting_setting
|
$this->model_setting_setting->editSetting(
|
||||||
->editSetting($this->moduleTitle, array($this->moduleTitle . '_status' => 0));
|
$this->moduleTitle,
|
||||||
|
array($this->moduleTitle . '_status' => 0)
|
||||||
|
);
|
||||||
$this->model_setting_setting->deleteSetting('retailcrm_history');
|
$this->model_setting_setting->deleteSetting('retailcrm_history');
|
||||||
$this->deleteEvents();
|
$this->deleteEvents();
|
||||||
}
|
}
|
||||||
@ -90,7 +94,7 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
|||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
$this->loadModels();
|
$this->loadModels();
|
||||||
$this->load->model('localisation/country');
|
$this->load->model('localisation/country');
|
||||||
$this->load->model('setting/setting');
|
$this->load->model('setting/setting');
|
||||||
@ -99,10 +103,9 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
|||||||
$this->document->setTitle($this->language->get('heading_title'));
|
$this->document->setTitle($this->language->get('heading_title'));
|
||||||
$this->document->addStyle('/admin/view/stylesheet/retailcrm.css');
|
$this->document->addStyle('/admin/view/stylesheet/retailcrm.css');
|
||||||
|
|
||||||
$tokenTitle = $this->retailcrm->getTokenTitle();
|
|
||||||
$collector = $this->getCollectorTitle();
|
$collector = $this->getCollectorTitle();
|
||||||
$history_setting = $this->model_setting_setting->getSetting('retailcrm_history');
|
$history_setting = $this->model_setting_setting->getSetting('retailcrm_history');
|
||||||
|
|
||||||
if ($this->request->server['REQUEST_METHOD'] == 'POST' && $this->validate()) {
|
if ($this->request->server['REQUEST_METHOD'] == 'POST' && $this->validate()) {
|
||||||
if ($this->checkEvents() === false) {
|
if ($this->checkEvents() === false) {
|
||||||
$this->deleteEvents();
|
$this->deleteEvents();
|
||||||
@ -110,22 +113,24 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
$analytics = $this->{'model_' . $this->modelExtension}->getInstalled('analytics');
|
$analytics = $this->{'model_' . $this->modelExtension}->getInstalled('analytics');
|
||||||
|
|
||||||
if ($this->request->post[$this->moduleTitle . '_collector_active'] == 1 &&
|
if ($this->request->post[$this->moduleTitle . '_collector_active'] == 1
|
||||||
!in_array($collector, $analytics)) {
|
&& !in_array($collector, $analytics)
|
||||||
|
) {
|
||||||
$this->install_collector();
|
$this->install_collector();
|
||||||
} elseif ($this->request->post[$this->moduleTitle . '_collector_active'] == 0 &&
|
} elseif ($this->request->post[$this->moduleTitle . '_collector_active'] == 0
|
||||||
in_array($collector, $analytics)) {
|
&& in_array($collector, $analytics)
|
||||||
|
) {
|
||||||
$this->uninstall_collector();
|
$this->uninstall_collector();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (parse_url($this->request->post[$this->moduleTitle . '_url'])) {
|
if (parse_url($this->request->post[$this->moduleTitle . '_url'])) {
|
||||||
$crm_url = parse_url($this->request->post[$this->moduleTitle . '_url'], PHP_URL_HOST);
|
$crm_url = parse_url($this->request->post[$this->moduleTitle . '_url'], PHP_URL_HOST);
|
||||||
$this->request->post[$this->moduleTitle . '_url'] = 'https://'.$crm_url;
|
$this->request->post[$this->moduleTitle . '_url'] = 'https://' . $crm_url;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($this->request->post[$this->moduleTitle . '_custom_field_active']) &&
|
if (isset($this->request->post[$this->moduleTitle . '_custom_field_active'])
|
||||||
$this->request->post[$this->moduleTitle . '_custom_field_active'] == 0
|
&& $this->request->post[$this->moduleTitle . '_custom_field_active'] == 0
|
||||||
) {
|
) {
|
||||||
unset($this->request->post[$this->moduleTitle . '_custom_field']);
|
unset($this->request->post[$this->moduleTitle . '_custom_field']);
|
||||||
}
|
}
|
||||||
@ -181,7 +186,7 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
|||||||
|
|
||||||
$this->session->data['success'] = $this->language->get('text_success');
|
$this->session->data['success'] = $this->language->get('text_success');
|
||||||
$redirect = $this->url->link(
|
$redirect = $this->url->link(
|
||||||
'extension/module/retailcrm', $tokenTitle . '=' . $this->session->data[$tokenTitle],
|
'extension/module/retailcrm', $this->tokenTitle . '=' . $this->session->data[$this->tokenTitle],
|
||||||
'SSL'
|
'SSL'
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -311,7 +316,7 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
|||||||
'text' => $this->language->get('text_home'),
|
'text' => $this->language->get('text_home'),
|
||||||
'href' => $this->url->link(
|
'href' => $this->url->link(
|
||||||
'common/home',
|
'common/home',
|
||||||
$tokenTitle . '=' . $this->session->data[$tokenTitle], 'SSL'
|
$this->tokenTitle . '=' . $this->session->data[$this->tokenTitle], 'SSL'
|
||||||
),
|
),
|
||||||
'separator' => false
|
'separator' => false
|
||||||
);
|
);
|
||||||
@ -320,7 +325,7 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
|||||||
'text' => $this->language->get('text_module'),
|
'text' => $this->language->get('text_module'),
|
||||||
'href' => $this->url->link(
|
'href' => $this->url->link(
|
||||||
'extension/extension/module',
|
'extension/extension/module',
|
||||||
$tokenTitle . '=' . $this->session->data[$tokenTitle], 'SSL'
|
$this->tokenTitle . '=' . $this->session->data[$this->tokenTitle], 'SSL'
|
||||||
),
|
),
|
||||||
'separator' => ' :: '
|
'separator' => ' :: '
|
||||||
);
|
);
|
||||||
@ -329,19 +334,19 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
|||||||
'text' => $this->language->get('retailcrm_title'),
|
'text' => $this->language->get('retailcrm_title'),
|
||||||
'href' => $this->url->link(
|
'href' => $this->url->link(
|
||||||
'extension/module/retailcrm',
|
'extension/module/retailcrm',
|
||||||
$tokenTitle . '=' . $this->session->data[$tokenTitle], 'SSL'
|
$this->tokenTitle . '=' . $this->session->data[$this->tokenTitle], 'SSL'
|
||||||
),
|
),
|
||||||
'separator' => ' :: '
|
'separator' => ' :: '
|
||||||
);
|
);
|
||||||
|
|
||||||
$_data['action'] = $this->url->link(
|
$_data['action'] = $this->url->link(
|
||||||
'extension/module/retailcrm',
|
'extension/module/retailcrm',
|
||||||
$tokenTitle . '=' . $this->session->data[$tokenTitle], 'SSL'
|
$this->tokenTitle . '=' . $this->session->data[$this->tokenTitle], 'SSL'
|
||||||
);
|
);
|
||||||
|
|
||||||
$_data['cancel'] = $this->url->link(
|
$_data['cancel'] = $this->url->link(
|
||||||
version_compare(VERSION, '3.0', '<') ? 'extension/extension' : 'marketplace/extension',
|
version_compare(VERSION, '3.0', '<') ? 'extension/extension' : 'marketplace/extension',
|
||||||
$tokenTitle . '=' . $this->session->data[$tokenTitle], 'SSL'
|
$this->tokenTitle . '=' . $this->session->data[$this->tokenTitle], 'SSL'
|
||||||
);
|
);
|
||||||
|
|
||||||
$_data['modules'] = array();
|
$_data['modules'] = array();
|
||||||
@ -360,7 +365,7 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
|||||||
$_data['footer'] = $this->load->controller('common/footer');
|
$_data['footer'] = $this->load->controller('common/footer');
|
||||||
$_data['countries'] = $this->model_localisation_country->getCountries();
|
$_data['countries'] = $this->model_localisation_country->getCountries();
|
||||||
$_data['catalog'] = $this->request->server['HTTPS'] ? HTTPS_CATALOG : HTTP_CATALOG;
|
$_data['catalog'] = $this->request->server['HTTPS'] ? HTTPS_CATALOG : HTTP_CATALOG;
|
||||||
$_data[$tokenTitle] = $this->request->get[$tokenTitle];
|
$_data[$this->tokenTitle] = $this->request->get[$this->tokenTitle];
|
||||||
|
|
||||||
if(file_exists(DIR_SYSTEM . '/cron/export_done')) {
|
if(file_exists(DIR_SYSTEM . '/cron/export_done')) {
|
||||||
$_data['export_file'] = false;
|
$_data['export_file'] = false;
|
||||||
@ -393,8 +398,8 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
|||||||
$_data['logs']['oc_error'] = $this->language->get('text_error_log');
|
$_data['logs']['oc_error'] = $this->language->get('text_error_log');
|
||||||
}
|
}
|
||||||
|
|
||||||
$_data['clear_retailcrm'] = $this->url->link('extension/module/retailcrm/clear_retailcrm', $tokenTitle . '=' . $this->session->data[$tokenTitle], true);
|
$_data['clear_retailcrm'] = $this->url->link('extension/module/retailcrm/clear_retailcrm', $this->tokenTitle . '=' . $this->session->data[$this->tokenTitle], true);
|
||||||
$_data['clear_opencart'] = $this->url->link('extension/module/retailcrm/clear_opencart', $tokenTitle . '=' . $this->session->data[$tokenTitle], true);
|
$_data['clear_opencart'] = $this->url->link('extension/module/retailcrm/clear_opencart', $this->tokenTitle . '=' . $this->session->data[$this->tokenTitle], true);
|
||||||
$_data['button_clear'] = $this->language->get('button_clear');
|
$_data['button_clear'] = $this->language->get('button_clear');
|
||||||
|
|
||||||
$this->response->setOutput(
|
$this->response->setOutput(
|
||||||
@ -416,18 +421,18 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
|||||||
if ($settings[$this->moduleTitle . '_apiversion'] == 'v3') {
|
if ($settings[$this->moduleTitle . '_apiversion'] == 'v3') {
|
||||||
if (file_exists(DIR_APPLICATION . 'model/extension/retailcrm/custom/history/v3.php')) {
|
if (file_exists(DIR_APPLICATION . 'model/extension/retailcrm/custom/history/v3.php')) {
|
||||||
$this->load->model('extension/retailcrm/custom/history/v3');
|
$this->load->model('extension/retailcrm/custom/history/v3');
|
||||||
$this->model_extension_retailcrm_custom_history_v3->request();
|
$this->model_extension_retailcrm_custom_history_v3->request($this->retailcrm->getApiClient());
|
||||||
} else {
|
} else {
|
||||||
$this->load->model('extension/retailcrm/history/v3');
|
$this->load->model('extension/retailcrm/history/v3');
|
||||||
$this->model_extension_retailcrm_history_v3->request();
|
$this->model_extension_retailcrm_history_v3->request($this->retailcrm->getApiClient());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (file_exists(DIR_APPLICATION . 'model/extension/retailcrm/custom/history/v4-5.php')) {
|
if (file_exists(DIR_APPLICATION . 'model/extension/retailcrm/custom/history/v4-5.php')) {
|
||||||
$this->load->model('extension/retailcrm/custom/history/v4-5');
|
$this->load->model('extension/retailcrm/custom/history/v4-5');
|
||||||
$this->model_extension_retailcrm_custom_history_v4_5->request();
|
$this->model_extension_retailcrm_custom_history_v4_5->request($this->retailcrm->getApiClient());
|
||||||
} else {
|
} else {
|
||||||
$this->load->model('extension/retailcrm/history/v4_5');
|
$this->load->model('extension/retailcrm/history/v4_5');
|
||||||
$this->model_extension_retailcrm_history_v4_5->request();
|
$this->model_extension_retailcrm_history_v4_5->request($this->retailcrm->getApiClient());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -448,35 +453,11 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Create order on event
|
|
||||||
*
|
|
||||||
* @param int $order_id order identificator
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function order_create($order_id)
|
|
||||||
{
|
|
||||||
$this->load->model('checkout/order');
|
|
||||||
$this->load->model('account/order');
|
|
||||||
|
|
||||||
$data = $this->model_checkout_order->getOrder($order_id);
|
|
||||||
$data['products'] = $this->model_account_order->getOrderProducts($order_id);
|
|
||||||
|
|
||||||
if (!isset($data['fromApi'])) {
|
|
||||||
$this->load->model('setting/setting');
|
|
||||||
$status = $this->model_setting_setting->getSetting('retailcrm');
|
|
||||||
$data['order_status'] = $status['retailcrm_status'][$data['order_status_id']];
|
|
||||||
|
|
||||||
$this->load->model('extension/retailcrm/order');
|
|
||||||
$this->model_extension_retailcrm_order->sendToCrm($data, $data['order_id']);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update customer on event
|
* Update customer on event
|
||||||
*
|
*
|
||||||
* @param int $customer_id customer identificator
|
* @param string $route
|
||||||
|
* @param int $customer customer identificator
|
||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
@ -508,7 +489,7 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
$this->load->model('extension/retailcrm/customer');
|
$this->load->model('extension/retailcrm/customer');
|
||||||
$this->model_extension_retailcrm_customer->changeInCrm($customer);
|
$this->model_extension_retailcrm_customer->changeInCrm($customer, $this->retailcrm->getApiClient());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -525,13 +506,17 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
|||||||
$data['products'] = $this->model_sale_order->getOrderProducts($order_id);
|
$data['products'] = $this->model_sale_order->getOrderProducts($order_id);
|
||||||
$data['totals'] = $this->model_sale_order->getOrderTotals($order_id);
|
$data['totals'] = $this->model_sale_order->getOrderTotals($order_id);
|
||||||
|
|
||||||
|
foreach ($data['products'] as $key => $product) {
|
||||||
|
$data['products'][$key]['option'] = $this->model_sale_order->getOrderOptions($product['order_id'], $product['order_product_id']);
|
||||||
|
}
|
||||||
|
|
||||||
if (!isset($data['fromApi'])) {
|
if (!isset($data['fromApi'])) {
|
||||||
$this->load->model('setting/setting');
|
$this->load->model('setting/setting');
|
||||||
$status = $this->model_setting_setting->getSetting($this->moduleTitle);
|
$status = $this->model_setting_setting->getSetting($this->moduleTitle);
|
||||||
$data['order_status'] = $status[$this->moduleTitle . '_status'][$data['order_status_id']];
|
$data['order_status'] = $status[$this->moduleTitle . '_status'][$data['order_status_id']];
|
||||||
|
|
||||||
$this->load->model('extension/retailcrm/order');
|
$this->load->model('extension/retailcrm/order');
|
||||||
$response = $this->model_extension_retailcrm_order->uploadOrder($data);
|
$response = $this->model_extension_retailcrm_order->uploadOrder($data, $this->retailcrm->getApiClient());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$response->isSuccessful()) {
|
if (!$response->isSuccessful()) {
|
||||||
@ -550,7 +535,7 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
$this->response->setOutPut(
|
$this->response->setOutput(
|
||||||
json_encode(
|
json_encode(
|
||||||
array(
|
array(
|
||||||
'status_code' => $response->getStatusCode()
|
'status_code' => $response->getStatusCode()
|
||||||
@ -568,37 +553,36 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
|||||||
public function export()
|
public function export()
|
||||||
{
|
{
|
||||||
$this->load->model('customer/customer');
|
$this->load->model('customer/customer');
|
||||||
$customers = $this->model_customer_customer->getCustomers();
|
|
||||||
|
|
||||||
$this->load->model('extension/retailcrm/customer');
|
$this->load->model('extension/retailcrm/customer');
|
||||||
$this->model_extension_retailcrm_customer->uploadToCrm($customers);
|
$this->load->model('extension/retailcrm/order');
|
||||||
|
|
||||||
$this->load->model('sale/order');
|
$this->load->model('sale/order');
|
||||||
|
|
||||||
|
$customers = $this->model_customer_customer->getCustomers();
|
||||||
|
$this->model_extension_retailcrm_customer->uploadToCrm($customers, $this->retailcrm->getApiClient());
|
||||||
$orders = $this->model_sale_order->getOrders();
|
$orders = $this->model_sale_order->getOrders();
|
||||||
|
|
||||||
$fullOrders = array();
|
$fullOrders = array();
|
||||||
|
|
||||||
foreach($orders as $order) {
|
foreach ($orders as $order) {
|
||||||
$fullOrder = $this->model_sale_order->getOrder($order['order_id']);
|
$fullOrder = $this->model_sale_order->getOrder($order['order_id']);
|
||||||
|
|
||||||
$fullOrder['order_total'] = $this->model_sale_order->getOrderTotals($order['order_id']);
|
$fullOrder['totals'] = $this->model_sale_order->getOrderTotals($order['order_id']);
|
||||||
$fullOrder['products'] = $this->model_sale_order->getOrderProducts($order['order_id']);
|
$fullOrder['products'] = $this->model_sale_order->getOrderProducts($order['order_id']);
|
||||||
|
|
||||||
foreach($fullOrder['products'] as $key=>$product) {
|
foreach($fullOrder['products'] as $key => $product) {
|
||||||
$fullOrder['products'][$key]['option'] = $this->model_sale_order->getOrderOptions($product['order_id'], $product['order_product_id']);
|
$fullOrder['products'][$key]['option'] = $this->model_sale_order->getOrderOptions($product['order_id'], $product['order_product_id']);
|
||||||
}
|
}
|
||||||
|
|
||||||
$fullOrders[] = $fullOrder;
|
$fullOrders[] = $fullOrder;
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->load->model('extension/retailcrm/order');
|
$this->model_extension_retailcrm_order->uploadToCrm($fullOrders, $this->retailcrm->getApiClient());
|
||||||
$this->model_extension_retailcrm_order->uploadToCrm($fullOrders);
|
|
||||||
fopen(DIR_SYSTEM . '/cron/export_done', "x");
|
fopen(DIR_SYSTEM . '/cron/export_done', "x");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Promotional price upload
|
* Promotional price upload
|
||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function prices()
|
public function prices()
|
||||||
@ -608,10 +592,10 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
|||||||
|
|
||||||
if (file_exists(DIR_APPLICATION . 'model/extension/retailcrm/custom/prices.php')) {
|
if (file_exists(DIR_APPLICATION . 'model/extension/retailcrm/custom/prices.php')) {
|
||||||
$this->load->model('extension/retailcrm/custom/prices');
|
$this->load->model('extension/retailcrm/custom/prices');
|
||||||
$this->model_extension_retailcrm_custom_prices->uploadPrices($products);
|
$this->model_extension_retailcrm_custom_prices->uploadPrices($products, $this->retailcrm->getApiClient());
|
||||||
} else {
|
} else {
|
||||||
$this->load->model('extension/retailcrm/prices');
|
$this->load->model('extension/retailcrm/prices');
|
||||||
$this->model_extension_retailcrm_prices->uploadPrices($products);
|
$this->model_extension_retailcrm_prices->uploadPrices($products, $this->retailcrm->getApiClient());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -672,8 +656,6 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
|||||||
*/
|
*/
|
||||||
public function clear_retailcrm()
|
public function clear_retailcrm()
|
||||||
{
|
{
|
||||||
$tokenTitle = $this->getTokenTitle();
|
|
||||||
|
|
||||||
if ($this->user->hasPermission('modify', 'extension/module/retailcrm')) {
|
if ($this->user->hasPermission('modify', 'extension/module/retailcrm')) {
|
||||||
$file = DIR_LOGS . 'retailcrm.log';
|
$file = DIR_LOGS . 'retailcrm.log';
|
||||||
|
|
||||||
@ -682,7 +664,7 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
|||||||
fclose($handle);
|
fclose($handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->response->redirect($this->url->link('extension/module/retailcrm', $tokenTitle . '=' . $this->session->data[$tokenTitle], true));
|
$this->response->redirect($this->url->link('extension/module/retailcrm', $this->tokenTitle . '=' . $this->session->data[$this->tokenTitle], true));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -691,9 +673,7 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
|||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function clear_opencart()
|
public function clear_opencart()
|
||||||
{
|
{
|
||||||
$tokenTitle = $this->getTokenTitle();
|
|
||||||
|
|
||||||
if ($this->user->hasPermission('modify', 'extension/module/retailcrm')) {
|
if ($this->user->hasPermission('modify', 'extension/module/retailcrm')) {
|
||||||
$file = DIR_LOGS . 'opencartapi.log';
|
$file = DIR_LOGS . 'opencartapi.log';
|
||||||
|
|
||||||
@ -702,11 +682,11 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
|||||||
fclose($handle);
|
fclose($handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->response->redirect($this->url->link('extension/module/retailcrm', $tokenTitle . '=' . $this->session->data[$tokenTitle], true));
|
$this->response->redirect($this->url->link('extension/module/retailcrm', $this->tokenTitle . '=' . $this->session->data[$this->tokenTitle], true));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Method for load modelds
|
* Method for load models
|
||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
@ -829,7 +809,7 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
|||||||
private function checkEvents()
|
private function checkEvents()
|
||||||
{
|
{
|
||||||
$events = $this->{'model_' . $this->modelEvent}->getEvent(
|
$events = $this->{'model_' . $this->modelEvent}->getEvent(
|
||||||
'retailcrm',
|
$this->moduleTitle,
|
||||||
'catalog/model/checkout/order/addOrder/after',
|
'catalog/model/checkout/order/addOrder/after',
|
||||||
'extension/module/retailcrm/order_create'
|
'extension/module/retailcrm/order_create'
|
||||||
);
|
);
|
@ -1,8 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
// Heading Goes here:
|
// Heading Goes here:
|
||||||
$_['heading_title'] = 'RetailCRM';
|
$_['heading_title'] = 'Retailcrm';
|
||||||
$_['retailcrm_title'] = 'RetailCRM';
|
$_['retailcrm_title'] = 'Retailcrm';
|
||||||
|
|
||||||
// Text
|
// Text
|
||||||
$_['text_module'] = 'Modules';
|
$_['text_module'] = 'Modules';
|
@ -1,8 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
// Heading Goes here:
|
// Heading Goes here:
|
||||||
$_['heading_title'] = 'RetailCRM';
|
$_['heading_title'] = 'Retailcrm';
|
||||||
$_['retailcrm_title'] = 'RetailCRM';
|
$_['retailcrm_title'] = 'Retailcrm';
|
||||||
|
|
||||||
// Text
|
// Text
|
||||||
$_['text_module'] = 'Модули';
|
$_['text_module'] = 'Модули';
|
@ -13,20 +13,20 @@ class ModelExtensionRetailcrmCustomer extends Model {
|
|||||||
|
|
||||||
$this->moduleTitle = $this->retailcrm->getModuleTitle();
|
$this->moduleTitle = $this->retailcrm->getModuleTitle();
|
||||||
$this->settings = $this->model_setting_setting->getSetting($this->moduleTitle);
|
$this->settings = $this->model_setting_setting->getSetting($this->moduleTitle);
|
||||||
$this->retailcrmApiClient = $this->retailcrm->getApiClient();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Upload customers
|
* Upload customers
|
||||||
*
|
*
|
||||||
* @param array $customers
|
* @param array $customers
|
||||||
*
|
* @param \RetailcrmProxy $retailcrmApiClient
|
||||||
* @return void
|
*
|
||||||
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
public function uploadToCrm($customers)
|
public function uploadToCrm($customers, $retailcrmApiClient)
|
||||||
{
|
{
|
||||||
if ($this->retailcrmApiClient === false || empty($customers)) {
|
if ($retailcrmApiClient === false || empty($customers)) {
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$customersToCrm = array();
|
$customersToCrm = array();
|
||||||
@ -38,26 +38,31 @@ class ModelExtensionRetailcrmCustomer extends Model {
|
|||||||
$chunkedCustomers = array_chunk($customersToCrm, 50);
|
$chunkedCustomers = array_chunk($customersToCrm, 50);
|
||||||
|
|
||||||
foreach($chunkedCustomers as $customersPart) {
|
foreach($chunkedCustomers as $customersPart) {
|
||||||
$this->retailcrmApiClient->customersUpload($customersPart);
|
$retailcrmApiClient->customersUpload($customersPart);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return $chunkedCustomers;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Edit customer
|
* Edit customer
|
||||||
*
|
*
|
||||||
* @param array $customer
|
* @param array $customer
|
||||||
*
|
* @param \RetailcrmProxy $retailcrmApiClient
|
||||||
* @return void
|
*
|
||||||
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
public function changeInCrm($customer)
|
public function changeInCrm($customer, $retailcrmApiClient)
|
||||||
{
|
{
|
||||||
if ($this->retailcrmApiClient === false || empty($customer)) {
|
if ($retailcrmApiClient === false || empty($customer)) {
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$customerToCrm = $this->process($customer);
|
$customerToCrm = $this->process($customer);
|
||||||
|
|
||||||
$this->retailcrmApiClient->customersEdit($customerToCrm);
|
$retailcrmApiClient->customersEdit($customerToCrm);
|
||||||
|
|
||||||
|
return $customerToCrm;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -69,7 +74,6 @@ class ModelExtensionRetailcrmCustomer extends Model {
|
|||||||
*/
|
*/
|
||||||
private function process($customer)
|
private function process($customer)
|
||||||
{
|
{
|
||||||
|
|
||||||
$customerToCrm = array(
|
$customerToCrm = array(
|
||||||
'externalId' => $customer['customer_id'],
|
'externalId' => $customer['customer_id'],
|
||||||
'firstName' => $customer['firstname'],
|
'firstName' => $customer['firstname'],
|
||||||
@ -92,7 +96,7 @@ class ModelExtensionRetailcrmCustomer extends Model {
|
|||||||
'text' => $customer['address']['address_1'] . ' ' . $customer['address']['address_2']
|
'text' => $customer['address']['address_1'] . ' ' . $customer['address']['address_2']
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($this->settings[$this->moduleTitle . '_custom_field']) && $customer['custom_field']) {
|
if (isset($this->settings[$this->moduleTitle . '_custom_field']) && $customer['custom_field']) {
|
||||||
$customFields = json_decode($customer['custom_field']);
|
$customFields = json_decode($customer['custom_field']);
|
||||||
|
|
@ -66,7 +66,7 @@ class ModelExtensionRetailcrmHistory extends Model
|
|||||||
public function addOrderProducts($order_id, $products)
|
public function addOrderProducts($order_id, $products)
|
||||||
{
|
{
|
||||||
foreach ($products as $product) {
|
foreach ($products as $product) {
|
||||||
$this->db->query("INSERT INTO " . DB_PREFIX . "order_product SET order_id = '" . (int)$order_id . "', product_id = '" . (int)$product['product_id'] . "', name = '" . $this->db->escape($product['name']) . "', model = '" . $this->db->escape($product['model']) . "', quantity = '" . (int)$product['quantity'] . "', price = '" . (float)$product['price'] . "', total = '" . (float)$product['total'] . "'");
|
$this->db->query("INSERT INTO " . DB_PREFIX . "order_product SET order_id = '" . (int)$order_id . "', product_id = '" . (int)$product['product_id'] . "', name = '" . $this->db->escape($product['name']) . "', model = '" . $this->db->escape($product['model']) . "', quantity = '" . (int)$product['quantity'] . "', price = '" . (float)$product['price'] . "', total = '" . (float)$product['total'] . "', reward = '" . (float)$product['reward'] . "'");
|
||||||
|
|
||||||
$order_product_id = $this->db->getLastId();
|
$order_product_id = $this->db->getLastId();
|
||||||
|
|
@ -6,14 +6,14 @@ class ModelExtensionRetailcrmHistoryV3 extends ModelExtensionRetailcrmHistoryV45
|
|||||||
{
|
{
|
||||||
protected $createResult;
|
protected $createResult;
|
||||||
|
|
||||||
private $opencartApiClient;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Getting changes from RetailCRM
|
* Getting changes from RetailCRM
|
||||||
*
|
*
|
||||||
|
* @param \RetailcrmProxy $retailcrmApiClient
|
||||||
|
*
|
||||||
* @return boolean
|
* @return boolean
|
||||||
*/
|
*/
|
||||||
public function request()
|
public function request($retailcrmApiClient)
|
||||||
{
|
{
|
||||||
$moduleTitle = $this->retailcrm->getModuleTitle();
|
$moduleTitle = $this->retailcrm->getModuleTitle();
|
||||||
$this->load->model('setting/setting');
|
$this->load->model('setting/setting');
|
||||||
@ -40,18 +40,11 @@ class ModelExtensionRetailcrmHistoryV3 extends ModelExtensionRetailcrmHistoryV45
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$crm = new RetailcrmProxy(
|
|
||||||
$settings[$moduleTitle . '_url'],
|
|
||||||
$settings[$moduleTitle . '_apikey'],
|
|
||||||
DIR_SYSTEM . 'storage/logs/retailcrm.log',
|
|
||||||
$settings[$moduleTitle . '_apiversion']
|
|
||||||
);
|
|
||||||
|
|
||||||
$lastRun = !empty($history['retailcrm_history_datetime'])
|
$lastRun = !empty($history['retailcrm_history_datetime'])
|
||||||
? new DateTime($history['retailcrm_history_datetime'])
|
? new DateTime($history['retailcrm_history_datetime'])
|
||||||
: new DateTime(date('Y-m-d H:i:s', strtotime('-1 days', strtotime(date('Y-m-d H:i:s')))));
|
: new DateTime(date('Y-m-d H:i:s', strtotime('-1 days', strtotime(date('Y-m-d H:i:s')))));
|
||||||
|
|
||||||
$packsOrders = $crm->ordersHistory($lastRun);
|
$packsOrders = $retailcrmApiClient->ordersHistory($lastRun);
|
||||||
|
|
||||||
if(!$packsOrders->isSuccessful() && count($packsOrders['orders']) <= 0) {
|
if(!$packsOrders->isSuccessful() && count($packsOrders['orders']) <= 0) {
|
||||||
return false;
|
return false;
|
||||||
@ -96,14 +89,14 @@ class ModelExtensionRetailcrmHistoryV3 extends ModelExtensionRetailcrmHistoryV45
|
|||||||
unset($orders);
|
unset($orders);
|
||||||
|
|
||||||
if (!empty($newOrders)) {
|
if (!empty($newOrders)) {
|
||||||
$orders = $crm->ordersList($filter = array('ids' => $newOrders));
|
$orders = $retailcrmApiClient->ordersList($filter = array('ids' => $newOrders));
|
||||||
if ($orders) {
|
if ($orders) {
|
||||||
$this->createResult = $this->createOrders($orders['orders']);
|
$this->createResult = $this->createOrders($orders['orders']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($updatedOrders)) {
|
if (!empty($updatedOrders)) {
|
||||||
$orders = $crm->ordersList($filter = array('ids' => $updatedOrders));
|
$orders = $retailcrmApiClient->ordersList($filter = array('ids' => $updatedOrders));
|
||||||
if ($orders) {
|
if ($orders) {
|
||||||
$this->updateOrders($orders['orders']);
|
$this->updateOrders($orders['orders']);
|
||||||
}
|
}
|
||||||
@ -112,11 +105,13 @@ class ModelExtensionRetailcrmHistoryV3 extends ModelExtensionRetailcrmHistoryV45
|
|||||||
$this->model_setting_setting->editSetting('retailcrm_history', array('retailcrm_history_datetime' => $generatedAt));
|
$this->model_setting_setting->editSetting('retailcrm_history', array('retailcrm_history_datetime' => $generatedAt));
|
||||||
|
|
||||||
if (!empty($this->createResult['customers'])) {
|
if (!empty($this->createResult['customers'])) {
|
||||||
$crm->customersFixExternalIds($this->createResult['customers']);
|
$retailcrmApiClient->customersFixExternalIds($this->createResult['customers']);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($this->createResult['orders'])) {
|
if (!empty($this->createResult['orders'])) {
|
||||||
$crm->ordersFixExternalIds($this->createResult['orders']);
|
$retailcrmApiClient->ordersFixExternalIds($this->createResult['orders']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -7,8 +7,8 @@ class ModelExtensionRetailcrmHistoryV45 extends ModelExtensionRetailcrmHistory
|
|||||||
protected $createResult;
|
protected $createResult;
|
||||||
protected $settings;
|
protected $settings;
|
||||||
protected $moduleTitle;
|
protected $moduleTitle;
|
||||||
|
protected $opencartApiClient;
|
||||||
|
|
||||||
private $opencartApiClient;
|
|
||||||
private $customFieldSetting;
|
private $customFieldSetting;
|
||||||
|
|
||||||
public function __construct($registry)
|
public function __construct($registry)
|
||||||
@ -21,13 +21,13 @@ class ModelExtensionRetailcrmHistoryV45 extends ModelExtensionRetailcrmHistory
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Getting changes from RetailCRM
|
* Getting changes from RetailCRM
|
||||||
*
|
* @param \RetailcrmProxy $retailcrmApiClient
|
||||||
|
*
|
||||||
* @return boolean
|
* @return boolean
|
||||||
*/
|
*/
|
||||||
public function request()
|
public function request($retailcrmApiClient)
|
||||||
{
|
{
|
||||||
$this->load->library('retailcrm/retailcrm');
|
$this->load->library('retailcrm/retailcrm');
|
||||||
$this->moduleTitle = $this->retailcrm->getModuleTitle();
|
|
||||||
$this->load->model('setting/setting');
|
$this->load->model('setting/setting');
|
||||||
$this->load->model('setting/store');
|
$this->load->model('setting/store');
|
||||||
$this->load->model('user/api');
|
$this->load->model('user/api');
|
||||||
@ -52,22 +52,13 @@ class ModelExtensionRetailcrmHistoryV45 extends ModelExtensionRetailcrmHistory
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->opencartApiClient = new OpencartApiClient($this->registry);
|
|
||||||
|
|
||||||
$crm = new RetailcrmProxy(
|
|
||||||
$settings[$this->moduleTitle . '_url'],
|
|
||||||
$settings[$this->moduleTitle . '_apikey'],
|
|
||||||
DIR_SYSTEM . 'storage/logs/retailcrm.log',
|
|
||||||
$settings[$this->moduleTitle . '_apiversion']
|
|
||||||
);
|
|
||||||
|
|
||||||
$sinceIdOrders = $history['retailcrm_history_orders'] ? $history['retailcrm_history_orders'] : null;
|
$sinceIdOrders = $history['retailcrm_history_orders'] ? $history['retailcrm_history_orders'] : null;
|
||||||
$sinceIdCustomers = $history['retailcrm_history_customers'] ? $history['retailcrm_history_customers'] : null;
|
$sinceIdCustomers = $history['retailcrm_history_customers'] ? $history['retailcrm_history_customers'] : null;
|
||||||
|
|
||||||
$packsOrders = $crm->ordersHistory(array(
|
$packsOrders = $retailcrmApiClient->ordersHistory(array(
|
||||||
'sinceId' => $sinceIdOrders ? $sinceIdOrders : 0
|
'sinceId' => $sinceIdOrders ? $sinceIdOrders : 0
|
||||||
), 1, 100);
|
), 1, 100);
|
||||||
$packsCustomers = $crm->customersHistory(array(
|
$packsCustomers = $retailcrmApiClient->customersHistory(array(
|
||||||
'sinceId' => $sinceIdCustomers ? $sinceIdCustomers : 0
|
'sinceId' => $sinceIdCustomers ? $sinceIdCustomers : 0
|
||||||
), 1, 100);
|
), 1, 100);
|
||||||
|
|
||||||
@ -150,21 +141,21 @@ class ModelExtensionRetailcrmHistoryV45 extends ModelExtensionRetailcrmHistory
|
|||||||
unset($customers);
|
unset($customers);
|
||||||
|
|
||||||
if (!empty($updateCustomers)) {
|
if (!empty($updateCustomers)) {
|
||||||
$customers = $crm->customersList($filter = array('ids' => $updateCustomers));
|
$customers = $retailcrmApiClient->customersList($filter = array('ids' => $updateCustomers));
|
||||||
if ($customers) {
|
if ($customers) {
|
||||||
$this->updateCustomers($customers['customers']);
|
$this->updateCustomers($customers['customers']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($newOrders)) {
|
if (!empty($newOrders)) {
|
||||||
$orders = $crm->ordersList($filter = array('ids' => $newOrders));
|
$orders = $retailcrmApiClient->ordersList($filter = array('ids' => $newOrders));
|
||||||
if ($orders) {
|
if ($orders) {
|
||||||
$this->createResult = $this->createOrders($orders['orders']);
|
$this->createResult = $this->createOrders($orders['orders']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($updatedOrders)) {
|
if (!empty($updatedOrders)) {
|
||||||
$orders = $crm->ordersList($filter = array('ids' => $updatedOrders));
|
$orders = $retailcrmApiClient->ordersList($filter = array('ids' => $updatedOrders));
|
||||||
if ($orders) {
|
if ($orders) {
|
||||||
$this->updateOrders($orders['orders']);
|
$this->updateOrders($orders['orders']);
|
||||||
}
|
}
|
||||||
@ -180,12 +171,14 @@ class ModelExtensionRetailcrmHistoryV45 extends ModelExtensionRetailcrmHistory
|
|||||||
);
|
);
|
||||||
|
|
||||||
if (!empty($this->createResult['customers'])) {
|
if (!empty($this->createResult['customers'])) {
|
||||||
$crm->customersFixExternalIds($this->createResult['customers']);
|
$retailcrmApiClient->customersFixExternalIds($this->createResult['customers']);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($this->createResult['orders'])) {
|
if (!empty($this->createResult['orders'])) {
|
||||||
$crm->ordersFixExternalIds($this->createResult['orders']);
|
$retailcrmApiClient->ordersFixExternalIds($this->createResult['orders']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -394,6 +387,7 @@ class ModelExtensionRetailcrmHistoryV45 extends ModelExtensionRetailcrmHistory
|
|||||||
}
|
}
|
||||||
|
|
||||||
$product = $this->model_catalog_product->getProduct($productId);
|
$product = $this->model_catalog_product->getProduct($productId);
|
||||||
|
$rewards = $this->model_catalog_product->getProductRewards($productId);
|
||||||
|
|
||||||
$data['order_product'][] = array(
|
$data['order_product'][] = array(
|
||||||
'name' => $product['name'],
|
'name' => $product['name'],
|
||||||
@ -402,7 +396,8 @@ class ModelExtensionRetailcrmHistoryV45 extends ModelExtensionRetailcrmHistory
|
|||||||
'total' => (float)($item['initialPrice'] * $item['quantity']),
|
'total' => (float)($item['initialPrice'] * $item['quantity']),
|
||||||
'product_id' => $productId,
|
'product_id' => $productId,
|
||||||
'quantity' => $item['quantity'],
|
'quantity' => $item['quantity'],
|
||||||
'option' => $options
|
'option' => $options,
|
||||||
|
'reward' => $rewards[$data['customer_group_id']]['points'] * $item['quantity']
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -711,6 +706,7 @@ class ModelExtensionRetailcrmHistoryV45 extends ModelExtensionRetailcrmHistory
|
|||||||
}
|
}
|
||||||
|
|
||||||
$product = $this->model_catalog_product->getProduct($productId);
|
$product = $this->model_catalog_product->getProduct($productId);
|
||||||
|
$rewards = $this->model_catalog_product->getProductRewards($productId);
|
||||||
|
|
||||||
$data['order_product'][] = array(
|
$data['order_product'][] = array(
|
||||||
'name' => $product['name'],
|
'name' => $product['name'],
|
||||||
@ -719,7 +715,8 @@ class ModelExtensionRetailcrmHistoryV45 extends ModelExtensionRetailcrmHistory
|
|||||||
'total' => (float)($item['initialPrice'] * $item['quantity']),
|
'total' => (float)($item['initialPrice'] * $item['quantity']),
|
||||||
'product_id' => $productId,
|
'product_id' => $productId,
|
||||||
'quantity' => $item['quantity'],
|
'quantity' => $item['quantity'],
|
||||||
'option' => $options
|
'option' => $options,
|
||||||
|
'reward' => $rewards[$data['customer_group_id']]['points'] * $item['quantity']
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -13,53 +13,56 @@ class ModelExtensionRetailcrmOrder extends Model {
|
|||||||
|
|
||||||
$this->moduleTitle = $this->retailcrm->getModuleTitle();
|
$this->moduleTitle = $this->retailcrm->getModuleTitle();
|
||||||
$this->settings = $this->model_setting_setting->getSetting($this->moduleTitle);
|
$this->settings = $this->model_setting_setting->getSetting($this->moduleTitle);
|
||||||
$this->retailcrmApiClient = $this->retailcrm->getApiClient();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Upload orders to CRM
|
* Upload orders to CRM
|
||||||
*
|
*
|
||||||
* @param array $orders
|
* @param array $orders
|
||||||
*
|
* @param \RetailcrmProxy $retailcrmApiClient
|
||||||
* @return void
|
*
|
||||||
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
public function uploadToCrm($orders)
|
public function uploadToCrm($orders, $retailcrmApiClient)
|
||||||
{
|
{
|
||||||
if ($this->retailcrmApiClient === false) {
|
if ($retailcrmApiClient === false) {
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$ordersToCrm = array();
|
$ordersToCrm = array();
|
||||||
|
|
||||||
foreach($orders as $order) {
|
foreach ($orders as $order) {
|
||||||
$ordersToCrm[] = $this->process($order);
|
$ordersToCrm[] = $this->process($order);
|
||||||
}
|
}
|
||||||
|
|
||||||
$chunkedOrders = array_chunk($ordersToCrm, 50);
|
$chunkedOrders = array_chunk($ordersToCrm, 50);
|
||||||
|
|
||||||
foreach($chunkedOrders as $ordersPart) {
|
foreach($chunkedOrders as $ordersPart) {
|
||||||
$this->retailcrmApiClient->ordersUpload($ordersPart);
|
$retailcrmApiClient->ordersUpload($ordersPart);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return $chunkedOrders;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Send one order by id
|
* Send one order by id
|
||||||
*
|
*
|
||||||
* @param array $order_data
|
* @param array $order_data
|
||||||
*
|
* @param \RetailcrmProxy $retailcrmApiClient
|
||||||
* @return object $result
|
*
|
||||||
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
public function uploadOrder($order_data)
|
public function uploadOrder($order_data, $retailcrmApiClient)
|
||||||
{
|
{
|
||||||
if ($this->retailcrmApiClient === false) {
|
if ($retailcrmApiClient === false) {
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(isset($this->request->post['fromApi'])) {
|
if (isset($this->request->post['fromApi'])) {
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$customers = $this->retailcrmApiClient->customersList(
|
$customers = $retailcrmApiClient->customersList(
|
||||||
array(
|
array(
|
||||||
'name' => $order_data['telephone'],
|
'name' => $order_data['telephone'],
|
||||||
'email' => $order_data['email']
|
'email' => $order_data['email']
|
||||||
@ -78,13 +81,9 @@ class ModelExtensionRetailcrmOrder extends Model {
|
|||||||
|
|
||||||
unset($customers);
|
unset($customers);
|
||||||
|
|
||||||
$result = $this->retailcrmApiClient->ordersCreate($order);
|
$retailcrmApiClient->ordersCreate($order);
|
||||||
|
|
||||||
if ($this->settings[$this->moduleTitle . '_apiversion'] == 'v5' && $result->isSuccessful()) {
|
return $order;
|
||||||
$this->createPayment($order_data, $order_data['order_id']);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -98,7 +97,6 @@ class ModelExtensionRetailcrmOrder extends Model {
|
|||||||
$order = array();
|
$order = array();
|
||||||
|
|
||||||
$this->load->model('catalog/product');
|
$this->load->model('catalog/product');
|
||||||
$payment_code = $order_data['payment_code'];
|
|
||||||
|
|
||||||
if (!empty($order_data['payment_code']) && isset($this->settings[$this->moduleTitle . '_payment'][$order_data['payment_code']])) {
|
if (!empty($order_data['payment_code']) && isset($this->settings[$this->moduleTitle . '_payment'][$order_data['payment_code']])) {
|
||||||
$payment_code = $this->settings[$this->moduleTitle . '_payment'][$order_data['payment_code']];
|
$payment_code = $this->settings[$this->moduleTitle . '_payment'][$order_data['payment_code']];
|
||||||
@ -124,7 +122,7 @@ class ModelExtensionRetailcrmOrder extends Model {
|
|||||||
$order['phone'] = $order_data['telephone'];
|
$order['phone'] = $order_data['telephone'];
|
||||||
$order['customerComment'] = $order_data['comment'];
|
$order['customerComment'] = $order_data['comment'];
|
||||||
|
|
||||||
if(!empty($order_data['email'])) {
|
if (!empty($order_data['email'])) {
|
||||||
$order['email'] = $order_data['email'];
|
$order['email'] = $order_data['email'];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -148,16 +146,14 @@ class ModelExtensionRetailcrmOrder extends Model {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$country = (isset($order_data['shipping_country'])) ? $order_data['shipping_country'] : '' ;
|
$country = (isset($order_data['shipping_country'])) ? $order_data['shipping_country'] : '' ;
|
||||||
|
|
||||||
|
|
||||||
$order['delivery'] = array(
|
$order['delivery'] = array(
|
||||||
'code' => $delivery_code,
|
'code' => isset($delivery_code) ? $delivery_code : '',
|
||||||
'cost' => $deliveryCost,
|
'cost' => $deliveryCost,
|
||||||
'address' => array(
|
'address' => array(
|
||||||
'index' => $order_data['shipping_postcode'],
|
'index' => $order_data['shipping_postcode'],
|
||||||
'city' => $order_data['shipping_city'],
|
'city' => $order_data['shipping_city'],
|
||||||
'country' => $order_data['shipping_country_id'],
|
'region' => $order_data['shipping_zone'],
|
||||||
'region' => $order_data['shipping_zone_id'],
|
|
||||||
'text' => implode(', ', array(
|
'text' => implode(', ', array(
|
||||||
$order_data['shipping_postcode'],
|
$order_data['shipping_postcode'],
|
||||||
$country,
|
$country,
|
||||||
@ -174,7 +170,7 @@ class ModelExtensionRetailcrmOrder extends Model {
|
|||||||
foreach ($orderProducts as $product) {
|
foreach ($orderProducts as $product) {
|
||||||
$offerId = '';
|
$offerId = '';
|
||||||
|
|
||||||
if(!empty($product['option'])) {
|
if (!empty($product['option'])) {
|
||||||
$options = array();
|
$options = array();
|
||||||
|
|
||||||
$productOptions = $this->model_catalog_product->getProductOptions($product['product_id']);
|
$productOptions = $this->model_catalog_product->getProductOptions($product['product_id']);
|
||||||
@ -188,7 +184,7 @@ class ModelExtensionRetailcrmOrder extends Model {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!in_array($option['type'], $offerOptions)) continue;
|
if (!in_array($option['type'], $offerOptions)) continue;
|
||||||
foreach($productOptions as $productOption) {
|
foreach($productOptions as $productOption) {
|
||||||
if($productOption['product_option_id'] = $option['product_option_id']) {
|
if($productOption['product_option_id'] = $option['product_option_id']) {
|
||||||
foreach($productOption['product_option_value'] as $productOptionValue) {
|
foreach($productOption['product_option_value'] as $productOptionValue) {
|
||||||
@ -250,7 +246,7 @@ class ModelExtensionRetailcrmOrder extends Model {
|
|||||||
$customFields = json_decode($order_data['custom_field']);
|
$customFields = json_decode($order_data['custom_field']);
|
||||||
|
|
||||||
foreach ($customFields as $key => $value) {
|
foreach ($customFields as $key => $value) {
|
||||||
if (isset($this->settings[$moduleTitle . '_custom_field']['o_' . $key])) {
|
if (isset($this->settings[$this->moduleTitle . '_custom_field']['o_' . $key])) {
|
||||||
$customFieldsToCrm[$this->settings[$this->moduleTitle . '_custom_field']['o_' . $key]] = $value;
|
$customFieldsToCrm[$this->settings[$this->moduleTitle . '_custom_field']['o_' . $key]] = $value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -262,35 +258,4 @@ class ModelExtensionRetailcrmOrder extends Model {
|
|||||||
|
|
||||||
return $order;
|
return $order;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Create payment
|
|
||||||
*
|
|
||||||
* @param array $order
|
|
||||||
* @param int $order_id
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
protected function createPayment($order, $order_id)
|
|
||||||
{
|
|
||||||
$payment_code = $order['payment_code'];
|
|
||||||
|
|
||||||
foreach ($order['totals'] as $total) {
|
|
||||||
if ($total['code'] == 'total') {
|
|
||||||
$amount = $total['value'];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$payment = array(
|
|
||||||
'externalId' => $order_id,
|
|
||||||
'type' => $this->settings[$this->moduleTitle . '_payment'][$payment_code],
|
|
||||||
'amount' => $amount
|
|
||||||
);
|
|
||||||
|
|
||||||
$payment['order'] = array(
|
|
||||||
'externalId' => $order_id
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->retailcrmApiClient->ordersPaymentCreate($payment);
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
class ModelExtensionRetailcrmPrices extends Model
|
class ModelExtensionRetailcrmPrices extends Model
|
||||||
{
|
{
|
||||||
protected $retailcrmApiClient;
|
|
||||||
protected $settings;
|
protected $settings;
|
||||||
protected $moduleTitle;
|
protected $moduleTitle;
|
||||||
private $options;
|
private $options;
|
||||||
@ -22,25 +21,30 @@ class ModelExtensionRetailcrmPrices extends Model
|
|||||||
|
|
||||||
$this->moduleTitle = $this->retailcrm->getModuleTitle();
|
$this->moduleTitle = $this->retailcrm->getModuleTitle();
|
||||||
$this->settings = $this->model_setting_setting->getSetting($this->moduleTitle);
|
$this->settings = $this->model_setting_setting->getSetting($this->moduleTitle);
|
||||||
$this->retailcrmApiClient = $this->retailcrm->getApiClient();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Upload prices to CRM
|
* Upload prices to CRM
|
||||||
*
|
*
|
||||||
* @param array $products
|
* @param array $products
|
||||||
*
|
* @param \RetailcrmProxy $retailcrmApiClient
|
||||||
* @return void
|
* @return mixed bool | array
|
||||||
*/
|
*/
|
||||||
public function uploadPrices($products)
|
public function uploadPrices($products, $retailcrmApiClient)
|
||||||
{
|
{
|
||||||
$prices = $this->getPrices($products);
|
$prices = $this->getPrices($products, $retailcrmApiClient);
|
||||||
|
|
||||||
|
if ($retailcrmApiClient === false || !$prices) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
$pricesUpload = array_chunk($prices, 250);
|
$pricesUpload = array_chunk($prices, 250);
|
||||||
|
|
||||||
foreach ($pricesUpload as $priceUpload) {
|
foreach ($pricesUpload as $priceUpload) {
|
||||||
$this->retailcrmApiClient->storePricesUpload($priceUpload);
|
$retailcrmApiClient->storePricesUpload($priceUpload);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return $pricesUpload;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -48,17 +52,17 @@ class ModelExtensionRetailcrmPrices extends Model
|
|||||||
*
|
*
|
||||||
* @param array $products
|
* @param array $products
|
||||||
*
|
*
|
||||||
* @return array $prices
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
protected function getPrices($products)
|
protected function getPrices($products, $retailcrmApiClient)
|
||||||
{
|
{
|
||||||
$prices = array();
|
$prices = array();
|
||||||
$site = $this->getSite();
|
$site = $this->getSite($retailcrmApiClient);
|
||||||
|
|
||||||
if (!isset($this->settings[$this->moduleTitle . '_special'])
|
if (!isset($this->settings[$this->moduleTitle . '_special'])
|
||||||
|| $this->settings[$this->moduleTitle . '_apiversion'] == 'v3'
|
|| $this->settings[$this->moduleTitle . '_apiversion'] == 'v3'
|
||||||
) {
|
) {
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($products as $product) {
|
foreach ($products as $product) {
|
||||||
@ -182,12 +186,14 @@ class ModelExtensionRetailcrmPrices extends Model
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Get site
|
* Get site
|
||||||
*
|
*
|
||||||
|
* @param \RetailcrmProxy $retailcrmApiClient
|
||||||
|
*
|
||||||
* @return mixed boolean | string
|
* @return mixed boolean | string
|
||||||
*/
|
*/
|
||||||
private function getSite()
|
private function getSite($retailcrmApiClient)
|
||||||
{
|
{
|
||||||
$response = $this->retailcrmApiClient->sitesList();
|
$response = $retailcrmApiClient->sitesList();
|
||||||
|
|
||||||
if ($response && $response->isSuccessful()) {
|
if ($response && $response->isSuccessful()) {
|
||||||
$sites = $response->sites;
|
$sites = $response->sites;
|
@ -13,11 +13,13 @@ class ControllerApiRetailcrm extends Controller
|
|||||||
$this->load->model('setting/setting');
|
$this->load->model('setting/setting');
|
||||||
$this->load->library('retailcrm/retailcrm');
|
$this->load->library('retailcrm/retailcrm');
|
||||||
$moduleTitle = $this->retailcrm->getModuleTitle();
|
$moduleTitle = $this->retailcrm->getModuleTitle();
|
||||||
$countries = $this->model_setting_setting->getSetting($moduleTitle)[$moduleTitle . '_country'];
|
$setting = $this->model_setting_setting->getSetting($moduleTitle);
|
||||||
$response = array();
|
$response = array();
|
||||||
|
|
||||||
foreach ($countries as $country) {
|
if (isset($setting[$moduleTitle . '_country']) && $setting[$moduleTitle . '_country']) {
|
||||||
$response = array_merge($response, $this->getDeliveryTypesByZones($country));
|
foreach ($setting[$moduleTitle . '_country'] as $country) {
|
||||||
|
$response = array_merge($response, $this->getDeliveryTypesByZones($country));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -7,49 +7,57 @@
|
|||||||
* @package RetailCrm
|
* @package RetailCrm
|
||||||
* @author RetailCrm <integration@retailcrm.ru>
|
* @author RetailCrm <integration@retailcrm.ru>
|
||||||
* @license https://opensource.org/licenses/MIT MIT License
|
* @license https://opensource.org/licenses/MIT MIT License
|
||||||
* @link http://www.retailcrm.ru/docs/Developers/ApiVersion3
|
* @link http://www.retailcrm.ru/docs/Developers/ApiVersion5
|
||||||
*/
|
*/
|
||||||
class ControllerExtensionModuleRetailcrm extends Controller
|
class ControllerExtensionModuleRetailcrm extends Controller {
|
||||||
{
|
|
||||||
|
private $retailcrmApiClient;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->load->library('retailcrm/retailcrm');
|
||||||
|
$this->retailcrmApiClient = $this->retailcrm->getApiClient();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create order on event
|
* Create order on event
|
||||||
*
|
*
|
||||||
|
* @param string $trigger
|
||||||
|
* @param array $data
|
||||||
* @param int $order_id order identificator
|
* @param int $order_id order identificator
|
||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function order_create($parameter1, $parameter2 = null, $parameter3 = null)
|
public function order_create($trigger, $data, $order_id = null) {
|
||||||
{
|
|
||||||
$this->load->model('checkout/order');
|
|
||||||
$this->load->model('account/order');
|
$this->load->model('account/order');
|
||||||
$this->load->library('retailcrm/retailcrm');
|
$this->load->library('retailcrm/retailcrm');
|
||||||
|
|
||||||
$moduleTitle = $this->retailcrm->getModuleTitle();
|
$moduleTitle = $this->retailcrm->getModuleTitle();
|
||||||
$order_id = $parameter3;
|
|
||||||
$data = $this->model_checkout_order->getOrder($order_id);
|
|
||||||
$data['totals'] = $this->model_account_order->getOrderTotals($order_id);
|
|
||||||
|
|
||||||
$data['products'] = $this->model_account_order->getOrderProducts($order_id);
|
foreach ($data['products'] as $key => $product) {
|
||||||
foreach($data['products'] as $key => $product) {
|
|
||||||
$productOptions = $this->model_account_order->getOrderOptions($order_id, $product['order_product_id']);
|
$productOptions = $this->model_account_order->getOrderOptions($order_id, $product['order_product_id']);
|
||||||
|
|
||||||
if(!empty($productOptions))
|
if (!empty($productOptions)) {
|
||||||
$data['products'][$key]['option'] = $productOptions;
|
$data['products'][$key]['option'] = $productOptions;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isset($data['fromApi'])) {
|
if (!isset($data['fromApi'])) {
|
||||||
$this->load->model('setting/setting');
|
$this->load->model('setting/setting');
|
||||||
$status = $this->model_setting_setting->getSetting($moduleTitle);
|
$status = $this->model_setting_setting->getSetting($moduleTitle);
|
||||||
if ($data['order_status_id'] > 0) {
|
|
||||||
|
if (isset($data['order_status_id']) && $data['order_status_id'] > 0) {
|
||||||
$data['order_status'] = $status[$moduleTitle . '_status'][$data['order_status_id']];
|
$data['order_status'] = $status[$moduleTitle . '_status'][$data['order_status_id']];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (file_exists(DIR_APPLICATION . 'model/extension/retailcrm/custom/order.php')) {
|
if (file_exists(DIR_APPLICATION . 'model/extension/retailcrm/custom/order.php')) {
|
||||||
$this->load->model('extension/retailcrm/custom/order');
|
$this->load->model('extension/retailcrm/custom/order');
|
||||||
$this->model_extension_retailcrm_custom_order->sendToCrm($data, $data['order_id']);
|
$order = $this->model_extension_retailcrm_custom_order->processOrder($data);
|
||||||
|
$this->model_extension_retailcrm_custom_order->sendToCrm($order, $this->retailcrmApiClient);
|
||||||
} else {
|
} else {
|
||||||
$this->load->model('extension/retailcrm/order');
|
$this->load->model('extension/retailcrm/order');
|
||||||
$this->model_extension_retailcrm_order->sendToCrm($data, $data['order_id']);
|
$order = $this->model_extension_retailcrm_order->processOrder($data);
|
||||||
|
$this->model_extension_retailcrm_order->sendToCrm($order, $this->retailcrmApiClient);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -57,11 +65,12 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
|||||||
/**
|
/**
|
||||||
* Update order on event
|
* Update order on event
|
||||||
*
|
*
|
||||||
* @param int $order_id order identificator
|
* @param string $trigger
|
||||||
|
* @param array $parameter2
|
||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function order_edit($parameter1, $parameter2 = null) {
|
public function order_edit($trigger, $parameter2 = null) {
|
||||||
$order_id = $parameter2[0];
|
$order_id = $parameter2[0];
|
||||||
|
|
||||||
$this->load->model('checkout/order');
|
$this->load->model('checkout/order');
|
||||||
@ -71,16 +80,19 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
|||||||
$moduleTitle = $this->retailcrm->getModuleTitle();
|
$moduleTitle = $this->retailcrm->getModuleTitle();
|
||||||
$data = $this->model_checkout_order->getOrder($order_id);
|
$data = $this->model_checkout_order->getOrder($order_id);
|
||||||
|
|
||||||
if($data['order_status_id'] == 0) return;
|
if ($data['order_status_id'] == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
$data['products'] = $this->model_account_order->getOrderProducts($order_id);
|
$data['products'] = $this->model_account_order->getOrderProducts($order_id);
|
||||||
$data['totals'] = $this->model_account_order->getOrderTotals($order_id);
|
$data['totals'] = $this->model_account_order->getOrderTotals($order_id);
|
||||||
|
|
||||||
foreach($data['products'] as $key => $product) {
|
foreach ($data['products'] as $key => $product) {
|
||||||
$productOptions = $this->model_account_order->getOrderOptions($order_id, $product['order_product_id']);
|
$productOptions = $this->model_account_order->getOrderOptions($order_id, $product['order_product_id']);
|
||||||
|
|
||||||
if(!empty($productOptions))
|
if (!empty($productOptions)) {
|
||||||
$data['products'][$key]['option'] = $productOptions;
|
$data['products'][$key]['option'] = $productOptions;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isset($data['fromApi'])) {
|
if (!isset($data['fromApi'])) {
|
||||||
@ -93,10 +105,12 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
|||||||
|
|
||||||
if (file_exists(DIR_APPLICATION . 'model/extension/retailcrm/custom/order.php')) {
|
if (file_exists(DIR_APPLICATION . 'model/extension/retailcrm/custom/order.php')) {
|
||||||
$this->load->model('extension/retailcrm/custom/order');
|
$this->load->model('extension/retailcrm/custom/order');
|
||||||
$this->model_extension_retailcrm_custom_order->changeInCrm($data, $data['order_id']);
|
$order = $this->model_extension_retailcrm_custom_order->processOrder($data, false);
|
||||||
|
$this->model_extension_retailcrm_custom_order->sendToCrm($order, $this->retailcrmApiClient, false);
|
||||||
} else {
|
} else {
|
||||||
$this->load->model('extension/retailcrm/order');
|
$this->load->model('extension/retailcrm/order');
|
||||||
$this->model_extension_retailcrm_order->changeInCrm($data, $data['order_id']);
|
$order = $this->model_extension_retailcrm_order->processOrder($data, false);
|
||||||
|
$this->model_extension_retailcrm_order->sendToCrm($order, $this->retailcrmApiClient, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -132,10 +146,10 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
|||||||
|
|
||||||
if (file_exists(DIR_APPLICATION . 'model/extension/retailcrm/custom/customer.php')) {
|
if (file_exists(DIR_APPLICATION . 'model/extension/retailcrm/custom/customer.php')) {
|
||||||
$this->load->model('extension/retailcrm/custom/customer');
|
$this->load->model('extension/retailcrm/custom/customer');
|
||||||
$this->model_extension_retailcrm_custom_customer->sendToCrm($customer);
|
$this->model_extension_retailcrm_custom_customer->sendToCrm($customer, $this->retailcrmApiClient);
|
||||||
} else {
|
} else {
|
||||||
$this->load->model('extension/retailcrm/customer');
|
$this->load->model('extension/retailcrm/customer');
|
||||||
$this->model_extension_retailcrm_customer->sendToCrm($customer);
|
$this->model_extension_retailcrm_customer->sendToCrm($customer, $this->retailcrmApiClient);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -157,10 +171,10 @@ class ControllerExtensionModuleRetailcrm extends Controller
|
|||||||
|
|
||||||
if (file_exists(DIR_APPLICATION . 'model/extension/retailcrm/custom/customer.php')) {
|
if (file_exists(DIR_APPLICATION . 'model/extension/retailcrm/custom/customer.php')) {
|
||||||
$this->load->model('extension/retailcrm/custom/customer');
|
$this->load->model('extension/retailcrm/custom/customer');
|
||||||
$this->model_extension_retailcrm_custom_customer->changeInCrm($customer);
|
$this->model_extension_retailcrm_custom_customer->changeInCrm($customer, $this->retailcrmApiClient);
|
||||||
} else {
|
} else {
|
||||||
$this->load->model('extension/retailcrm/customer');
|
$this->load->model('extension/retailcrm/customer');
|
||||||
$this->model_extension_retailcrm_customer->changeInCrm($customer);
|
$this->model_extension_retailcrm_customer->changeInCrm($customer, $this->retailcrmApiClient);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -3,7 +3,6 @@
|
|||||||
class ModelExtensionRetailcrmCustomer extends Model {
|
class ModelExtensionRetailcrmCustomer extends Model {
|
||||||
protected $settings;
|
protected $settings;
|
||||||
protected $moduleTitle;
|
protected $moduleTitle;
|
||||||
protected $retailcrmApiClient;
|
|
||||||
|
|
||||||
public function __construct($registry)
|
public function __construct($registry)
|
||||||
{
|
{
|
||||||
@ -13,7 +12,6 @@ class ModelExtensionRetailcrmCustomer extends Model {
|
|||||||
|
|
||||||
$this->moduleTitle = $this->retailcrm->getModuleTitle();
|
$this->moduleTitle = $this->retailcrm->getModuleTitle();
|
||||||
$this->settings = $this->model_setting_setting->getSetting($this->moduleTitle);
|
$this->settings = $this->model_setting_setting->getSetting($this->moduleTitle);
|
||||||
$this->retailcrmApiClient = $this->retailcrm->getApiClient();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -21,17 +19,19 @@ class ModelExtensionRetailcrmCustomer extends Model {
|
|||||||
*
|
*
|
||||||
* @param array $customer
|
* @param array $customer
|
||||||
*
|
*
|
||||||
* @return void
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
public function sendToCrm($customer)
|
public function sendToCrm($customer, $retailcrmApiClient)
|
||||||
{
|
{
|
||||||
if(empty($customer) || $this->retailcrmApiClient === false) {
|
if (empty($customer) || $retailcrmApiClient === false) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$customerToCrm = $this->process($customer);
|
$customerToCrm = $this->process($customer);
|
||||||
|
|
||||||
$this->retailcrmApiClient->customersCreate($customerToCrm);
|
$retailcrmApiClient->customersCreate($customerToCrm);
|
||||||
|
|
||||||
|
return $customerToCrm;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -39,24 +39,26 @@ class ModelExtensionRetailcrmCustomer extends Model {
|
|||||||
*
|
*
|
||||||
* @param array $customer
|
* @param array $customer
|
||||||
*
|
*
|
||||||
* @return void
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
public function changeInCrm($customer)
|
public function changeInCrm($customer, $retailcrmApiClient)
|
||||||
{
|
{
|
||||||
if(empty($customer) || $this->retailcrmApiClient === false) {
|
if (empty($customer) || $retailcrmApiClient === false) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$customerToCrm = $this->process($customer);
|
$customerToCrm = $this->process($customer);
|
||||||
|
|
||||||
$this->retailcrmApiClient->customersEdit($customerToCrm);
|
$retailcrmApiClient->customersEdit($customerToCrm);
|
||||||
|
|
||||||
|
return $customerToCrm;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Process customer
|
* Process customer
|
||||||
*
|
*
|
||||||
* @param array $customer
|
* @param array $customer
|
||||||
*
|
*
|
||||||
* @return array $customerToCrm
|
* @return array $customerToCrm
|
||||||
*/
|
*/
|
||||||
private function process($customer) {
|
private function process($customer) {
|
@ -3,131 +3,66 @@
|
|||||||
class ModelExtensionRetailcrmOrder extends Model {
|
class ModelExtensionRetailcrmOrder extends Model {
|
||||||
protected $settings;
|
protected $settings;
|
||||||
protected $moduleTitle;
|
protected $moduleTitle;
|
||||||
protected $retailcrmApiClient;
|
|
||||||
|
|
||||||
public function __construct($registry)
|
public function __construct($registry) {
|
||||||
{
|
|
||||||
parent::__construct($registry);
|
parent::__construct($registry);
|
||||||
$this->load->model('setting/setting');
|
$this->load->model('setting/setting');
|
||||||
$this->load->library('retailcrm/retailcrm');
|
$this->load->library('retailcrm/retailcrm');
|
||||||
|
|
||||||
$this->moduleTitle = $this->retailcrm->getModuleTitle();
|
$this->moduleTitle = $this->retailcrm->getModuleTitle();
|
||||||
$this->settings = $this->model_setting_setting->getSetting($this->moduleTitle);
|
$this->settings = $this->model_setting_setting->getSetting($this->moduleTitle);
|
||||||
$this->retailcrmApiClient = $this->retailcrm->getApiClient();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create order in CRM
|
* Create order in CRM
|
||||||
*
|
*
|
||||||
* @param array $order_data
|
* @param array $order
|
||||||
* @param int $order_id
|
* @param \RetailcrmProxy $retailcrmApiClient
|
||||||
*
|
* @param bool $create (default = true)
|
||||||
* @return void
|
*
|
||||||
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
public function sendToCrm($order_data, $order_id)
|
public function sendToCrm($order, $retailcrmApiClient, $create = true) {
|
||||||
{
|
if (isset($this->request->post['fromApi']) || $retailcrmApiClient === false) {
|
||||||
if(isset($this->request->post['fromApi']) || $this->retailcrmApiClient === false) {
|
return false;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$order = $this->processOrder($order_data, $order_id);
|
if (!isset($order['customer']['externalId'])) {
|
||||||
|
$customer = $this->searchCustomer($order['phone'], $order['email'], $retailcrmApiClient);
|
||||||
|
|
||||||
$customers = $this->retailcrmApiClient->customersList(
|
if ($customer) {
|
||||||
array(
|
|
||||||
'name' => $order_data['telephone'],
|
|
||||||
'email' => $order_data['email']
|
|
||||||
),
|
|
||||||
1,
|
|
||||||
100
|
|
||||||
);
|
|
||||||
|
|
||||||
if($customers) {
|
|
||||||
foreach ($customers['customers'] as $customer) {
|
|
||||||
$order['customer']['id'] = $customer['id'];
|
$order['customer']['id'] = $customer['id'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
unset($customers);
|
if ($create) {
|
||||||
|
$retailcrmApiClient->ordersCreate($order);
|
||||||
|
} else {
|
||||||
|
$order_payment = reset($order['payments']);
|
||||||
|
unset($order['payments']);
|
||||||
|
$response = $retailcrmApiClient->ordersEdit($order);
|
||||||
|
|
||||||
$response = $this->retailcrmApiClient->ordersCreate($order);
|
if ($this->settings[$this->moduleTitle . '_apiversion'] == 'v5' && $response->isSuccessful()) {
|
||||||
|
$this->updatePayment($order_payment, $order['externalId'], $retailcrmApiClient);
|
||||||
if ($this->settings[$this->moduleTitle . '_apiversion'] == 'v5' && $response->isSuccessful()) {
|
|
||||||
$this->createPayment($order_data, $order_id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Edit order in CRM
|
|
||||||
*
|
|
||||||
* @param array $order_data
|
|
||||||
* @param int $order_id
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function changeInCrm($order_data, $order_id)
|
|
||||||
{
|
|
||||||
if(isset($this->request->post['fromApi']) || $this->retailcrmApiClient === false) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$order = $this->processOrder($order_data, $order_id);
|
|
||||||
|
|
||||||
$customers = $this->retailcrmApiClient->customersList(
|
|
||||||
array(
|
|
||||||
'name' => $order_data['telephone'],
|
|
||||||
'email' => $order_data['email']
|
|
||||||
),
|
|
||||||
1,
|
|
||||||
100
|
|
||||||
);
|
|
||||||
|
|
||||||
if($customers) {
|
|
||||||
foreach ($customers['customers'] as $customer) {
|
|
||||||
$order['customer']['id'] = $customer['id'];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
unset($customers);
|
return $order;
|
||||||
|
|
||||||
$response = $this->retailcrmApiClient->ordersEdit($order);
|
|
||||||
|
|
||||||
if ($this->settings[$this->moduleTitle . '_apiversion'] == 'v5' && $response->isSuccessful()) {
|
|
||||||
$response_order = $this->retailcrmApiClient->ordersGet($order_id);
|
|
||||||
if ($response_order->isSuccessful()) {
|
|
||||||
$order_info = $response_order['order'];
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach ($order_info['payments'] as $payment_data) {
|
|
||||||
if (isset($payment_data['externalId']) && $payment_data['externalId'] == $order_id) {
|
|
||||||
$payment = $payment_data;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isset($payment) && $payment['type'] != $this->settings[$this->moduleTitle . '_payment'][$order_data['payment_code']]) {
|
|
||||||
$response = $this->retailcrmApiClient->ordersPaymentDelete($payment['id']);
|
|
||||||
|
|
||||||
if ($response->isSuccessful()) {
|
|
||||||
$this->createPayment($order_data, $order_id);
|
|
||||||
}
|
|
||||||
} elseif (isset($payment) && $payment['type'] == $this->settings[$this->moduleTitle . '_payment'][$order_data['payment_code']]) {
|
|
||||||
$this->editPayment($order_data, $order_id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Process order
|
* Process order
|
||||||
*
|
*
|
||||||
* @param array $order_data
|
* @param array $order_data
|
||||||
* @param int $order_id
|
* @param bool $create (default = true)
|
||||||
*
|
*
|
||||||
* @return array $order
|
* @return array $order
|
||||||
*/
|
*/
|
||||||
protected function processOrder($order_data, $order_id)
|
public function processOrder($order_data, $create = true) {
|
||||||
{
|
|
||||||
$this->load->model('setting/setting');
|
$this->load->model('setting/setting');
|
||||||
$this->load->model('catalog/product');
|
$this->load->model('catalog/product');
|
||||||
$this->settings = $this->model_setting_setting->getSetting($this->moduleTitle);
|
$this->settings = $this->model_setting_setting->getSetting($this->moduleTitle);
|
||||||
|
$order_id = $order_data['order_id'];
|
||||||
|
|
||||||
if (!empty($order_data['payment_code']) && isset($this->settings[$this->moduleTitle . '_payment'][$order_data['payment_code']])) {
|
if (!empty($order_data['payment_code']) && isset($this->settings[$this->moduleTitle . '_payment'][$order_data['payment_code']])) {
|
||||||
$payment_code = $this->settings[$this->moduleTitle . '_payment'][$order_data['payment_code']];
|
$payment_code = $this->settings[$this->moduleTitle . '_payment'][$order_data['payment_code']];
|
||||||
@ -153,7 +88,11 @@ class ModelExtensionRetailcrmOrder extends Model {
|
|||||||
$order['phone'] = $order_data['telephone'];
|
$order['phone'] = $order_data['telephone'];
|
||||||
$order['customerComment'] = $order_data['comment'];
|
$order['customerComment'] = $order_data['comment'];
|
||||||
|
|
||||||
if(!empty($order_data['email'])) {
|
if ($order_data['customer_id']) {
|
||||||
|
$order['customer']['externalId'] = $order_data['customer_id'];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($order_data['email'])) {
|
||||||
$order['email'] = $order_data['email'];
|
$order['email'] = $order_data['email'];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -161,18 +100,18 @@ class ModelExtensionRetailcrmOrder extends Model {
|
|||||||
$couponTotal = 0;
|
$couponTotal = 0;
|
||||||
$orderTotals = isset($order_data['totals']) ? $order_data['totals'] : $order_data['order_total'] ;
|
$orderTotals = isset($order_data['totals']) ? $order_data['totals'] : $order_data['order_total'] ;
|
||||||
|
|
||||||
foreach ($orderTotals as $totals) {
|
$totals = $this->explodeTotals($orderTotals);
|
||||||
if ($totals['code'] == 'shipping') {
|
|
||||||
$deliveryCost = $totals['value'];
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($totals['code'] == 'coupon') {
|
if (isset($totals['shipping'])) {
|
||||||
$couponTotal += abs($totals['value']);
|
$deliveryCost = $totals['shipping'];
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($totals['code'] == 'reward') {
|
if (isset($totals['coupon'])) {
|
||||||
$couponTotal += abs($totals['value']);
|
$couponTotal += abs($totals['coupon']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isset($totals['reward'])) {
|
||||||
|
$couponTotal += abs($totals['reward']);
|
||||||
}
|
}
|
||||||
|
|
||||||
$order['createdAt'] = $order_data['date_added'];
|
$order['createdAt'] = $order_data['date_added'];
|
||||||
@ -188,10 +127,10 @@ class ModelExtensionRetailcrmOrder extends Model {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$country = (isset($order_data['shipping_country'])) ? $order_data['shipping_country'] : '' ;
|
$country = isset($order_data['shipping_country']) ? $order_data['shipping_country'] : '' ;
|
||||||
|
|
||||||
$order['delivery'] = array(
|
$order['delivery'] = array(
|
||||||
'code' => $delivery_code,
|
'code' => isset($delivery_code) ? $delivery_code : '',
|
||||||
'address' => array(
|
'address' => array(
|
||||||
'index' => $order_data['shipping_postcode'],
|
'index' => $order_data['shipping_postcode'],
|
||||||
'city' => $order_data['shipping_city'],
|
'city' => $order_data['shipping_city'],
|
||||||
@ -207,10 +146,10 @@ class ModelExtensionRetailcrmOrder extends Model {
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
if(!empty($deliveryCost)){
|
if (!empty($deliveryCost)){
|
||||||
$order['delivery']['cost'] = $deliveryCost;
|
$order['delivery']['cost'] = $deliveryCost;
|
||||||
}
|
}
|
||||||
|
|
||||||
$orderProducts = isset($order_data['products']) ? $order_data['products'] : $order_data['order_product'];
|
$orderProducts = isset($order_data['products']) ? $order_data['products'] : $order_data['order_product'];
|
||||||
$offerOptions = array('select', 'radio');
|
$offerOptions = array('select', 'radio');
|
||||||
|
|
||||||
@ -222,7 +161,7 @@ class ModelExtensionRetailcrmOrder extends Model {
|
|||||||
|
|
||||||
$productOptions = $this->model_catalog_product->getProductOptions($product['product_id']);
|
$productOptions = $this->model_catalog_product->getProductOptions($product['product_id']);
|
||||||
|
|
||||||
foreach($product['option'] as $option) {
|
foreach ($product['option'] as $option) {
|
||||||
if ($option['type'] == 'checkbox') {
|
if ($option['type'] == 'checkbox') {
|
||||||
$properties[] = array(
|
$properties[] = array(
|
||||||
'code' => $option['product_option_value_id'],
|
'code' => $option['product_option_value_id'],
|
||||||
@ -231,7 +170,7 @@ class ModelExtensionRetailcrmOrder extends Model {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!in_array($option['type'], $offerOptions)) continue;
|
if (!in_array($option['type'], $offerOptions)) continue;
|
||||||
foreach($productOptions as $productOption) {
|
foreach($productOptions as $productOption) {
|
||||||
if($productOption['product_option_id'] = $option['product_option_id']) {
|
if($productOption['product_option_id'] = $option['product_option_id']) {
|
||||||
foreach($productOption['product_option_value'] as $productOptionValue) {
|
foreach($productOption['product_option_value'] as $productOptionValue) {
|
||||||
@ -246,7 +185,7 @@ class ModelExtensionRetailcrmOrder extends Model {
|
|||||||
ksort($options);
|
ksort($options);
|
||||||
|
|
||||||
$offerId = array();
|
$offerId = array();
|
||||||
foreach($options as $optionKey => $optionValue) {
|
foreach ($options as $optionKey => $optionValue) {
|
||||||
$offerId[] = $optionKey.'-'.$optionValue;
|
$offerId[] = $optionKey.'-'.$optionValue;
|
||||||
}
|
}
|
||||||
$offerId = implode('_', $offerId);
|
$offerId = implode('_', $offerId);
|
||||||
@ -295,64 +234,89 @@ class ModelExtensionRetailcrmOrder extends Model {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$payment = array(
|
||||||
|
'externalId' => $order_id,
|
||||||
|
'type' => $payment_code,
|
||||||
|
'amount' => $totals['total']
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!$create) {
|
||||||
|
$payment['order'] = array(
|
||||||
|
'externalId' => $order_id
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$order['payments'][] = $payment;
|
||||||
|
|
||||||
return $order;
|
return $order;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create payment
|
* Update payment in CRM
|
||||||
*
|
*
|
||||||
* @param array $order
|
* @param array $order_payment
|
||||||
* @param int $order_id
|
* @param int $orderId
|
||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
protected function createPayment($order, $order_id)
|
private function updatePayment($order_payment, $orderId, $retailcrmApiClient) {
|
||||||
{
|
$response_order = $retailcrmApiClient->ordersGet($orderId);
|
||||||
$payment_code = $order['payment_code'];
|
|
||||||
|
|
||||||
foreach ($order['totals'] as $total) {
|
if ($response_order->isSuccessful()) {
|
||||||
if ($total['code'] == 'total') {
|
$order_info = $response_order['order'];
|
||||||
$amount = $total['value'];
|
}
|
||||||
|
|
||||||
|
foreach ($order_info['payments'] as $payment_data) {
|
||||||
|
if (isset($payment_data['externalId']) && $payment_data['externalId'] == $orderId) {
|
||||||
|
$payment = $payment_data;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$payment = array(
|
if (isset($payment) && $payment['type'] != $order_payment['type']) {
|
||||||
'externalId' => $order_id,
|
$response = $retailcrmApiClient->ordersPaymentDelete($payment['id']);
|
||||||
'type' => $this->settings[$this->moduleTitle . '_payment'][$payment_code],
|
|
||||||
'amount' => $amount
|
if ($response->isSuccessful()) {
|
||||||
|
$retailcrmApiClient->ordersPaymentCreate($order_payment);
|
||||||
|
}
|
||||||
|
} elseif (isset($payment) && $payment['type'] == $order_payment['type']) {
|
||||||
|
$retailcrmApiClient->ordersPaymentEdit($order_payment);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function searchCustomer($phone, $email, $retailcrmApiClient) {
|
||||||
|
$customer = array();
|
||||||
|
|
||||||
|
$response = $retailcrmApiClient->customersList(
|
||||||
|
array(
|
||||||
|
'name' => $phone,
|
||||||
|
'email' => $email
|
||||||
|
),
|
||||||
|
1,
|
||||||
|
100
|
||||||
);
|
);
|
||||||
|
|
||||||
$payment['order'] = array(
|
if ($response->isSuccessful()) {
|
||||||
'externalId' => $order_id
|
if ($response['customers']) {
|
||||||
);
|
$customer = end($response['customers']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$this->retailcrmApiClient->ordersPaymentCreate($payment);
|
return $customer;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Edit payment
|
* @param $totals
|
||||||
*
|
*
|
||||||
* @param array $order
|
* @return array
|
||||||
* @param int $order_id
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
*/
|
||||||
protected function editPayment($order, $order_id)
|
private function explodeTotals($totals)
|
||||||
{
|
{
|
||||||
$payment_code = $order['payment_code'];
|
$resultTotals = array();
|
||||||
|
|
||||||
foreach ($order['totals'] as $total) {
|
foreach ($totals as $total) {
|
||||||
if ($total['code'] == 'total') {
|
$resultTotals[$total['code']] = $total['value'];
|
||||||
$amount = $total['value'];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$payment = array(
|
return $resultTotals;
|
||||||
'externalId' => $order_id,
|
|
||||||
'type' => $this->settings[$this->moduleTitle . '_payment'][$payment_code],
|
|
||||||
'amount' => $amount
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->retailcrmApiClient->ordersPaymentEdit($payment);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -30,8 +30,8 @@ class OpencartApiClient {
|
|||||||
$cookieFile = explode("\n", $cookieFile);
|
$cookieFile = explode("\n", $cookieFile);
|
||||||
|
|
||||||
$cookies = array();
|
$cookies = array();
|
||||||
foreach($cookieFile as $line) {
|
foreach ($cookieFile as $line) {
|
||||||
if(empty($line) OR $line{0} == '#') {
|
if (empty($line) OR $line{0} == '#') {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
@ -12,35 +12,41 @@ class Retailcrm {
|
|||||||
{
|
{
|
||||||
$this->registry = $registry;
|
$this->registry = $registry;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function __get($name) {
|
public function __get($name) {
|
||||||
return $this->registry->get($name);
|
return $this->registry->get($name);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get api client object
|
* Get api client object
|
||||||
*
|
*
|
||||||
* @param string $apiUrl (default = null)
|
* @param string $apiUrl (default = null)
|
||||||
* @param string $apiKey (default = null)
|
* @param string $apiKey (default = null)
|
||||||
* @param string $apiVersion (default = null)
|
* @param string $apiVersion (default = null)
|
||||||
*
|
*
|
||||||
* @return mixed object | boolean
|
* @return mixed object | boolean
|
||||||
*/
|
*/
|
||||||
public function getApiClient($apiUrl = null, $apiKey = null, $apiVersion = null)
|
public function getApiClient($apiUrl = null, $apiKey = null, $apiVersion = null)
|
||||||
{
|
{
|
||||||
$this->load->model('setting/setting');
|
$this->load->model('setting/setting');
|
||||||
|
|
||||||
$setting = $this->model_setting_setting->getSetting($this->getModuleTitle());
|
$setting = $this->model_setting_setting->getSetting($this->getModuleTitle());
|
||||||
|
|
||||||
|
if (!$setting) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if ($apiUrl === null && $apiKey === null) {
|
if ($apiUrl === null && $apiKey === null) {
|
||||||
$apiUrl = $setting[$this->getModuleTitle() . '_url'];
|
$apiUrl = isset($setting[$this->getModuleTitle() . '_url'])
|
||||||
$apiKey = $setting[$this->getModuleTitle() . '_apikey'];
|
? $setting[$this->getModuleTitle() . '_url'] : '';
|
||||||
$apiVersion = $setting[$this->getModuleTitle() . '_apiversion'];
|
$apiKey = isset($setting[$this->getModuleTitle() . '_apikey'])
|
||||||
|
? $setting[$this->getModuleTitle() . '_apikey'] : '';
|
||||||
|
$apiVersion = isset($setting[$this->getModuleTitle() . '_apiversion'])
|
||||||
|
? $setting[$this->getModuleTitle() . '_apiversion'] : '';
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($apiUrl && $apiKey) {
|
if ($apiUrl && $apiKey) {
|
||||||
$this->apiClient = new \RetailcrmProxy($apiUrl, $apiKey, DIR_LOGS . 'retailcrm.log', $apiVersion);
|
return new \RetailcrmProxy($apiUrl, $apiKey, DIR_LOGS . 'retailcrm.log', $apiVersion);
|
||||||
|
|
||||||
return $this->apiClient;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
@ -48,9 +54,9 @@ class Retailcrm {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Get opencart api client
|
* Get opencart api client
|
||||||
*
|
*
|
||||||
* @param object $registry
|
* @param object $registry
|
||||||
*
|
*
|
||||||
* @return \OpencartApiClient
|
* @return \OpencartApiClient
|
||||||
*/
|
*/
|
||||||
public function getOcApiClient($registry)
|
public function getOcApiClient($registry)
|
||||||
@ -60,7 +66,7 @@ class Retailcrm {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Get module title for this version
|
* Get module title for this version
|
||||||
*
|
*
|
||||||
* @return string $title
|
* @return string $title
|
||||||
*/
|
*/
|
||||||
public function getModuleTitle()
|
public function getModuleTitle()
|
||||||
@ -76,7 +82,7 @@ class Retailcrm {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Get token param name
|
* Get token param name
|
||||||
*
|
*
|
||||||
* @return string $token
|
* @return string $token
|
||||||
*/
|
*/
|
||||||
public function getTokenTitle()
|
public function getTokenTitle()
|
57
tests/admin/ControllerRetailcrmAdminTest.php
Normal file
57
tests/admin/ControllerRetailcrmAdminTest.php
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
class ControllerRetailcrmAdminTest extends OpenCartTest
|
||||||
|
{
|
||||||
|
const MODULE_TITLE = 'retailcrm';
|
||||||
|
|
||||||
|
public function setUp()
|
||||||
|
{
|
||||||
|
$query = $this->db->query("SELECT permission from ".DB_PREFIX."user_group WHERE name = 'Administrator'");
|
||||||
|
$permissions = json_decode($query->row['permission'],true);
|
||||||
|
|
||||||
|
if (!in_array('extension/module/retailcrm',$permissions['access'])) {
|
||||||
|
$permissions['access'][] = 'extension/module/retailcrm';
|
||||||
|
$this->db->query("UPDATE ".DB_PREFIX."user_group SET permission='".$this->db->escape(json_encode($permissions))."' WHERE name = 'Administrator'");
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->retailcrm = $this->getMockBuilder('\retailcrm\Retailcrm')
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->getMock();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testIndex()
|
||||||
|
{
|
||||||
|
$this->login('admin', 'admin');
|
||||||
|
|
||||||
|
$response = $this->dispatchAction('extension/module/retailcrm');
|
||||||
|
$this->assertRegExp('/Connection settings/', $response->getOutput());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testIcml()
|
||||||
|
{
|
||||||
|
$this->login('admin', 'admin');
|
||||||
|
|
||||||
|
$response = $this->dispatchAction('extension/module/retailcrm/icml');
|
||||||
|
|
||||||
|
$this->assertRegExp('/Connection settings/', $response->getOutput());
|
||||||
|
$this->assertFileExists(DIR_SYSTEM . '../' . 'retailcrm.xml');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testInstallCollector()
|
||||||
|
{
|
||||||
|
$this->login('admin', 'admin');
|
||||||
|
|
||||||
|
$response = $this->dispatchAction('extension/module/retailcrm/install_collector');
|
||||||
|
|
||||||
|
$this->assertRegExp('/Connection settings/', $response->getOutput());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testUnnstallCollector()
|
||||||
|
{
|
||||||
|
$this->login('admin', 'admin');
|
||||||
|
|
||||||
|
$response = $this->dispatchAction('extension/module/retailcrm/uninstall_collector');
|
||||||
|
|
||||||
|
$this->assertRegExp('/Connection settings/', $response->getOutput());
|
||||||
|
}
|
||||||
|
}
|
59
tests/admin/ModelRetailcrmCustomerAdminTest.php
Normal file
59
tests/admin/ModelRetailcrmCustomerAdminTest.php
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
class ModelRetailcrmCustomerAdminTest extends OpenCartTest
|
||||||
|
{
|
||||||
|
private $customerModel;
|
||||||
|
private $apiClientMock;
|
||||||
|
|
||||||
|
const CUSTOMER_ID = 1;
|
||||||
|
|
||||||
|
public function setUp()
|
||||||
|
{
|
||||||
|
parent::setUp();
|
||||||
|
|
||||||
|
$this->customerModel = $this->loadModel('extension/retailcrm/customer');
|
||||||
|
|
||||||
|
$this->apiClientMock = $this->getMockBuilder(\RetailcrmProxy::class)
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->setMethods(array(
|
||||||
|
'customersUpload',
|
||||||
|
'customersEdit'
|
||||||
|
))
|
||||||
|
->getMock();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testUploadToCrm()
|
||||||
|
{
|
||||||
|
$customerModel = $this->loadModel('customer/customer');
|
||||||
|
$customers = $customerModel->getCustomers();
|
||||||
|
|
||||||
|
$customersSend = $this->customerModel->uploadToCrm($customers, $this->apiClientMock);
|
||||||
|
$customer = $customersSend[0][0];
|
||||||
|
|
||||||
|
$this->assertInternalType('array', $customersSend);
|
||||||
|
$this->assertInternalType('array', $customersSend[0]);
|
||||||
|
$this->assertArrayHasKey('externalId', $customer);
|
||||||
|
$this->assertArrayHasKey('firstName', $customer);
|
||||||
|
$this->assertArrayHasKey('lastName', $customer);
|
||||||
|
$this->assertArrayHasKey('email', $customer);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testChangeInCrm()
|
||||||
|
{
|
||||||
|
$customerModel = $this->loadModel('customer/customer');
|
||||||
|
$customer = $customerModel->getCustomer(self::CUSTOMER_ID);
|
||||||
|
|
||||||
|
$customerSend = $this->customerModel->changeInCrm($customer, $this->apiClientMock);
|
||||||
|
|
||||||
|
$this->assertArrayHasKey('externalId', $customerSend);
|
||||||
|
$this->assertEquals(self::CUSTOMER_ID, $customerSend['externalId']);
|
||||||
|
$this->assertArrayHasKey('firstName', $customerSend);
|
||||||
|
$this->assertEquals('Test', $customerSend['firstName']);
|
||||||
|
$this->assertArrayHasKey('lastName', $customerSend);
|
||||||
|
$this->assertEquals('Test', $customerSend['lastName']);
|
||||||
|
$this->assertArrayHasKey('email', $customerSend);
|
||||||
|
$this->assertEquals('test@mail.ru', $customerSend['email']);
|
||||||
|
$this->assertArrayHasKey('phones', $customerSend);
|
||||||
|
$this->assertEquals('+7 (000) 000-00-00', $customerSend['phones'][0]['number']);
|
||||||
|
}
|
||||||
|
}
|
185
tests/admin/ModelRetailcrmOrderAdminTest.php
Normal file
185
tests/admin/ModelRetailcrmOrderAdminTest.php
Normal file
@ -0,0 +1,185 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
class ModelRetailcrmOrderAdminTest extends OpenCartTest
|
||||||
|
{
|
||||||
|
private $orderModel;
|
||||||
|
private $apiClientMock;
|
||||||
|
private $settingModel;
|
||||||
|
private $retailcrm;
|
||||||
|
|
||||||
|
const CUSTOMER_ID = 1;
|
||||||
|
const ORDER_WITH_CUST_ID = 1;
|
||||||
|
const ORDER_ID = 2;
|
||||||
|
|
||||||
|
public function setUp()
|
||||||
|
{
|
||||||
|
parent::setUp();
|
||||||
|
|
||||||
|
$this->orderModel = $this->loadModel('extension/retailcrm/order');
|
||||||
|
|
||||||
|
$this->apiClientMock = $this->getMockBuilder(\RetailcrmProxy::class)
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->setMethods(array(
|
||||||
|
'ordersUpload',
|
||||||
|
'customersList',
|
||||||
|
'ordersCreate',
|
||||||
|
'ordersPaymentCreate'
|
||||||
|
))
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
$this->settingModel = $this->loadModel('setting/setting');
|
||||||
|
$this->retailcrm = new \retailcrm\Retailcrm(self::$registry);
|
||||||
|
|
||||||
|
$this->settingModel->editSetting(
|
||||||
|
$this->retailcrm->getModuleTitle(),
|
||||||
|
array(
|
||||||
|
$this->retailcrm->getModuleTitle() . '_apiversion' => 'v5',
|
||||||
|
$this->retailcrm->getModuleTitle() . '_status' => array(
|
||||||
|
1 => 'new'
|
||||||
|
),
|
||||||
|
$this->retailcrm->getModuleTitle() . '_delivery' => array(
|
||||||
|
'flat.flat' => 'flat'
|
||||||
|
),
|
||||||
|
$this->retailcrm->getModuleTitle() . '_payment' => array(
|
||||||
|
'cod' => 'cod'
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testUploadToCrm()
|
||||||
|
{
|
||||||
|
$saleOrderModel = $this->loadModel('sale/order');
|
||||||
|
$orders = $saleOrderModel->getOrders();
|
||||||
|
$fullOrders = array();
|
||||||
|
|
||||||
|
foreach ($orders as $order) {
|
||||||
|
$fullOrder = $saleOrderModel->getOrder($order['order_id']);
|
||||||
|
|
||||||
|
$fullOrder['order_total'] = $saleOrderModel->getOrderTotals($order['order_id']);
|
||||||
|
$fullOrder['products'] = $saleOrderModel->getOrderProducts($order['order_id']);
|
||||||
|
|
||||||
|
foreach($fullOrder['products'] as $key => $product) {
|
||||||
|
$fullOrder['products'][$key]['option'] = $saleOrderModel->getOrderOptions($product['order_id'], $product['order_product_id']);
|
||||||
|
}
|
||||||
|
|
||||||
|
$fullOrders[] = $fullOrder;
|
||||||
|
}
|
||||||
|
|
||||||
|
$chunkedOrders = $this->orderModel->uploadToCrm($fullOrders, $this->apiClientMock);
|
||||||
|
|
||||||
|
$order = $chunkedOrders[0][0];
|
||||||
|
|
||||||
|
$this->assertInternalType('array', $chunkedOrders);
|
||||||
|
$this->assertInternalType('array', $chunkedOrders[0]);
|
||||||
|
$this->assertNotEmpty($chunkedOrders[0]);
|
||||||
|
$this->assertArrayHasKey('externalId', $order);
|
||||||
|
$this->assertArrayHasKey('number', $order);
|
||||||
|
$this->assertArrayHasKey('firstName', $order);
|
||||||
|
$this->assertArrayHasKey('lastName', $order);
|
||||||
|
$this->assertArrayHasKey('email', $order);
|
||||||
|
$this->assertArrayHasKey('phone', $order);
|
||||||
|
$this->assertArrayHasKey('createdAt', $order);
|
||||||
|
$this->assertArrayHasKey('delivery', $order);
|
||||||
|
$this->assertArrayHasKey('status', $order);
|
||||||
|
$this->assertArrayHasKey('items', $order);
|
||||||
|
$this->assertArrayHasKey('payments', $order);
|
||||||
|
$this->assertNotEmpty($order['payments']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testUploadWithCustomerTest()
|
||||||
|
{
|
||||||
|
$saleOrderModel = $this->loadModel('sale/order');
|
||||||
|
$order = $saleOrderModel->getOrder(self::ORDER_WITH_CUST_ID);
|
||||||
|
|
||||||
|
$order['totals'] = $saleOrderModel->getOrderTotals($order['order_id']);
|
||||||
|
$order['products'] = $saleOrderModel->getOrderProducts($order['order_id']);
|
||||||
|
|
||||||
|
foreach($order['products'] as $key => $product) {
|
||||||
|
$order['products'][$key]['option'] = $saleOrderModel->getOrderOptions($product['order_id'], $product['order_product_id']);
|
||||||
|
}
|
||||||
|
|
||||||
|
$response = new \RetailcrmApiResponse(
|
||||||
|
201,
|
||||||
|
json_encode(
|
||||||
|
array(
|
||||||
|
'success' => true,
|
||||||
|
'id' => 1
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->apiClientMock->expects($this->any())->method('ordersCreate')->willReturn($response);
|
||||||
|
$orderSend = $this->orderModel->uploadOrder($order, $this->apiClientMock);
|
||||||
|
|
||||||
|
$this->assertArrayHasKey('status', $orderSend);
|
||||||
|
$this->assertEquals('new', $orderSend['status']);
|
||||||
|
$this->assertArrayHasKey('externalId', $orderSend);
|
||||||
|
$this->assertArrayHasKey('number', $orderSend);
|
||||||
|
$this->assertArrayHasKey('firstName', $orderSend);
|
||||||
|
$this->assertEquals('Test', $orderSend['firstName']);
|
||||||
|
$this->assertArrayHasKey('lastName', $orderSend);
|
||||||
|
$this->assertEquals('Test', $orderSend['lastName']);
|
||||||
|
$this->assertArrayHasKey('email', $orderSend);
|
||||||
|
$this->assertEquals('test@mail.ru', $orderSend['email']);
|
||||||
|
$this->assertArrayHasKey('phone', $orderSend);
|
||||||
|
$this->assertEquals('+7 (000) 000-00-00', $orderSend['phone']);
|
||||||
|
$this->assertArrayHasKey('createdAt', $orderSend);
|
||||||
|
$this->assertArrayHasKey('delivery', $orderSend);
|
||||||
|
$this->assertInternalType('array', $orderSend['delivery']);
|
||||||
|
$this->assertEquals('flat', $orderSend['delivery']['code']);
|
||||||
|
$this->assertEquals('Test', $orderSend['delivery']['address']['city']);
|
||||||
|
$this->assertEquals('Rostov-na-Donu', $orderSend['delivery']['address']['region']);
|
||||||
|
$this->assertEquals('111111', $orderSend['delivery']['address']['index']);
|
||||||
|
$this->assertArrayHasKey('items', $orderSend);
|
||||||
|
$this->assertArrayHasKey('customerComment', $orderSend);
|
||||||
|
$this->assertArrayHasKey('customer', $orderSend);
|
||||||
|
$this->assertArrayHasKey('externalId', $orderSend['customer']);
|
||||||
|
$this->assertEquals(self::CUSTOMER_ID, $orderSend['customer']['externalId']);
|
||||||
|
$this->assertArrayHasKey('payments', $orderSend);
|
||||||
|
$this->assertEquals('cod', $orderSend['payments'][0]['type']);
|
||||||
|
$this->assertNotEmpty($orderSend['payments']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testUploadWithoutCustomerTest()
|
||||||
|
{
|
||||||
|
$saleOrderModel = $this->loadModel('sale/order');
|
||||||
|
$order = $saleOrderModel->getOrder(self::ORDER_ID);
|
||||||
|
|
||||||
|
$order['totals'] = $saleOrderModel->getOrderTotals($order['order_id']);
|
||||||
|
$order['products'] = $saleOrderModel->getOrderProducts($order['order_id']);
|
||||||
|
|
||||||
|
foreach($order['products'] as $key => $product) {
|
||||||
|
$order['products'][$key]['option'] = $saleOrderModel->getOrderOptions($product['order_id'], $product['order_product_id']);
|
||||||
|
}
|
||||||
|
|
||||||
|
$response = new \RetailcrmApiResponse(
|
||||||
|
201,
|
||||||
|
json_encode(
|
||||||
|
array(
|
||||||
|
'success' => true,
|
||||||
|
'id' => 1
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->apiClientMock->expects($this->any())->method('ordersCreate')->willReturn($response);
|
||||||
|
$orderSend = $this->orderModel->uploadOrder($order, $this->apiClientMock);
|
||||||
|
|
||||||
|
$this->assertArrayHasKey('status', $orderSend);
|
||||||
|
$this->assertArrayHasKey('externalId', $orderSend);
|
||||||
|
$this->assertArrayHasKey('number', $orderSend);
|
||||||
|
$this->assertArrayHasKey('firstName', $orderSend);
|
||||||
|
$this->assertArrayHasKey('lastName', $orderSend);
|
||||||
|
$this->assertArrayHasKey('email', $orderSend);
|
||||||
|
$this->assertArrayHasKey('phone', $orderSend);
|
||||||
|
$this->assertArrayHasKey('createdAt', $orderSend);
|
||||||
|
$this->assertArrayHasKey('delivery', $orderSend);
|
||||||
|
$this->assertArrayHasKey('items', $orderSend);
|
||||||
|
$this->assertContains('#', $orderSend['items'][0]['offer']['externalId']);
|
||||||
|
$this->assertArrayHasKey('payments', $orderSend);
|
||||||
|
$this->assertArrayHasKey('customerComment', $orderSend);
|
||||||
|
$this->assertArrayNotHasKey('customer', $orderSend);
|
||||||
|
$this->assertNotEmpty($orderSend['payments']);
|
||||||
|
}
|
||||||
|
}
|
51
tests/admin/ModelRetailcrmPricesAdminTest.php
Normal file
51
tests/admin/ModelRetailcrmPricesAdminTest.php
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
class ModelRetailcrmPricesAdminTest extends OpenCartTest
|
||||||
|
{
|
||||||
|
private $pricesModel;
|
||||||
|
private $apiClientMock;
|
||||||
|
private $settingModel;
|
||||||
|
private $retailcrm;
|
||||||
|
|
||||||
|
public function setUp()
|
||||||
|
{
|
||||||
|
parent::setUp();
|
||||||
|
|
||||||
|
$this->pricesModel = $this->loadModel('extension/retailcrm/prices');
|
||||||
|
|
||||||
|
$this->apiClientMock = $this->getMockBuilder(\RetailcrmProxy::class)
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->setMethods(array(
|
||||||
|
'storePricesUpload',
|
||||||
|
'sitesList'
|
||||||
|
))
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
$this->settingModel = $this->loadModel('setting/setting');
|
||||||
|
$this->retailcrm = new \retailcrm\Retailcrm(self::$registry);
|
||||||
|
|
||||||
|
$this->settingModel->editSetting(
|
||||||
|
$this->retailcrm->getModuleTitle(),
|
||||||
|
array(
|
||||||
|
$this->retailcrm->getModuleTitle() . '_apiversion' => 'v5',
|
||||||
|
$this->retailcrm->getModuleTitle() . '_special' => 'special'
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testUploadPrices()
|
||||||
|
{
|
||||||
|
$productModel = $this->loadModel('catalog/product');
|
||||||
|
$products = $productModel->getProducts();
|
||||||
|
$prices = $this->pricesModel->uploadPrices($products, $this->apiClientMock);
|
||||||
|
$price = $prices[0][0];
|
||||||
|
|
||||||
|
$this->assertInternalType('array', $prices);
|
||||||
|
$this->assertInternalType('array', $prices[0]);
|
||||||
|
$this->assertInternalType('array', $price);
|
||||||
|
$this->assertArrayHasKey('externalId', $price);
|
||||||
|
$this->assertArrayHasKey('site', $price);
|
||||||
|
$this->assertArrayHasKey('prices', $price);
|
||||||
|
$this->assertInternalType('array', $price['prices']);
|
||||||
|
}
|
||||||
|
}
|
72
tests/catalog/ControllerRetailcrmApiCatalogTest.php
Normal file
72
tests/catalog/ControllerRetailcrmApiCatalogTest.php
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
class ControllerRetailcrmApiCatalogTest extends OpenCartTest
|
||||||
|
{
|
||||||
|
private $apiKey;
|
||||||
|
private $retailcrm;
|
||||||
|
|
||||||
|
const ORDER_ID = 1;
|
||||||
|
|
||||||
|
public function setUp()
|
||||||
|
{
|
||||||
|
parent::setUp();
|
||||||
|
|
||||||
|
$query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "api` WHERE api_id = 1");
|
||||||
|
$api = $query->row;
|
||||||
|
$this->apiKey = $api['key'];
|
||||||
|
$this->retailcrm = new \retailcrm\Retailcrm(self::$registry);
|
||||||
|
|
||||||
|
$this->setSetting(
|
||||||
|
$this->retailcrm->getModuleTitle(),
|
||||||
|
array(
|
||||||
|
$this->retailcrm->getModuleTitle() . '_country' => array(1),
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
if (isset($this->request->get['key'])) {
|
||||||
|
unset($this->request->get['key']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testGetDeliveryTypes()
|
||||||
|
{
|
||||||
|
$response = $this->dispatchAction('api/retailcrm/getDeliveryTypes');
|
||||||
|
$data = json_decode($response->getOutput());
|
||||||
|
|
||||||
|
$this->assertEquals('Not found api key', $data->error);
|
||||||
|
|
||||||
|
$this->request->get['key'] = $this->apiKey;
|
||||||
|
$response = $this->dispatchAction('api/retailcrm/getDeliveryTypes');
|
||||||
|
$data = json_decode($response->getOutput());
|
||||||
|
|
||||||
|
$this->assertNotEmpty($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testAddOrderHistory()
|
||||||
|
{
|
||||||
|
$response = $this->dispatchAction('api/retailcrm/addOrderHistory');
|
||||||
|
$data = json_decode($response->getOutput());
|
||||||
|
|
||||||
|
$this->assertEquals('Not found api key', $data->error);
|
||||||
|
|
||||||
|
$this->request->get['key'] = $this->apiKey;
|
||||||
|
$response = $this->dispatchAction('api/retailcrm/addOrderHistory');
|
||||||
|
$data = json_decode($response->getOutput());
|
||||||
|
|
||||||
|
$this->assertEquals('Not found data', $data->error);
|
||||||
|
}
|
||||||
|
|
||||||
|
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'");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
62
tests/catalog/ModelRetailcrmCustomerCatalogTest.php
Normal file
62
tests/catalog/ModelRetailcrmCustomerCatalogTest.php
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
class ModelRetailcrmCustomerCatalogTest extends OpenCartTest
|
||||||
|
{
|
||||||
|
private $customerModel;
|
||||||
|
private $apiClientMock;
|
||||||
|
|
||||||
|
const CUSTOMER_ID = 1;
|
||||||
|
|
||||||
|
public function setUp()
|
||||||
|
{
|
||||||
|
parent::setUp();
|
||||||
|
|
||||||
|
$this->customerModel = $this->loadModel('extension/retailcrm/customer');
|
||||||
|
|
||||||
|
$this->apiClientMock = $this->getMockBuilder(\RetailcrmProxy::class)
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->setMethods(array(
|
||||||
|
'customersCreate',
|
||||||
|
'customersEdit'
|
||||||
|
))
|
||||||
|
->getMock();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testSendToCrm()
|
||||||
|
{
|
||||||
|
$customerModel = $this->loadModel('account/customer');
|
||||||
|
$customer = $customerModel->getCustomer(self::CUSTOMER_ID);
|
||||||
|
|
||||||
|
$customerSend = $this->customerModel->sendToCrm($customer, $this->apiClientMock);
|
||||||
|
|
||||||
|
$this->assertArrayHasKey('externalId', $customerSend);
|
||||||
|
$this->assertEquals(self::CUSTOMER_ID, $customerSend['externalId']);
|
||||||
|
$this->assertArrayHasKey('firstName', $customerSend);
|
||||||
|
$this->assertEquals('Test', $customerSend['firstName']);
|
||||||
|
$this->assertArrayHasKey('lastName', $customerSend);
|
||||||
|
$this->assertEquals('Test', $customerSend['lastName']);
|
||||||
|
$this->assertArrayHasKey('email', $customerSend);
|
||||||
|
$this->assertEquals('test@mail.ru', $customerSend['email']);
|
||||||
|
$this->assertArrayHasKey('phones', $customerSend);
|
||||||
|
$this->assertEquals('+7 (000) 000-00-00', $customerSend['phones'][0]['number']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testChangeInCrm()
|
||||||
|
{
|
||||||
|
$customerModel = $this->loadModel('account/customer');
|
||||||
|
$customer = $customerModel->getCustomer(self::CUSTOMER_ID);
|
||||||
|
|
||||||
|
$customerSend = $this->customerModel->changeInCrm($customer, $this->apiClientMock);
|
||||||
|
|
||||||
|
$this->assertArrayHasKey('externalId', $customerSend);
|
||||||
|
$this->assertEquals(self::CUSTOMER_ID, $customerSend['externalId']);
|
||||||
|
$this->assertArrayHasKey('firstName', $customerSend);
|
||||||
|
$this->assertEquals('Test', $customerSend['firstName']);
|
||||||
|
$this->assertArrayHasKey('lastName', $customerSend);
|
||||||
|
$this->assertEquals('Test', $customerSend['lastName']);
|
||||||
|
$this->assertArrayHasKey('email', $customerSend);
|
||||||
|
$this->assertEquals('test@mail.ru', $customerSend['email']);
|
||||||
|
$this->assertArrayHasKey('phones', $customerSend);
|
||||||
|
$this->assertEquals('+7 (000) 000-00-00', $customerSend['phones'][0]['number']);
|
||||||
|
}
|
||||||
|
}
|
191
tests/catalog/ModelRetailcrmOrderCatalogTest.php
Normal file
191
tests/catalog/ModelRetailcrmOrderCatalogTest.php
Normal file
@ -0,0 +1,191 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
class ModelRetailcrmOrderCatalogTest extends OpenCartTest
|
||||||
|
{
|
||||||
|
private $orderModel;
|
||||||
|
private $apiClientMock;
|
||||||
|
private $retailcrm;
|
||||||
|
|
||||||
|
const CUSTOMER_ID = 1;
|
||||||
|
const ORDER_WITH_CUST_ID = 1;
|
||||||
|
const ORDER_ID = 2;
|
||||||
|
|
||||||
|
public function setUp()
|
||||||
|
{
|
||||||
|
parent::setUp();
|
||||||
|
|
||||||
|
$this->orderModel = $this->loadModel('extension/retailcrm/order');
|
||||||
|
|
||||||
|
$this->apiClientMock = $this->getMockBuilder(\RetailcrmProxy::class)
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->setMethods(array(
|
||||||
|
'ordersCreate',
|
||||||
|
'ordersEdit',
|
||||||
|
'ordersGet',
|
||||||
|
'ordersPaymentEdit',
|
||||||
|
'customersList'
|
||||||
|
))
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
$this->retailcrm = new \retailcrm\Retailcrm(self::$registry);
|
||||||
|
|
||||||
|
$this->setSetting(
|
||||||
|
$this->retailcrm->getModuleTitle(),
|
||||||
|
array(
|
||||||
|
$this->retailcrm->getModuleTitle() . '_apiversion' => 'v5',
|
||||||
|
$this->retailcrm->getModuleTitle() . '_status' => array(
|
||||||
|
1 => 'new'
|
||||||
|
),
|
||||||
|
$this->retailcrm->getModuleTitle() . '_delivery' => array(
|
||||||
|
'flat.flat' => 'flat'
|
||||||
|
),
|
||||||
|
$this->retailcrm->getModuleTitle() . '_payment' => array(
|
||||||
|
'cod' => 'cod'
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testCreateOrderWithCustomer()
|
||||||
|
{
|
||||||
|
$orderCheckoutModel = $this->loadModel('checkout/order');
|
||||||
|
$orderAccountModel = $this->loadModel('account/order');
|
||||||
|
$order_id = self::ORDER_WITH_CUST_ID;
|
||||||
|
$order = $orderCheckoutModel->getOrder($order_id);
|
||||||
|
$order['products'] = $orderAccountModel->getOrderProducts($order_id);
|
||||||
|
$order['totals'] = $orderAccountModel->getOrderTotals($order_id);
|
||||||
|
|
||||||
|
foreach ($order['products'] as $key => $product) {
|
||||||
|
$productOptions = $orderAccountModel->getOrderOptions($order_id, $product['order_product_id']);
|
||||||
|
|
||||||
|
if (!empty($productOptions)) {
|
||||||
|
$order['products'][$key]['option'] = $productOptions;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$orderProcess = $this->orderModel->processOrder($order);
|
||||||
|
$orderSend = $this->orderModel->sendToCrm($orderProcess, $this->apiClientMock);
|
||||||
|
|
||||||
|
$this->assertArrayHasKey('status', $orderSend);
|
||||||
|
$this->assertEquals('new', $orderSend['status']);
|
||||||
|
$this->assertArrayHasKey('externalId', $orderSend);
|
||||||
|
$this->assertArrayHasKey('number', $orderSend);
|
||||||
|
$this->assertArrayHasKey('firstName', $orderSend);
|
||||||
|
$this->assertEquals('Test', $orderSend['firstName']);
|
||||||
|
$this->assertArrayHasKey('lastName', $orderSend);
|
||||||
|
$this->assertEquals('Test', $orderSend['lastName']);
|
||||||
|
$this->assertArrayHasKey('email', $orderSend);
|
||||||
|
$this->assertEquals('test@mail.ru', $orderSend['email']);
|
||||||
|
$this->assertArrayHasKey('phone', $orderSend);
|
||||||
|
$this->assertEquals('+7 (000) 000-00-00', $orderSend['phone']);
|
||||||
|
$this->assertArrayHasKey('createdAt', $orderSend);
|
||||||
|
$this->assertArrayHasKey('delivery', $orderSend);
|
||||||
|
$this->assertInternalType('array', $orderSend['delivery']);
|
||||||
|
$this->assertEquals('flat', $orderSend['delivery']['code']);
|
||||||
|
$this->assertEquals('Test', $orderSend['delivery']['address']['city']);
|
||||||
|
$this->assertEquals('Rostov-na-Donu', $orderSend['delivery']['address']['region']);
|
||||||
|
$this->assertEquals('111111', $orderSend['delivery']['address']['index']);
|
||||||
|
$this->assertArrayHasKey('items', $orderSend);
|
||||||
|
$this->assertArrayHasKey('customerComment', $orderSend);
|
||||||
|
$this->assertArrayHasKey('customer', $orderSend);
|
||||||
|
$this->assertArrayHasKey('externalId', $orderSend['customer']);
|
||||||
|
$this->assertEquals(self::CUSTOMER_ID, $orderSend['customer']['externalId']);
|
||||||
|
$this->assertArrayHasKey('payments', $orderSend);
|
||||||
|
$this->assertEquals('cod', $orderSend['payments'][0]['type']);
|
||||||
|
$this->assertNotEmpty($orderSend['payments']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testEditOrderWithCustomer()
|
||||||
|
{
|
||||||
|
$orderCheckoutModel = $this->loadModel('checkout/order');
|
||||||
|
$orderAccountModel = $this->loadModel('account/order');
|
||||||
|
$order_id = self::ORDER_WITH_CUST_ID;
|
||||||
|
$order = $orderCheckoutModel->getOrder($order_id);
|
||||||
|
$order['products'] = $orderAccountModel->getOrderProducts($order_id);
|
||||||
|
$order['totals'] = $orderAccountModel->getOrderTotals($order_id);
|
||||||
|
|
||||||
|
foreach ($order['products'] as $key => $product) {
|
||||||
|
$productOptions = $orderAccountModel->getOrderOptions($order_id, $product['order_product_id']);
|
||||||
|
|
||||||
|
if (!empty($productOptions)) {
|
||||||
|
$order['products'][$key]['option'] = $productOptions;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$orderEditResponse = new \RetailcrmApiResponse(
|
||||||
|
200,
|
||||||
|
json_encode(
|
||||||
|
array(
|
||||||
|
'success' => true,
|
||||||
|
'id' => 1
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
$ordersGetResponse = new \RetailcrmApiResponse(
|
||||||
|
200,
|
||||||
|
json_encode(
|
||||||
|
array(
|
||||||
|
'success' => true,
|
||||||
|
'order' => $this->getOrder($order_id)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->apiClientMock->expects($this->any())->method('ordersEdit')->willReturn($orderEditResponse);
|
||||||
|
$this->apiClientMock->expects($this->any())->method('ordersGet')->willReturn($ordersGetResponse);
|
||||||
|
$orderProcess = $this->orderModel->processOrder($order);
|
||||||
|
$orderSend = $this->orderModel->sendToCrm($orderProcess, $this->apiClientMock, false);
|
||||||
|
|
||||||
|
$this->assertArrayHasKey('status', $orderSend);
|
||||||
|
$this->assertEquals('new', $orderSend['status']);
|
||||||
|
$this->assertArrayHasKey('externalId', $orderSend);
|
||||||
|
$this->assertArrayHasKey('number', $orderSend);
|
||||||
|
$this->assertArrayHasKey('firstName', $orderSend);
|
||||||
|
$this->assertEquals('Test', $orderSend['firstName']);
|
||||||
|
$this->assertArrayHasKey('lastName', $orderSend);
|
||||||
|
$this->assertEquals('Test', $orderSend['lastName']);
|
||||||
|
$this->assertArrayHasKey('email', $orderSend);
|
||||||
|
$this->assertEquals('test@mail.ru', $orderSend['email']);
|
||||||
|
$this->assertArrayHasKey('phone', $orderSend);
|
||||||
|
$this->assertEquals('+7 (000) 000-00-00', $orderSend['phone']);
|
||||||
|
$this->assertArrayHasKey('createdAt', $orderSend);
|
||||||
|
$this->assertArrayHasKey('delivery', $orderSend);
|
||||||
|
$this->assertInternalType('array', $orderSend['delivery']);
|
||||||
|
$this->assertEquals('flat', $orderSend['delivery']['code']);
|
||||||
|
$this->assertEquals('Test', $orderSend['delivery']['address']['city']);
|
||||||
|
$this->assertEquals('Rostov-na-Donu', $orderSend['delivery']['address']['region']);
|
||||||
|
$this->assertEquals('111111', $orderSend['delivery']['address']['index']);
|
||||||
|
$this->assertArrayHasKey('items', $orderSend);
|
||||||
|
$this->assertArrayHasKey('customerComment', $orderSend);
|
||||||
|
}
|
||||||
|
|
||||||
|
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'");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getOrder($id)
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
'payments' => array(
|
||||||
|
array(
|
||||||
|
'id' => 1,
|
||||||
|
'status' => 'not-paid',
|
||||||
|
'type' => 'cod',
|
||||||
|
'externalId' => $id,
|
||||||
|
'amount' => '100'
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
49
tests/opencart_sample_data.sql
Normal file
49
tests/opencart_sample_data.sql
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
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_customer_activity`;
|
||||||
|
TRUNCATE TABLE `oc_customer_group`;
|
||||||
|
INSERT INTO `oc_customer_group` (`customer_group_id`, `approval`, `sort_order`) VALUES ('1', '0', '1');
|
||||||
|
|
||||||
|
TRUNCATE TABLE `oc_customer_group_description`;
|
||||||
|
INSERT INTO `oc_customer_group_description` (`customer_group_id`, `language_id`, `name`, `description`) VALUES ('1', '1', 'Default', 'test');
|
||||||
|
|
||||||
|
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', '', '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', '', '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_custom_field`;
|
||||||
|
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');
|
||||||
|
|
||||||
|
TRUNCATE TABLE `oc_order_voucher`;
|
Loading…
Reference in New Issue
Block a user