Работа над сайтом 16
This commit is contained in:
parent
b3b5111006
commit
177de6b3ef
|
@ -28,7 +28,8 @@
|
||||||
"mirzaev/yii2-arangodb": ">=2.1.x-dev",
|
"mirzaev/yii2-arangodb": ">=2.1.x-dev",
|
||||||
"mirzaev/yii2-arangodb-sessions": ">=1.1.x-dev",
|
"mirzaev/yii2-arangodb-sessions": ">=1.1.x-dev",
|
||||||
"guzzlehttp/guzzle": "^7.3",
|
"guzzlehttp/guzzle": "^7.3",
|
||||||
"phpoffice/phpspreadsheet": "^1.18"
|
"phpoffice/phpspreadsheet": "^1.18",
|
||||||
|
"hflabs/dadata": "^20.12"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"codeception/codeception": ">=4.1",
|
"codeception/codeception": ">=4.1",
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "695a3f9969bbc0bbc0650efdc2e245af",
|
"content-hash": "fcf19d2c1a3e56a85324e01a1c6c55ab",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "bower-asset/bootstrap",
|
"name": "bower-asset/bootstrap",
|
||||||
|
@ -704,6 +704,57 @@
|
||||||
},
|
},
|
||||||
"time": "2021-04-26T09:17:50+00:00"
|
"time": "2021-04-26T09:17:50+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "hflabs/dadata",
|
||||||
|
"version": "20.12.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/hflabs/dadata-php.git",
|
||||||
|
"reference": "c6db345bb4a389423ba14f6c4c626d830c0d9992"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/hflabs/dadata-php/zipball/c6db345bb4a389423ba14f6c4c626d830c0d9992",
|
||||||
|
"reference": "c6db345bb4a389423ba14f6c4c626d830c0d9992",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"guzzlehttp/guzzle": "~6.0|^7.0",
|
||||||
|
"php": ">=5.6.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"phpunit/phpunit": "^5.7"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Dadata\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "HFLabs and contributors",
|
||||||
|
"homepage": "https://github.com/hflabs/dadata-php/contributors"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Data cleansing, enrichment and suggestions via Dadata API",
|
||||||
|
"homepage": "https://github.com/nalgeon/dadata-php",
|
||||||
|
"keywords": [
|
||||||
|
"DaData",
|
||||||
|
"api",
|
||||||
|
"php",
|
||||||
|
"suggestions"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/hflabs/dadata-php/issues",
|
||||||
|
"source": "https://github.com/hflabs/dadata-php/tree/20.12.0"
|
||||||
|
},
|
||||||
|
"time": "2020-12-24T15:49:58+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "imagine/imagine",
|
"name": "imagine/imagine",
|
||||||
"version": "1.2.4",
|
"version": "1.2.4",
|
||||||
|
|
|
@ -37,12 +37,14 @@ class AppAsset extends AssetBundle
|
||||||
'js/bootstrap/bootstrap.min.js',
|
'js/bootstrap/bootstrap.min.js',
|
||||||
'https://cdn.jsdelivr.net/bxslider/4.1.1/jquery.bxslider.min.js',
|
'https://cdn.jsdelivr.net/bxslider/4.1.1/jquery.bxslider.min.js',
|
||||||
'https://unpkg.com/cookielib/src/cookie.min.js',
|
'https://unpkg.com/cookielib/src/cookie.min.js',
|
||||||
|
'https://api-maps.yandex.ru/2.0-stable/?load=package.standard&lang=ru-RU',
|
||||||
'js/menu.js',
|
'js/menu.js',
|
||||||
'js/main.js',
|
'js/main.js',
|
||||||
'js/account.js',
|
'js/account.js',
|
||||||
'js/search.js',
|
'js/search.js',
|
||||||
'js/notification.js',
|
'js/notification.js',
|
||||||
'js/reinitialization.js'
|
'js/reinitialization.js',
|
||||||
|
'js/geolocation.js'
|
||||||
];
|
];
|
||||||
public $jsOptions = [
|
public $jsOptions = [
|
||||||
// 'position' => View::POS_HEAD
|
// 'position' => View::POS_HEAD
|
||||||
|
|
|
@ -44,10 +44,17 @@ class AuthenticationController extends Controller
|
||||||
if (yii::$app->request->isPost) {
|
if (yii::$app->request->isPost) {
|
||||||
// AJAX-POST-запрос
|
// AJAX-POST-запрос
|
||||||
|
|
||||||
|
// Настройка кода ответа
|
||||||
yii::$app->response->format = Response::FORMAT_JSON;
|
yii::$app->response->format = Response::FORMAT_JSON;
|
||||||
|
|
||||||
// Валидация формы
|
// Валидация формы
|
||||||
if (!empty($errors = ActiveForm::validate($model))) return $errors;
|
if (!empty($errors = ActiveForm::validate($model))) {
|
||||||
|
|
||||||
|
// Настройка кода ответа
|
||||||
|
yii::$app->response->statusCode = 401;
|
||||||
|
|
||||||
|
return $errors;
|
||||||
|
};
|
||||||
|
|
||||||
if (!yii::$app->user->isGuest || $model->authentication()) {
|
if (!yii::$app->user->isGuest || $model->authentication()) {
|
||||||
// Аккаунт аутентифицирован
|
// Аккаунт аутентифицирован
|
||||||
|
@ -112,6 +119,7 @@ class AuthenticationController extends Controller
|
||||||
} else {
|
} else {
|
||||||
// Аккаунт не аутентифицирован
|
// Аккаунт не аутентифицирован
|
||||||
|
|
||||||
|
// Настройка кода ответа
|
||||||
yii::$app->response->statusCode = 400;
|
yii::$app->response->statusCode = 400;
|
||||||
|
|
||||||
return [
|
return [
|
||||||
|
|
|
@ -4,18 +4,18 @@ declare(strict_types=1);
|
||||||
|
|
||||||
namespace app\controllers;
|
namespace app\controllers;
|
||||||
|
|
||||||
use app\models\Notification;
|
|
||||||
use yii;
|
use yii;
|
||||||
use yii\filters\AccessControl;
|
use yii\filters\AccessControl;
|
||||||
use yii\web\Controller;
|
use yii\web\Controller;
|
||||||
use yii\web\Response;
|
use yii\web\Response;
|
||||||
|
use yii\web\Cookie;
|
||||||
|
|
||||||
use app\models\Product;
|
use app\models\Product;
|
||||||
use app\models\Order;
|
use app\models\Order;
|
||||||
use app\models\OrderEdgeSupply;
|
use app\models\OrderEdgeSupply;
|
||||||
|
use app\models\Notification;
|
||||||
|
|
||||||
use Exception;
|
use Exception;
|
||||||
use yii\web\Cookie;
|
|
||||||
|
|
||||||
class CartController extends Controller
|
class CartController extends Controller
|
||||||
{
|
{
|
||||||
|
|
|
@ -16,8 +16,11 @@ use app\models\SupplyGroup;
|
||||||
use app\models\Search;
|
use app\models\Search;
|
||||||
use app\models\Notification;
|
use app\models\Notification;
|
||||||
use app\models\Settings;
|
use app\models\Settings;
|
||||||
|
use app\models\Dellin;
|
||||||
use app\models\SettingsEdgeSettings;
|
use app\models\SettingsEdgeSettings;
|
||||||
|
|
||||||
|
use Dadata\DadataClient as Dadata;
|
||||||
|
|
||||||
class ProfileController extends Controller
|
class ProfileController extends Controller
|
||||||
{
|
{
|
||||||
public function behaviors()
|
public function behaviors()
|
||||||
|
@ -29,7 +32,14 @@ class ProfileController extends Controller
|
||||||
[
|
[
|
||||||
'allow' => true,
|
'allow' => true,
|
||||||
'roles' => ['@'],
|
'roles' => ['@'],
|
||||||
'actions' => ['index', 'supplies', 'import', 'monitoring', 'readGroups']
|
'actions' => [
|
||||||
|
'index',
|
||||||
|
'supplies',
|
||||||
|
'import',
|
||||||
|
'monitoring',
|
||||||
|
'readGroups',
|
||||||
|
'geolocation-init'
|
||||||
|
]
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'allow' => true,
|
'allow' => true,
|
||||||
|
@ -121,8 +131,7 @@ class ProfileController extends Controller
|
||||||
$delivery_from_terminal_list = $model->genListTerminalsFrom();
|
$delivery_from_terminal_list = $model->genListTerminalsFrom();
|
||||||
$delivery_to_terminal_list = $model->genListTerminalsTo();
|
$delivery_to_terminal_list = $model->genListTerminalsTo();
|
||||||
$import_oem_list = $model->genListOem(Supply::searchByAccount(select: 'supply.onec["ЗначенияСвойств"]'));
|
$import_oem_list = $model->genListOem(Supply::searchByAccount(select: 'supply.onec["ЗначенияСвойств"]'));
|
||||||
$array_unshift_in_start = function (array &$array, string|int $key, mixed $value)
|
$array_unshift_in_start = function (array &$array, string|int $key, mixed $value) {
|
||||||
{
|
|
||||||
$array = array_reverse($array, true);
|
$array = array_reverse($array, true);
|
||||||
$array[$key] = $value;
|
$array[$key] = $value;
|
||||||
return $array = array_reverse($array, true);
|
return $array = array_reverse($array, true);
|
||||||
|
@ -447,4 +456,59 @@ class ProfileController extends Controller
|
||||||
|
|
||||||
return $groups;
|
return $groups;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Инициализация данных о геолокации
|
||||||
|
*
|
||||||
|
* @param string|null $account
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function actionGeolocationInit(string|null $account = null): bool
|
||||||
|
{
|
||||||
|
if (Yii::$app->request->isPost) {
|
||||||
|
// POST-запрос
|
||||||
|
// Инициализация аккаунта
|
||||||
|
$account ?? $account = yii::$app->user->identity;
|
||||||
|
|
||||||
|
// Инициализация IP-адреса
|
||||||
|
$ip = yii::$app->request->userIp === 'localhost' || yii::$app->request->userIp === '127.0.0.1' ? '46.226.227.20' : yii::$app->request->userIp;
|
||||||
|
|
||||||
|
// Настройка ответа
|
||||||
|
yii::$app->response->format = Response::FORMAT_JSON;
|
||||||
|
|
||||||
|
// Проверка записи геолокации
|
||||||
|
if (isset($account->geol)) {
|
||||||
|
// Удалось найти данные геолокации
|
||||||
|
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
// Не удалось найти данные геолокации
|
||||||
|
|
||||||
|
// Инициализация данных геолокации
|
||||||
|
$dadata = new Dadata(yii::$app->params['dadata']['key'], null);
|
||||||
|
|
||||||
|
// Запись в буфер
|
||||||
|
$account->geol = $dadata->iplocate($ip);
|
||||||
|
|
||||||
|
// Синхронизация с базой данных ДеловыеЛинии
|
||||||
|
if ($dellin = Dellin::searchByCityKladr(str_pad($account->geol['data']['city_kladr_id'], 25, '0000000000000000000000'))) {
|
||||||
|
// Удалось найти город с терминалами ДеловыеЛинии
|
||||||
|
|
||||||
|
// Запись связанного с городом терминала в настройки пользователя
|
||||||
|
// !!! Берётся первый попавшийся терминал
|
||||||
|
$account->opts = [
|
||||||
|
'delivery_to_terminal' => $dellin['data']['terminals']['terminal'][0]['id']
|
||||||
|
] + ($account->opts ?? []);
|
||||||
|
|
||||||
|
// Отправка данных из буфера в базу данных
|
||||||
|
return $account->update() >= 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
yii::$app->response->redirect('/');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,6 +51,7 @@ class Account extends Document implements IdentityInterface, PartnerInterface
|
||||||
'agnt',
|
'agnt',
|
||||||
'type',
|
'type',
|
||||||
'vrfy',
|
'vrfy',
|
||||||
|
'geol',
|
||||||
'acpt'
|
'acpt'
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
@ -78,6 +79,7 @@ class Account extends Document implements IdentityInterface, PartnerInterface
|
||||||
'agnt' => 'Агент (поставщик)',
|
'agnt' => 'Агент (поставщик)',
|
||||||
'type' => 'Тип аккаунта',
|
'type' => 'Тип аккаунта',
|
||||||
'vrfy' => 'Статус подтверждения владением почты',
|
'vrfy' => 'Статус подтверждения владением почты',
|
||||||
|
'geol' => 'Геолокация',
|
||||||
'acpt' => 'Согласие с офертой'
|
'acpt' => 'Согласие с офертой'
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
@ -390,13 +392,13 @@ class Account extends Document implements IdentityInterface, PartnerInterface
|
||||||
*
|
*
|
||||||
* Актуальное (выбранное, активное) значение записывается первым
|
* Актуальное (выбранное, активное) значение записывается первым
|
||||||
*/
|
*/
|
||||||
public function genListCity(): array
|
public function genListCity(): void
|
||||||
{
|
{
|
||||||
$browser = new Dellin();
|
// $browser = new Dellin();
|
||||||
|
|
||||||
$request = $browser->get('https://api.github.com/user', [
|
// $request = $browser->get('https://api.github.com/user', [
|
||||||
'auth' => ['user', 'pass']
|
// 'auth' => ['user', 'pass']
|
||||||
]);
|
// ]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -723,7 +725,7 @@ class Account extends Document implements IdentityInterface, PartnerInterface
|
||||||
}
|
}
|
||||||
. ' ' . match (rand(1, 15)) {
|
. ' ' . match (rand(1, 15)) {
|
||||||
1 => 'забыли',
|
1 => 'забыли',
|
||||||
2 => 'отжали',
|
2 => 'испортили',
|
||||||
3 => 'забрали',
|
3 => 'забрали',
|
||||||
4 => 'порвали',
|
4 => 'порвали',
|
||||||
5 => 'украли',
|
5 => 'украли',
|
||||||
|
@ -736,6 +738,7 @@ class Account extends Document implements IdentityInterface, PartnerInterface
|
||||||
12 => 'испортили',
|
12 => 'испортили',
|
||||||
13 => 'добили',
|
13 => 'добили',
|
||||||
14 => 'разбили',
|
14 => 'разбили',
|
||||||
|
15 => 'сорвали',
|
||||||
default => 'сломали'
|
default => 'сломали'
|
||||||
}
|
}
|
||||||
. ' ' . match (rand(1, 9)) {
|
. ' ' . match (rand(1, 9)) {
|
||||||
|
@ -749,7 +752,7 @@ class Account extends Document implements IdentityInterface, PartnerInterface
|
||||||
8 => 'поменяю',
|
8 => 'поменяю',
|
||||||
default => 'куплю'
|
default => 'куплю'
|
||||||
}
|
}
|
||||||
. ' в скиллпартсе';
|
. ' в скиллпартс';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -107,7 +107,7 @@ class AccountForm extends Model
|
||||||
return [
|
return [
|
||||||
'mail' => 'Почта',
|
'mail' => 'Почта',
|
||||||
'pswd' => 'Пароль',
|
'pswd' => 'Пароль',
|
||||||
'auto' => '<i class="fas fa-lock"></i>',
|
'auto' => '<i class="fas fa-unlock"></i>',
|
||||||
'pols' => 'Политика конфедециальности'
|
'pols' => 'Политика конфедециальности'
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,6 +43,16 @@ class Dellin extends Document
|
||||||
return static::findOne(['data["id"]' => $id]);
|
return static::findOne(['data["id"]' => $id]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Поиск по КЛАДР-коду города
|
||||||
|
*
|
||||||
|
* @param string $id Код КЛАДР города
|
||||||
|
*/
|
||||||
|
public static function searchByCityKladr(string $code): ?static
|
||||||
|
{
|
||||||
|
return static::findOne(['data["code"]' => $code]);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Поиск по идентификатору терминала
|
* Поиск по идентификатору терминала
|
||||||
*
|
*
|
||||||
|
|
|
@ -4,6 +4,7 @@ declare(strict_types=1);
|
||||||
|
|
||||||
use yii\helpers\Html;
|
use yii\helpers\Html;
|
||||||
use yii\bootstrap\ActiveForm;
|
use yii\bootstrap\ActiveForm;
|
||||||
|
use yii\widgets\Pjax;
|
||||||
|
|
||||||
use app\models\AccountForm;
|
use app\models\AccountForm;
|
||||||
|
|
||||||
|
@ -16,6 +17,10 @@ use app\models\AccountForm;
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="mx-auto">
|
<div class="mx-auto">
|
||||||
<?php
|
<?php
|
||||||
|
Pjax::begin([
|
||||||
|
// Опции Pjax
|
||||||
|
]);
|
||||||
|
|
||||||
// Инициализация идентификатора формы
|
// Инициализация идентификатора формы
|
||||||
$form_id = ($isPopupMenu ?? false) ? 'form_account_menu' : 'form_account';
|
$form_id = ($isPopupMenu ?? false) ? 'form_account_menu' : 'form_account';
|
||||||
|
|
||||||
|
@ -30,7 +35,10 @@ use app\models\AccountForm;
|
||||||
],
|
],
|
||||||
'options' => [
|
'options' => [
|
||||||
'class' => 'form_account',
|
'class' => 'form_account',
|
||||||
'onsubmit' => 'return false;'
|
'onsubmit' => 'return false;',
|
||||||
|
'data' => [
|
||||||
|
'pjax' => true
|
||||||
|
]
|
||||||
],
|
],
|
||||||
'enableClientValidation' => false,
|
'enableClientValidation' => false,
|
||||||
'enableAjaxValidation' => true
|
'enableAjaxValidation' => true
|
||||||
|
@ -59,13 +67,19 @@ use app\models\AccountForm;
|
||||||
<div class="d-flex mb-2 mt-4">
|
<div class="d-flex mb-2 mt-4">
|
||||||
<?= Html::submitButton('Войти', ['name' => 'submitAuthentication', 'onclick' => 'authentication(this.parentElement.parentElement);', 'class' => 'flex-grow-1 mr-2 btn btn-primary button_clean']) ?>
|
<?= Html::submitButton('Войти', ['name' => 'submitAuthentication', 'onclick' => 'authentication(this.parentElement.parentElement);', 'class' => 'flex-grow-1 mr-2 btn btn-primary button_clean']) ?>
|
||||||
<?= $form->field($model, 'auto', ['checkboxTemplate' => '<div class="checkbox button_clean">{beginLabel}' .
|
<?= $form->field($model, 'auto', ['checkboxTemplate' => '<div class="checkbox button_clean">{beginLabel}' .
|
||||||
Html::submitButton('{labelTitle}', ['name' => 'submit', 'data-toggle' => 'button', 'class' => 'w-100 btn btn-primary button_clean', 'aria-pressed' => 'false']) .
|
Html::submitButton('{labelTitle}', ['name' => 'submit', 'data-toggle' => 'button', 'class' => 'w-100 btn btn-primary button_clean', 'aria-pressed' => 'false', 'onclick' => 'return authentication_auto_button_status_switch(this);']) .
|
||||||
'{endLabel}</div>'])->checkbox()->label($model->getAttributeLabel('auto'), ['class' => 'w-100 m-0']) ?>
|
'{endLabel}</div>'])->checkbox()->label($model->getAttributeLabel('auto'), ['class' => 'w-100 m-0']) ?>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<?= Html::submitButton('Регистрация', ['name' => 'submitRegistration', 'onclick' => 'return registration_start(this.parentElement);', 'class' => 'col-12 ml-auto btn btn-success btn-sm button_clean']) ?>
|
<?= Html::submitButton('Регистрация', ['name' => 'submitRegistration', 'onclick' => 'return registration_start(this.parentElement);', 'class' => 'col-12 ml-auto btn btn-success btn-sm button_clean']) ?>
|
||||||
|
|
||||||
<?php ActiveForm::end(); ?>
|
<?php
|
||||||
|
|
||||||
|
ActiveForm::end();
|
||||||
|
|
||||||
|
Pjax::end();
|
||||||
|
|
||||||
|
?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -39,23 +39,15 @@ use DateTime;
|
||||||
foreach ($connections as $connection) {
|
foreach ($connections as $connection) {
|
||||||
// Перебор поставок
|
// Перебор поставок
|
||||||
|
|
||||||
// Инициализация доставки
|
// Инициализация переменных
|
||||||
if (isset($connection['delivery']['error'])) {
|
extract($connection);
|
||||||
// Не удалось рассчитать доставку
|
|
||||||
|
|
||||||
// Инициализация индикатора
|
|
||||||
$delivery_icon = '';
|
|
||||||
|
|
||||||
// Инициализация времени
|
|
||||||
$delivery = '?';
|
|
||||||
|
|
||||||
// Инициализация цены
|
// Инициализация цены
|
||||||
$cost = '?';
|
$price_raw = $cost;
|
||||||
} else {
|
$price = $price_raw . ' ' . $currency;
|
||||||
// Удалось рассчитать доставку
|
|
||||||
|
|
||||||
// Инициализация типа доставки
|
// Инициализация типа доставки
|
||||||
$delivery_type = reset($connection['order_edge_supply'])['dlvr']['type'] ?? 'auto';
|
$delivery_type = reset($order_edge_supply)['dlvr']['type'] ?? 'auto';
|
||||||
|
|
||||||
// Инициализация индикатора
|
// Инициализация индикатора
|
||||||
$delivery_icon = match ($delivery_type) {
|
$delivery_icon = match ($delivery_type) {
|
||||||
|
@ -63,48 +55,69 @@ use DateTime;
|
||||||
default => '<i class="mr-1 fas fa-truck"></i>'
|
default => '<i class="mr-1 fas fa-truck"></i>'
|
||||||
};
|
};
|
||||||
|
|
||||||
// Рассчет времени
|
// Инициализация доставки
|
||||||
try {
|
if (isset($delivery['error']) || $delivery === '?') {
|
||||||
$delivery_converted = DateTime::createFromFormat('Y-m-d H:i:s', $connection['delivery']['orderDates']['giveoutFromOspReceiver'])->getTimestamp();
|
// Не удалось рассчитать доставку
|
||||||
} catch (Exception $e) {
|
|
||||||
$delivery_converted = DateTime::createFromFormat('Y-m-d', $connection['delivery']['orderDates']['arrivalToOspReceiver'])->getTimestamp();
|
|
||||||
}
|
|
||||||
$delivery = ceil(($delivery_converted - time()) / 60 / 60 / 24) + 1;
|
|
||||||
|
|
||||||
// Инициализация цены
|
// Инициализация времени
|
||||||
$cost = $connection['cost'] . ' ' . $connection['currency'];
|
$delivery = '?';
|
||||||
|
} else {
|
||||||
|
// Удалось рассчитать доставку
|
||||||
|
|
||||||
|
// Инициализация даты отправки
|
||||||
|
try {
|
||||||
|
// Взять данные из "arrivalToOspSender" (Дата прибытия на терминал-отправитель)
|
||||||
|
|
||||||
|
$delivery_send_date = DateTime::createFromFormat('Y-m-d', $delivery['orderDates']['arrivalToOspSender'])->getTimestamp();
|
||||||
|
} catch (Throwable $e) {
|
||||||
|
// Взять данные из "pickup" (Дата передачи груза на адресе отправителя)
|
||||||
|
|
||||||
|
$delivery_send_date = DateTime::createFromFormat('Y-m-d', $delivery['orderDates']['pickup'])->getTimestamp();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Инициализация времени доставки
|
||||||
|
try {
|
||||||
|
// Доставка по воздуху (подразумевается), данные из "giveoutFromOspReceiver" (Дата и время, с которого груз готов к выдаче на терминале)
|
||||||
|
|
||||||
|
$delivery_converted = DateTime::createFromFormat('Y-m-d H:i:s', $delivery['orderDates']['giveoutFromOspReceiver'])->getTimestamp();
|
||||||
|
} catch (Throwable $e) {
|
||||||
|
// Автоматическая доставка (подразумевается), данные из "arrivalToOspReceiver" (Дата прибытия натерминал-получатель)
|
||||||
|
|
||||||
|
$delivery_converted = DateTime::createFromFormat('Y-m-d', $delivery['orderDates']['arrivalToOspReceiver'])->getTimestamp();
|
||||||
|
}
|
||||||
|
$delivery = ceil(($delivery_converted - ($delivery_send_date ?? 0)) / 60 / 60 / 24) + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Инициализация комментария
|
// Инициализация комментария
|
||||||
$comment = $connection['order_edge_supply'][0]['comm'] ?? 'Комментарий к заказу';
|
$comment = $order_edge_supply[0]['comm'] ?? 'Комментарий к заказу';
|
||||||
|
|
||||||
echo <<<HTML
|
echo <<<HTML
|
||||||
<div class="row py-2 cart_list_target">
|
<div class="row py-2 cart_list_target">
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="pl-3 my-auto mr-1">
|
<div class="pl-3 my-auto mr-1">
|
||||||
<input id="cart_list_checkbox_{$connection['supply']['catn']}" type="checkbox" onchange="return cart_list_checkbox(this);"/>
|
<input id="cart_list_checkbox_{$supply['catn']}" type="checkbox" onchange="return cart_list_checkbox(this);"/>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-2 my-auto">
|
<div class="col-2 my-auto">
|
||||||
{$connection['supply']['catn']}
|
{$supply['catn']}
|
||||||
</div>
|
</div>
|
||||||
<div class="col-4 my-auto">
|
<div class="col-4 my-auto">
|
||||||
{$connection['supply']['dscr']}
|
{$supply['dscr']}
|
||||||
</div>
|
</div>
|
||||||
<div class="col-1 my-auto ml-auto">
|
<div class="col-1 my-auto ml-auto">
|
||||||
<input id="cart_list_amnt_{$connection['supply']['catn']}" class="form-control text-center" type="text" value="{$connection['amount']}" onchange="return cart_list_amount_update('{$connection['supply']['catn']}', this)" aria-invalid="false">
|
<input id="cart_list_amnt_{$supply['catn']}" class="form-control text-center" type="text" value="{$connection['amount']}" onchange="return cart_list_amount_update('{$supply['catn']}', this)" aria-invalid="false">
|
||||||
</div>
|
</div>
|
||||||
<div class="col-2 my-auto text-right">
|
<div class="col-2 my-auto text-right">
|
||||||
<p title="Ориентировочно">$delivery_icon ~$delivery дн</p>
|
<p title="Ориентировочно">$delivery_icon <b>~</b>$delivery дн</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-2 my-auto mr-3 text-right">
|
<div class="col-2 my-auto mr-3 text-right">
|
||||||
$cost
|
$price
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="dropdown-divider"></div>
|
<div class="dropdown-divider"></div>
|
||||||
<div class="row mb-1">
|
<div class="row mb-1">
|
||||||
<div class="col-12">
|
<div class="col-12">
|
||||||
<p id="cart_list_comment_{$connection['supply']['catn']}" class="mt-0 ml-0 text-break pointer-event" role="button" onclick="return cart_list_comment_edit('{$connection['supply']['catn']}', this);">$comment</p>
|
<p id="cart_list_comment_{$supply['catn']}" class="mt-0 ml-0 text-break pointer-event" role="button" onclick="return cart_list_comment_edit('{$supply['catn']}', this);">$comment</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -82,7 +82,7 @@ AppAsset::register($this);
|
||||||
<div id="searchPanel" class="col">
|
<div id="searchPanel" class="col">
|
||||||
<form class="d-flex catalog_search" onsubmit="return false;">
|
<form class="d-flex catalog_search" onsubmit="return false;">
|
||||||
<div class="position-relative col-sm-8 col-lg-10 px-0">
|
<div class="position-relative col-sm-8 col-lg-10 px-0">
|
||||||
<input id="search_line" type="text" class="form-control col-12 catalog_search_line button_clean" placeholder="Введите номер запчасти, например: 45223503481" oninput="$('#search_line').dropdown('hide'); product_search(this.value);" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" autocomplete="off">
|
<input id="search_line" type="text" class="form-control col-12 catalog_search_line button_clean" placeholder="Введите номер запчасти, например: 45223503481" oninput="$('#search_line').dropdown('hide'); product_search(this.value);" data-toggle="dropdown" aria-expanded="false" autocomplete="off">
|
||||||
<?php
|
<?php
|
||||||
// Сделать системные настройки и по ним работать
|
// Сделать системные настройки и по ним работать
|
||||||
$search_panel = yii::$app->controller->renderPartial('/search/panel', ['history' => true]);
|
$search_panel = yii::$app->controller->renderPartial('/search/panel', ['history' => true]);
|
||||||
|
|
|
@ -171,32 +171,29 @@ if (
|
||||||
<?php endif ?>
|
<?php endif ?>
|
||||||
|
|
||||||
<article class="page_order_panel mt-3 py-3 px-4 rounded <?= $account_type ?? false ? '' : 'd-block'; ?>">
|
<article class="page_order_panel mt-3 py-3 px-4 rounded <?= $account_type ?? false ? '' : 'd-block'; ?>">
|
||||||
<div class="row mt-2 mb-3">
|
<div class="row mt-2 mb-2">
|
||||||
<h4 class="col ml-4"><i class="fas fa-list mr-2"></i>Заказы</h4>
|
<h4 class="col ml-4"><i class="fas fa-list mr-2"></i>Заказы</h4>
|
||||||
<div class="col orders_panel_menu ml-auto text-right">
|
<div class="col-auto orders_panel_menu ml-auto text-right">
|
||||||
<a class="btn btn-sm button_white button_clean mb-0 mr-2" type="button" onclick="return orders_read('all');">Все</abs>
|
<a class="btn btn-sm button_white button_clean font-weight-bold mb-0 mr-2" type="button" onclick="return orders_read('all');">Все</a>
|
||||||
<a class="btn btn-sm button_white button_clean mb-0 mr-2" type="button" onclick="return orders_read('requested');">Запрошенные</a>
|
<a class="btn btn-sm button_white button_clean font-weight-bold mb-0 mr-2" type="button" onclick="return orders_read('requested');">Запрошенные</a>
|
||||||
<a class="btn btn-sm button_white button_clean mb-0 mr-2" type="button" onclick="return orders_read('accepted');">Активные</a>
|
<a class="btn btn-sm button_white button_clean font-weight-bold mb-0 mr-2" type="button" onclick="return orders_read('accepted');">Активные</a>
|
||||||
<a class="btn btn-sm button_white button_clean mb-0" type="button" onclick="return orders_read('completed');">Завершенные</a>
|
<a class="btn btn-sm button_white button_clean font-weight-bold mb-0" type="button" onclick="return orders_read('completed');">Завершенные</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row mb-4">
|
<div class="row mb-4">
|
||||||
<div class="ml-auto col-3">
|
<small class="ml-auto d-flex">
|
||||||
<div class="row mb-2">
|
<a class="btn btn-sm button_white button_clean mb-0 mr-2" type="button" onclick="return orders_read('all');">День</a>
|
||||||
<p class="col-2 p-0 text-right">
|
<a class="btn btn-sm button_white button_clean mb-0 mr-2" type="button" onclick="return orders_read('all');">Неделя</a>
|
||||||
С
|
<a class="btn btn-sm button_white button_clean mb-0 mr-2" type="button" onclick="return orders_read('requested');">Месяц</a>
|
||||||
</p>
|
<a class="btn btn-sm button_white button_clean mb-0 mr-2" type="button" onclick="return orders_read('accepted');">Год</a>
|
||||||
<div class="col-10">
|
</small>
|
||||||
<input class="form-control" type="date" value="<?= date('Y-m-d', time() - 604800)?>" />
|
<div class="ml-2 mr-3 d-flex">
|
||||||
</div>
|
<div class="ml-auto">
|
||||||
</div>
|
<input class="form-contro form-control-sm" type="date" value="<?= date('Y-m-d', time() - 604800) ?>" />
|
||||||
<div class="row">
|
|
||||||
<p class="col-2 p-0 text-right">
|
|
||||||
По
|
|
||||||
</p>
|
|
||||||
<div class="col-10">
|
|
||||||
<input class="form-control" type="date" value="<?= date('Y-m-d', time())?>" />
|
|
||||||
</div>
|
</div>
|
||||||
|
<p class="mx-2 p-0">-</p>
|
||||||
|
<div>
|
||||||
|
<input class="form-contro form-control-sm" type="date" value="<?= date('Y-m-d', time()) ?>" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -69,16 +69,16 @@ main {
|
||||||
.button_clean_full:hover,
|
.button_clean_full:hover,
|
||||||
.button_clean_full:focus,
|
.button_clean_full:focus,
|
||||||
.button_clean_full:active {
|
.button_clean_full:active {
|
||||||
outline : none;
|
outline : none !important;
|
||||||
box-shadow: none;
|
box-shadow: none !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.button_clean_full,
|
.button_clean_full,
|
||||||
.button_clean_full:hover,
|
.button_clean_full:hover,
|
||||||
.button_clean_full:focus,
|
.button_clean_full:focus,
|
||||||
.button_clean_full:active {
|
.button_clean_full:active {
|
||||||
border : none;
|
border : none !important;
|
||||||
background: none;
|
background: none !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.button_blue_simple {
|
.button_blue_simple {
|
||||||
|
|
|
@ -9,6 +9,8 @@ function identification() {
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
document.addEventListener('DOMContentLoaded', identification(), true);
|
||||||
|
|
||||||
function authentication(form) {
|
function authentication(form) {
|
||||||
if (form == undefined) {
|
if (form == undefined) {
|
||||||
form = {
|
form = {
|
||||||
|
@ -209,7 +211,28 @@ function registration_end(form) {
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
|
|
||||||
document.addEventListener('DOMContentLoaded', identification(), true);
|
function authentication_auto_button_status_switch(button) {
|
||||||
|
if (button !== undefined) {
|
||||||
|
if (button.classList.contains('active')) {
|
||||||
|
// Кнопка в статусе "Запомнить вход"
|
||||||
|
|
||||||
|
// Замена иконки
|
||||||
|
button.children[0].classList.replace('fa-lock', 'fa-unlock');
|
||||||
|
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
// Кнопка в статусе "Не запоминать вход"
|
||||||
|
|
||||||
|
|
||||||
|
// Замена иконки
|
||||||
|
button.children[0].classList.replace('fa-unlock', 'fa-lock');
|
||||||
|
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
function account_response(data, status, xhr) {
|
function account_response(data, status, xhr) {
|
||||||
// Обработка ответов
|
// Обработка ответов
|
||||||
|
@ -251,8 +274,8 @@ function account_response_success(data, status, xhr) {
|
||||||
// Перенести в отдельный файл который подгружается в зависимости от настроек
|
// Перенести в отдельный файл который подгружается в зависимости от настроек
|
||||||
// search_panel_show();
|
// search_panel_show();
|
||||||
|
|
||||||
// Обновление панели поиска
|
// // Обновление панели поиска
|
||||||
product_search();
|
// product_search();
|
||||||
|
|
||||||
account_response(data, status, xhr);
|
account_response(data, status, xhr);
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
// Инициализация геолокации
|
||||||
|
function geolocation_init() {
|
||||||
|
$.ajax({
|
||||||
|
url: '/profile/geolocation/init',
|
||||||
|
type: 'post',
|
||||||
|
dataType: 'json',
|
||||||
|
data: { '_csrf': yii.getCsrfToken() },
|
||||||
|
success: geolocation_success,
|
||||||
|
error: geolocation_error
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
geolocation_init();
|
||||||
|
|
||||||
|
function geolocation_responce(data, status, xhr) {
|
||||||
|
// Обработка ответов
|
||||||
|
|
||||||
|
main_response(data, status, xhr);
|
||||||
|
};
|
||||||
|
|
||||||
|
function geolocation_success(data, status, xhr) {
|
||||||
|
// Обработка ответов от удавшихся запросов
|
||||||
|
|
||||||
|
geolocation_responce(data, status, xhr);
|
||||||
|
};
|
||||||
|
|
||||||
|
function geolocation_error(data, status, xhr) {
|
||||||
|
// Обработка ответов от неудавшихся запросов
|
||||||
|
|
||||||
|
// Инициализация
|
||||||
|
data = data.responseJSON;
|
||||||
|
|
||||||
|
geolocation_responce(data, status, xhr);
|
||||||
|
};
|
Reference in New Issue