Commit dd60c760c2557bec12501f3ba3b4712037ad3dbd

Authored by Mihail
1 parent 3edb729e

add menu and check price view and action (simple version)

backend/.gitignore 0 → 100644
  1 +/temp
0 \ No newline at end of file 2 \ No newline at end of file
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-&gt;beginContent(&#39;@app/views/layouts/main.php&#39;); @@ -282,7 +282,11 @@ $this-&gt;beginContent(&#39;@app/views/layouts/main.php&#39;);
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' => '#'],
backend/views/parser/checkPrice.php 0 → 100644
  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