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 |