Commit dd60c760c2557bec12501f3ba3b4712037ad3dbd
1 parent
3edb729e
add menu and check price view and action (simple version)
Showing
9 changed files
with
76 additions
and
17 deletions
Show diff stats
backend/components/parsers/CustomConverter.php
| @@ -9,7 +9,7 @@ class CustomConverter extends Converter { | @@ -9,7 +9,7 @@ class CustomConverter extends Converter { | ||
| 9 | * @param $key_array - ключи для вложенного массива | 9 | * @param $key_array - ключи для вложенного массива |
| 10 | * @return array - таблица с проименованными колонками | 10 | * @return array - таблица с проименованными колонками |
| 11 | */ | 11 | */ |
| 12 | - public static function convertToAssocArray ($value_arr, $key_array, $key_prefix = '') | 12 | + public static function convertToAssocArray ( array $value_arr, array $key_array, $key_prefix = '') |
| 13 | { | 13 | { |
| 14 | // очистка служебного префикса в массиве заголовков | 14 | // очистка служебного префикса в массиве заголовков |
| 15 | if ($key_prefix) { | 15 | if ($key_prefix) { |
| @@ -44,7 +44,12 @@ class CustomConverter extends Converter { | @@ -44,7 +44,12 @@ class CustomConverter extends Converter { | ||
| 44 | return $result; | 44 | return $result; |
| 45 | } | 45 | } |
| 46 | 46 | ||
| 47 | - public function addColumns ($value_arr, $add_array) | 47 | + /** |
| 48 | + * @param $value_arr - двумерный массив к которому нужно добавить колонки | ||
| 49 | + * @param $add_array - массив с колонками (ключи) и занчениями колонок | ||
| 50 | + * @return mixed | ||
| 51 | + */ | ||
| 52 | + public function addColumns ( array $value_arr , array $add_array ) | ||
| 48 | { | 53 | { |
| 49 | $i = 0; | 54 | $i = 0; |
| 50 | while ($i < count($value_arr)) { | 55 | while ($i < count($value_arr)) { |
backend/components/parsers/CustomCsvParser.php
| @@ -11,7 +11,7 @@ namespace backend\components\parsers; | @@ -11,7 +11,7 @@ namespace backend\components\parsers; | ||
| 11 | 11 | ||
| 12 | class CustomCsvParser extends \yii\multiparser\CsvParser { | 12 | class CustomCsvParser extends \yii\multiparser\CsvParser { |
| 13 | 13 | ||
| 14 | - public $last_line = 30; | 14 | + public $last_line = 10; |
| 15 | //public $hasHeaderRow = true; | 15 | //public $hasHeaderRow = true; |
| 16 | // public $keys = ['first','second', 'third', 'forth', 'fifth']; | 16 | // public $keys = ['first','second', 'third', 'forth', 'fifth']; |
| 17 | public function setupConverter() | 17 | public function setupConverter() |
backend/controllers/ParserController.php
| @@ -2,6 +2,7 @@ | @@ -2,6 +2,7 @@ | ||
| 2 | namespace backend\controllers; | 2 | namespace backend\controllers; |
| 3 | 3 | ||
| 4 | use Yii; | 4 | use Yii; |
| 5 | +use yii\data\ActiveDataProvider; | ||
| 5 | use yii\filters\AccessControl; | 6 | use yii\filters\AccessControl; |
| 6 | use backend\components\base\BaseController; | 7 | use backend\components\base\BaseController; |
| 7 | use yii\filters\VerbFilter; | 8 | use yii\filters\VerbFilter; |
| @@ -14,6 +15,7 @@ use backend\models\Details; | @@ -14,6 +15,7 @@ use backend\models\Details; | ||
| 14 | use backend\models\ImporterFiles; | 15 | use backend\models\ImporterFiles; |
| 15 | use backend\models\Importer; | 16 | use backend\models\Importer; |
| 16 | use yii\base\ErrorException; | 17 | use yii\base\ErrorException; |
| 18 | +use yii\db\Query; | ||
| 17 | 19 | ||
| 18 | use common\components\CustomVarDamp; | 20 | use common\components\CustomVarDamp; |
| 19 | 21 | ||
| @@ -34,7 +36,7 @@ class ParserController extends BaseController | @@ -34,7 +36,7 @@ class ParserController extends BaseController | ||
| 34 | 'class' => AccessControl::className(), | 36 | 'class' => AccessControl::className(), |
| 35 | 'rules' => [ | 37 | 'rules' => [ |
| 36 | [ | 38 | [ |
| 37 | - 'actions' => ['index', 'results', 'write'], | 39 | + 'actions' => ['index', 'results', 'write','check_price'], |
| 38 | 'allow' => true, | 40 | 'allow' => true, |
| 39 | 'roles' => ['@'], | 41 | 'roles' => ['@'], |
| 40 | ], | 42 | ], |
| @@ -77,11 +79,11 @@ class ParserController extends BaseController | @@ -77,11 +79,11 @@ class ParserController extends BaseController | ||
| 77 | $model->file = UploadedFile::getInstance($model, 'file'); | 79 | $model->file = UploadedFile::getInstance($model, 'file'); |
| 78 | // первый проход - валидируем, сохраняем файл, ложим в кеш отпарсенные данные и параметры модели (потом при записи в базу данных они пригодятся) | 80 | // первый проход - валидируем, сохраняем файл, ложим в кеш отпарсенные данные и параметры модели (потом при записи в базу данных они пригодятся) |
| 79 | if ($model->validate()) { | 81 | if ($model->validate()) { |
| 80 | - $filePath = Yii::getAlias('@webroot') . '/uploads/' . $model->file->baseName . '.' . $model->file->extension; | 82 | + $model->file_path = Yii::getAlias('@webroot') . '/uploads/' . $model->file->baseName . '.' . $model->file->extension; |
| 81 | 83 | ||
| 82 | - $model->file->saveAs($filePath); | 84 | + $model->file->saveAs($model->file_path); |
| 83 | //запускаем парсинг | 85 | //запускаем парсинг |
| 84 | - $data = $model->readFile($filePath); | 86 | + $data = $model->readFile(); |
| 85 | // сохраняем в кеш отпарсенные даные | 87 | // сохраняем в кеш отпарсенные даные |
| 86 | Yii::$app->getCache()->set('parser_data', json_encode($data)); | 88 | Yii::$app->getCache()->set('parser_data', json_encode($data)); |
| 87 | // сохраняем в кеш модель - в ней настройки для дальнейшей обработки данных | 89 | // сохраняем в кеш модель - в ней настройки для дальнейшей обработки данных |
| @@ -188,13 +190,14 @@ class ParserController extends BaseController | @@ -188,13 +190,14 @@ class ParserController extends BaseController | ||
| 188 | if (!$imp_model->save()) { | 190 | if (!$imp_model->save()) { |
| 189 | CustomVarDamp::dumpAndDie( $imp_model->getErrors() ); | 191 | CustomVarDamp::dumpAndDie( $imp_model->getErrors() ); |
| 190 | } | 192 | } |
| 191 | - | 193 | + $configuration['success'] = true; |
| 192 | // все прошло успешно - очищаем кеш | 194 | // все прошло успешно - очищаем кеш |
| 193 | Yii::$app->getCache()->delete('parser_data'); | 195 | Yii::$app->getCache()->delete('parser_data'); |
| 194 | Yii::$app->getCache()->delete('parser_configuration'); | 196 | Yii::$app->getCache()->delete('parser_configuration'); |
| 195 | // @todo - Delete the file | 197 | // @todo - Delete the file |
| 196 | 198 | ||
| 197 | - CustomVarDamp::dumpAndDie('!!!'); | 199 | + // все успешно - возвращаемся в начало |
| 200 | + return $this->render('index', ['model' => $configuration]); | ||
| 198 | } catch (ErrorException $e) { | 201 | } catch (ErrorException $e) { |
| 199 | CustomVarDamp::dump($e->getMessage()); | 202 | CustomVarDamp::dump($e->getMessage()); |
| 200 | } | 203 | } |
| @@ -215,4 +218,18 @@ class ParserController extends BaseController | @@ -215,4 +218,18 @@ class ParserController extends BaseController | ||
| 215 | 218 | ||
| 216 | } | 219 | } |
| 217 | 220 | ||
| 221 | + public function actionCheck_price () | ||
| 222 | + { | ||
| 223 | + $query = (new Query())->select('*')->from('{{%importer_files}}')->where(['not', ['time_end' => null]])->orderBy(['upload_time' => SORT_DESC]); | ||
| 224 | + | ||
| 225 | + $provider = new ActiveDataProvider([ | ||
| 226 | + 'query' => $query, | ||
| 227 | + 'pagination' => [ | ||
| 228 | + 'pageSize' => 10, | ||
| 229 | + ], | ||
| 230 | + ]); | ||
| 231 | + return $this->render('checkPrice', | ||
| 232 | + [ | ||
| 233 | + 'dataProvider' => $provider]); | ||
| 234 | + } | ||
| 218 | } | 235 | } |
backend/models/Importer.php
| @@ -47,8 +47,8 @@ class Importer extends BaseActiveRecord | @@ -47,8 +47,8 @@ class Importer extends BaseActiveRecord | ||
| 47 | public function rules() | 47 | public function rules() |
| 48 | { | 48 | { |
| 49 | return [ | 49 | return [ |
| 50 | - [['code', 'name', 'currency_id', 'delivery', 'info', 'price_date_update'], 'required'], | ||
| 51 | - [['name_price', 'email', 'PARSER_FIELD_SIGN'], 'safe'], | 50 | + [['code', 'name', 'currency_id', 'delivery', 'price_date_update'], 'required'], |
| 51 | + [['name_price', 'email', 'PARSER_FIELD_SIGN', 'info'], 'safe'], | ||
| 52 | [['currency_id', 'active', 'PARSER_IS_ACTIVE', 'PARSER_COLUMN_COUNT', 'PARSER_FIELD_BRAND', 'PARSER_FIELD_ARTICLE', 'PARSER_FIELD_ARTICLE_PREFIX', 'PARSER_FIELD_PRICE', 'PARSER_FIELD_DESCR', 'PARSER_FIELD_BOX', 'PARSER_FIELD_ADD_BOX', 'PARSER_FIELD_GROUP_RG'], 'integer'], | 52 | [['currency_id', 'active', 'PARSER_IS_ACTIVE', 'PARSER_COLUMN_COUNT', 'PARSER_FIELD_BRAND', 'PARSER_FIELD_ARTICLE', 'PARSER_FIELD_ARTICLE_PREFIX', 'PARSER_FIELD_PRICE', 'PARSER_FIELD_DESCR', 'PARSER_FIELD_BOX', 'PARSER_FIELD_ADD_BOX', 'PARSER_FIELD_GROUP_RG'], 'integer'], |
| 53 | [['info'], 'string'], | 53 | [['info'], 'string'], |
| 54 | [['PARSER_FIELD_MULTIPLIER'], 'number'], | 54 | [['PARSER_FIELD_MULTIPLIER'], 'number'], |
backend/models/UploadFileParsingForm.php
| @@ -14,13 +14,17 @@ class UploadFileParsingForm extends Model | @@ -14,13 +14,17 @@ class UploadFileParsingForm extends Model | ||
| 14 | /** | 14 | /** |
| 15 | * @var UploadedFile file attribute | 15 | * @var UploadedFile file attribute |
| 16 | */ | 16 | */ |
| 17 | + // атрибуты формы | ||
| 17 | public $file; | 18 | public $file; |
| 18 | public $importer_id; | 19 | public $importer_id; |
| 19 | public $action; | 20 | public $action; |
| 20 | public $delimiter; | 21 | public $delimiter; |
| 21 | public $delete_price; | 22 | public $delete_price; |
| 22 | public $delete_prefix; | 23 | public $delete_prefix; |
| 23 | - public $update_date; | 24 | + |
| 25 | + // служебные атрибуты | ||
| 26 | + public $file_path; | ||
| 27 | + public $success; | ||
| 24 | 28 | ||
| 25 | /** | 29 | /** |
| 26 | * @return array the validation rules. | 30 | * @return array the validation rules. |
| @@ -34,10 +38,10 @@ class UploadFileParsingForm extends Model | @@ -34,10 +38,10 @@ class UploadFileParsingForm extends Model | ||
| 34 | [['file'], 'file'],// 'extensions' => ['csv', 'xml'] ], | 38 | [['file'], 'file'],// 'extensions' => ['csv', 'xml'] ], |
| 35 | // 'wrongMimeType' => 'Указан неподдерживаемый тип файла. Можно выбирать csv, xml файлы.' ], | 39 | // 'wrongMimeType' => 'Указан неподдерживаемый тип файла. Можно выбирать csv, xml файлы.' ], |
| 36 | ['importer_id', 'integer','max' => 999999, 'min' => 0 ], | 40 | ['importer_id', 'integer','max' => 999999, 'min' => 0 ], |
| 37 | - [['action','delete_prefix', 'delete_price'], 'boolean'], | 41 | + [['action','delete_prefix', 'delete_price', 'success'], 'boolean'], |
| 38 | ['delimiter', 'string', 'max' => 1], | 42 | ['delimiter', 'string', 'max' => 1], |
| 39 | ['delimiter', 'default', 'value' => ';'], | 43 | ['delimiter', 'default', 'value' => ';'], |
| 40 | - ['update_date', 'safe'] | 44 | + [ 'success', 'default', 'value' => false] |
| 41 | 45 | ||
| 42 | ]; | 46 | ]; |
| 43 | } | 47 | } |
| @@ -51,9 +55,9 @@ class UploadFileParsingForm extends Model | @@ -51,9 +55,9 @@ class UploadFileParsingForm extends Model | ||
| 51 | ]; | 55 | ]; |
| 52 | } | 56 | } |
| 53 | 57 | ||
| 54 | - public function readFile($filePath){ | 58 | + public function readFile(){ |
| 55 | 59 | ||
| 56 | - $data = Yii::$app->multiparser->parse($filePath); | 60 | + $data = Yii::$app->multiparser->parse( $this->file_path ); |
| 57 | if( !is_array($data) ){ | 61 | if( !is_array($data) ){ |
| 58 | $data = ['No results']; | 62 | $data = ['No results']; |
| 59 | } | 63 | } |
backend/views/layouts/column.php
| @@ -282,7 +282,11 @@ $this->beginContent('@app/views/layouts/main.php'); | @@ -282,7 +282,11 @@ $this->beginContent('@app/views/layouts/main.php'); | ||
| 282 | echo Menu::widget([ | 282 | echo Menu::widget([ |
| 283 | 'options' => ['class' => 'sidebar-menu'], | 283 | 'options' => ['class' => 'sidebar-menu'], |
| 284 | 'items' => [ | 284 | 'items' => [ |
| 285 | - ['label' => "Прайс парсер", 'url' => ['parser/index']], | 285 | + ['label' => "Загрузка файлов", 'url' => ['#'], 'items' => [ |
| 286 | + ['label' => 'Ручная загрузка', 'url' => ['parser/index']], | ||
| 287 | + ['label' => 'Проверка прайс файлов', 'url' => ['parser/check_price']], | ||
| 288 | + ], | ||
| 289 | + ], | ||
| 286 | ['label' => 'Управление ролями', 'url' => ['#'], 'items' => [ | 290 | ['label' => 'Управление ролями', 'url' => ['#'], 'items' => [ |
| 287 | ['label' => 'Покупатели', 'url' => '#'], | 291 | ['label' => 'Покупатели', 'url' => '#'], |
| 288 | ['label' => 'Поставщики', 'url' => '#'], | 292 | ['label' => 'Поставщики', 'url' => '#'], |
| 1 | +<?php | ||
| 2 | +use yii\helpers\Html; | ||
| 3 | +use yii\grid\GridView; | ||
| 4 | +use yii\grid\SerialColumn; | ||
| 5 | +use yii\grid\DataColumn; | ||
| 6 | + | ||
| 7 | + | ||
| 8 | +/* @var $this yii\web\View */ | ||
| 9 | +/* @var $searchModel backend\models\CatalogSearch */ | ||
| 10 | +/* @var $dataProvider yii\data\ActiveDataProvider */ | ||
| 11 | + | ||
| 12 | +$this->title = 'Results'; | ||
| 13 | +$this->params['breadcrumbs'][] = $this->title; | ||
| 14 | +?> | ||
| 15 | +<div class="catalog-index"> | ||
| 16 | + | ||
| 17 | + <h1><?= Html::encode($this->title) ?></h1> | ||
| 18 | + | ||
| 19 | + <?= GridView::widget( ['dataProvider' => $dataProvider, | ||
| 20 | + 'columns' => [['class' => SerialColumn::className()], | ||
| 21 | + 'importer_id', | ||
| 22 | + 'upload_time' ]] );?> | ||
| 23 | + | ||
| 24 | +</div> | ||
| 0 | \ No newline at end of file | 25 | \ No newline at end of file |
backend/views/parser/index.php
| @@ -11,6 +11,10 @@ use yii\helpers\ArrayHelper; | @@ -11,6 +11,10 @@ use yii\helpers\ArrayHelper; | ||
| 11 | if (!$model->action) { | 11 | if (!$model->action) { |
| 12 | $model->action = 1; | 12 | $model->action = 1; |
| 13 | } | 13 | } |
| 14 | + if ($model->success) { // вернулись после успешной загрузки данного файла | ||
| 15 | + //echo "<h4>Файл успешно загружен</h4>"; | ||
| 16 | + echo Html::tag('h3', 'Файл успешно загружен',['class'=>'bg-success']); | ||
| 17 | + } | ||
| 14 | ?> | 18 | ?> |
| 15 | <h3>Загрузка прайсов поставщиков</h3> | 19 | <h3>Загрузка прайсов поставщиков</h3> |
| 16 | 20 |