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 2 \ No newline at end of file
... ...
backend/components/parsers/CustomConverter.php
... ... @@ -9,7 +9,7 @@ class CustomConverter extends Converter {
9 9 * @param $key_array - ключи для вложенного массива
10 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 15 if ($key_prefix) {
... ... @@ -44,7 +44,12 @@ class CustomConverter extends Converter {
44 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 54 $i = 0;
50 55 while ($i < count($value_arr)) {
... ...
backend/components/parsers/CustomCsvParser.php
... ... @@ -11,7 +11,7 @@ namespace backend\components\parsers;
11 11  
12 12 class CustomCsvParser extends \yii\multiparser\CsvParser {
13 13  
14   - public $last_line = 30;
  14 + public $last_line = 10;
15 15 //public $hasHeaderRow = true;
16 16 // public $keys = ['first','second', 'third', 'forth', 'fifth'];
17 17 public function setupConverter()
... ...
backend/controllers/ParserController.php
... ... @@ -2,6 +2,7 @@
2 2 namespace backend\controllers;
3 3  
4 4 use Yii;
  5 +use yii\data\ActiveDataProvider;
5 6 use yii\filters\AccessControl;
6 7 use backend\components\base\BaseController;
7 8 use yii\filters\VerbFilter;
... ... @@ -14,6 +15,7 @@ use backend\models\Details;
14 15 use backend\models\ImporterFiles;
15 16 use backend\models\Importer;
16 17 use yii\base\ErrorException;
  18 +use yii\db\Query;
17 19  
18 20 use common\components\CustomVarDamp;
19 21  
... ... @@ -34,7 +36,7 @@ class ParserController extends BaseController
34 36 'class' => AccessControl::className(),
35 37 'rules' => [
36 38 [
37   - 'actions' => ['index', 'results', 'write'],
  39 + 'actions' => ['index', 'results', 'write','check_price'],
38 40 'allow' => true,
39 41 'roles' => ['@'],
40 42 ],
... ... @@ -77,11 +79,11 @@ class ParserController extends BaseController
77 79 $model->file = UploadedFile::getInstance($model, 'file');
78 80 // первый проход - валидируем, сохраняем файл, ложим в кеш отпарсенные данные и параметры модели (потом при записи в базу данных они пригодятся)
79 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 88 Yii::$app->getCache()->set('parser_data', json_encode($data));
87 89 // сохраняем в кеш модель - в ней настройки для дальнейшей обработки данных
... ... @@ -188,13 +190,14 @@ class ParserController extends BaseController
188 190 if (!$imp_model->save()) {
189 191 CustomVarDamp::dumpAndDie( $imp_model->getErrors() );
190 192 }
191   -
  193 + $configuration['success'] = true;
192 194 // все прошло успешно - очищаем кеш
193 195 Yii::$app->getCache()->delete('parser_data');
194 196 Yii::$app->getCache()->delete('parser_configuration');
195 197 // @todo - Delete the file
196 198  
197   - CustomVarDamp::dumpAndDie('!!!');
  199 + // все успешно - возвращаемся в начало
  200 + return $this->render('index', ['model' => $configuration]);
198 201 } catch (ErrorException $e) {
199 202 CustomVarDamp::dump($e->getMessage());
200 203 }
... ... @@ -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 47 public function rules()
48 48 {
49 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 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 53 [['info'], 'string'],
54 54 [['PARSER_FIELD_MULTIPLIER'], 'number'],
... ...
backend/models/UploadFileParsingForm.php
... ... @@ -14,13 +14,17 @@ class UploadFileParsingForm extends Model
14 14 /**
15 15 * @var UploadedFile file attribute
16 16 */
  17 + // атрибуты формы
17 18 public $file;
18 19 public $importer_id;
19 20 public $action;
20 21 public $delimiter;
21 22 public $delete_price;
22 23 public $delete_prefix;
23   - public $update_date;
  24 +
  25 + // служебные атрибуты
  26 + public $file_path;
  27 + public $success;
24 28  
25 29 /**
26 30 * @return array the validation rules.
... ... @@ -34,10 +38,10 @@ class UploadFileParsingForm extends Model
34 38 [['file'], 'file'],// 'extensions' => ['csv', 'xml'] ],
35 39 // 'wrongMimeType' => 'Указан неподдерживаемый тип файла. Можно выбирать csv, xml файлы.' ],
36 40 ['importer_id', 'integer','max' => 999999, 'min' => 0 ],
37   - [['action','delete_prefix', 'delete_price'], 'boolean'],
  41 + [['action','delete_prefix', 'delete_price', 'success'], 'boolean'],
38 42 ['delimiter', 'string', 'max' => 1],
39 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 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 61 if( !is_array($data) ){
58 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 282 echo Menu::widget([
283 283 'options' => ['class' => 'sidebar-menu'],
284 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 290 ['label' => 'Управление ролями', 'url' => ['#'], 'items' => [
287 291 ['label' => 'Покупатели', 'url' => '#'],
288 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 25 \ No newline at end of file
... ...
backend/views/parser/index.php
... ... @@ -11,6 +11,10 @@ use yii\helpers\ArrayHelper;
11 11 if (!$model->action) {
12 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 19 <h3>Загрузка прайсов поставщиков</h3>
16 20  
... ...