diff --git a/backend/controllers/CheckPriceController.php b/backend/controllers/CheckPriceController.php index a0814fe..3525ab3 100644 --- a/backend/controllers/CheckPriceController.php +++ b/backend/controllers/CheckPriceController.php @@ -63,7 +63,6 @@ class CheckPriceController extends BaseController { //$query = (new Query())->select('*')->from('{{%importer_files}}')->where(['not', ['time_end' => null]])->orderBy(['upload_time' => SORT_DESC]); $query = Importers::find()->where(['active' => true])->orderBy(['price_date_update' => SORT_DESC]); - $provider = new ActiveDataProvider([ 'query' => $query, 'pagination' => [ @@ -82,6 +81,9 @@ class CheckPriceController extends BaseController $query = Details::find()->where(['IMPORT_ID' => $id, 'timestamp' => $date_update])->limit(20); + $importer = Importers::findOne($id)->name; + $date = Yii::$app->formatter->asDate( $date_update, 'yyyy-MM-dd' ); + $provider = new ActiveDataProvider([ 'query' => $query, 'pagination' => false, @@ -89,7 +91,10 @@ class CheckPriceController extends BaseController ]); return $this->renderAjax('view', - ['dataProvider' => $provider]); + ['dataProvider' => $provider, + 'importer' => $importer, + 'date' => $date, + ]); } } diff --git a/backend/controllers/ImportersPrefixController.php b/backend/controllers/ImportersPrefixController.php new file mode 100644 index 0000000..dec3025 --- /dev/null +++ b/backend/controllers/ImportersPrefixController.php @@ -0,0 +1,112 @@ + [ + 'class' => VerbFilter::className(), + 'actions' => [ + 'delete' => ['post'], + ], + ], + ]; + } + + /** + * Lists all ImportersPrefix models. + * @return mixed + */ + public function actionIndex() + { + $searchModel = new ImportersPrefixSearch(); + $dataProvider = $searchModel->search(Yii::$app->request->queryParams); + + return $this->render('index', [ + 'searchModel' => $searchModel, + 'dataProvider' => $dataProvider, + ]); + } + + + /** + * Creates a new ImportersPrefix model. + * If creation is successful, the browser will be redirected to the 'view' page. + * @return mixed + */ + public function actionCreate() + { + $model = new ImportersPrefix(); + + if ($model->load(Yii::$app->request->post()) && $model->save()) { + return $this->redirect(['view', 'id' => $model->id]); + } else { + return $this->render('create', [ + 'model' => $model, + ]); + } + } + + /** + * Updates an existing ImportersPrefix model. + * If update is successful, the browser will be redirected to the 'view' page. + * @param string $id + * @return mixed + */ + public function actionUpdate($id) + { + $model = $this->findModel($id); + + if ($model->load(Yii::$app->request->post()) && $model->save()) { + return $this->redirect(['view', 'id' => $model->id]); + } else { + return $this->render('update', [ + 'model' => $model, + ]); + } + } + + /** + * Deletes an existing ImportersPrefix model. + * If deletion is successful, the browser will be redirected to the 'index' page. + * @param string $id + * @return mixed + */ + public function actionDelete($id) + { + $this->findModel($id)->delete(); + + return $this->redirect(['index']); + } + + /** + * Finds the ImportersPrefix model based on its primary key value. + * If the model is not found, a 404 HTTP exception will be thrown. + * @param string $id + * @return ImportersPrefix the loaded model + * @throws NotFoundHttpException if the model cannot be found + */ + protected function findModel($id) + { + if (($model = ImportersPrefix::findOne($id)) !== null) { + return $model; + } else { + throw new NotFoundHttpException('The requested page does not exist.'); + } + } +} diff --git a/backend/models/ImportersPrefix.php b/backend/models/ImportersPrefix.php new file mode 100644 index 0000000..ae0ca79 --- /dev/null +++ b/backend/models/ImportersPrefix.php @@ -0,0 +1,54 @@ + 100], + [['prefix'], 'string', 'max' => 50], + [['importer_id', 'brand', 'prefix'], 'unique', 'targetAttribute' => ['importer_id', 'brand', 'prefix'], 'message' => 'The combination of Importer ID, Brand and Prefix has already been taken.'] + ]; + } + + /** + * @inheritdoc + */ + public function attributeLabels() + { + return [ + 'id' => Yii::t('app', 'ID'), + 'importer_id' => Yii::t('app', 'Importer ID'), + 'brand' => Yii::t('app', 'Brand'), + 'prefix' => Yii::t('app', 'Prefix'), + 'timestamp' => Yii::t('app', 'Timestamp'), + ]; + } +} diff --git a/backend/models/ImportersPrefixSearch.php b/backend/models/ImportersPrefixSearch.php new file mode 100644 index 0000000..2cbe07b --- /dev/null +++ b/backend/models/ImportersPrefixSearch.php @@ -0,0 +1,69 @@ + $query, + ]); + + $this->load($params); + + if (!$this->validate()) { + // uncomment the following line if you do not want to return any records when validation fails + // $query->where('0=1'); + return $dataProvider; + } + + $query->andFilterWhere([ + 'id' => $this->id, + 'importer_id' => $this->importer_id, + 'timestamp' => $this->timestamp, + ]); + + $query->andFilterWhere(['like', 'brand', $this->brand]) + ->andFilterWhere(['like', 'prefix', $this->prefix]); + + return $dataProvider; + } +} diff --git a/backend/models/UploadFileParsingForm.php b/backend/models/UploadFileParsingForm.php index 3f8eb10..19d32c2 100644 --- a/backend/models/UploadFileParsingForm.php +++ b/backend/models/UploadFileParsingForm.php @@ -69,10 +69,10 @@ class UploadFileParsingForm extends Model ]; } - public function readFile(){ + public function readFile( $options = [] ){ - $data = Yii::$app->multiparser->parse( $this->file_path ); - if( !is_array($data) ){ + $data = Yii::$app->multiparser->parse( $this->file_path, $options ); + if( !is_array( $data ) ){ $data = ['No results']; } diff --git a/backend/views/check-price/index.php b/backend/views/check-price/index.php index dce29bb..8fe6322 100644 --- a/backend/views/check-price/index.php +++ b/backend/views/check-price/index.php @@ -16,7 +16,8 @@ $this->title = 'Проверка прайсов'; $this->params['breadcrumbs'][] = $this->title; // зарегистрируем скрипт для обработки загрузки модального окна ParserAsset::register($this); -Pjax::begin(); +// убрал Pjax потому что он при выполнении блокирует скрипт вызова модального окна +//Pjax::begin(); ?>
@@ -73,9 +74,8 @@ Pjax::begin(); ]); echo "
"; - Modal::end(); - Pjax::end(); + // Pjax::end(); ?> diff --git a/backend/views/check-price/view.php b/backend/views/check-price/view.php index f6d9ff0..680f946 100644 --- a/backend/views/check-price/view.php +++ b/backend/views/check-price/view.php @@ -8,8 +8,7 @@ use yii\bootstrap\Modal; /* @var $this yii\web\View */ /* @var $searchModel backend\models\CatalogSearch */ /* @var $dataProvider yii\data\ActiveDataProvider */ - -$this->title = 'Проверка прайсов'; +$this->title = 'Прайс ' . Html::encode( "{$importer} от {$date}" ); $this->params['breadcrumbs'][] = $this->title; ?> diff --git a/backend/views/importers-prefix/_form.php b/backend/views/importers-prefix/_form.php new file mode 100644 index 0000000..28aed29 --- /dev/null +++ b/backend/views/importers-prefix/_form.php @@ -0,0 +1,29 @@ + + +
+ + + + field($model, 'importer_id')->textInput(['maxlength' => true]) ?> + + field($model, 'brand')->textInput(['maxlength' => true]) ?> + + field($model, 'prefix')->textInput(['maxlength' => true]) ?> + + field($model, 'timestamp')->textInput() ?> + +
+ isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> +
+ + + +
diff --git a/backend/views/importers-prefix/_search.php b/backend/views/importers-prefix/_search.php new file mode 100644 index 0000000..fcb6827 --- /dev/null +++ b/backend/views/importers-prefix/_search.php @@ -0,0 +1,35 @@ + + + diff --git a/backend/views/importers-prefix/create.php b/backend/views/importers-prefix/create.php new file mode 100644 index 0000000..5d0316e --- /dev/null +++ b/backend/views/importers-prefix/create.php @@ -0,0 +1,21 @@ +title = Yii::t('app', 'Create Importers Prefix'); +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Importers Prefixes'), 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ + render('_form', [ + 'model' => $model, + ]) ?> + +
diff --git a/backend/views/importers-prefix/index.php b/backend/views/importers-prefix/index.php new file mode 100644 index 0000000..8ba3a31 --- /dev/null +++ b/backend/views/importers-prefix/index.php @@ -0,0 +1,38 @@ +title = Yii::t('app', 'Список префиксов поставщиков'); +$this->params['breadcrumbs'][] = $this->title; +?> + +
+ +

title) ?>

+ 'btn btn-success']) ?> + render('_search', ['model' => $searchModel]); ?> + + + + $dataProvider, + 'filterModel' => $searchModel, + 'columns' => [ + ['class' => 'yii\grid\SerialColumn'], + + 'importer_id', + 'brand', + 'prefix', + 'timestamp', + + ['class' => 'yii\grid\ActionColumn', + 'template' => '{update},{delete}'], + ], + ]); ?> + +
diff --git a/backend/views/importers-prefix/update.php b/backend/views/importers-prefix/update.php new file mode 100644 index 0000000..c392902 --- /dev/null +++ b/backend/views/importers-prefix/update.php @@ -0,0 +1,23 @@ +title = Yii::t('app', 'Update {modelClass}: ', [ + 'modelClass' => 'Importers Prefix', +]) . ' ' . $model->id; +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Importers Prefixes'), 'url' => ['index']]; +$this->params['breadcrumbs'][] = ['label' => $model->id, 'url' => ['view', 'id' => $model->id]]; +$this->params['breadcrumbs'][] = Yii::t('app', 'Update'); +?> +
+ +

title) ?>

+ + render('_form', [ + 'model' => $model, + ]) ?> + +
diff --git a/backend/views/importers-prefix/view.php b/backend/views/importers-prefix/view.php new file mode 100644 index 0000000..302b798 --- /dev/null +++ b/backend/views/importers-prefix/view.php @@ -0,0 +1,39 @@ +title = $model->id; +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Importers Prefixes'), 'url' => ['index']]; +$this->params['breadcrumbs'][] = $this->title; +?> +
+ +

title) ?>

+ +

+ $model->id], ['class' => 'btn btn-primary']) ?> + $model->id], [ + 'class' => 'btn btn-danger', + 'data' => [ + 'confirm' => Yii::t('app', 'Are you sure you want to delete this item?'), + 'method' => 'post', + ], + ]) ?> +

+ + $model, + 'attributes' => [ + 'id', + 'importer_id', + 'brand', + 'prefix', + 'timestamp', + ], + ]) ?> + +
diff --git a/backend/views/layouts/column.php b/backend/views/layouts/column.php index 844737d..4ab7533 100644 --- a/backend/views/layouts/column.php +++ b/backend/views/layouts/column.php @@ -287,6 +287,7 @@ $this->beginContent('@app/views/layouts/main.php'); ['label' => 'Загрузить файл на сервер', 'url' => ['parser/index', 'mode' => 1]], ['label' => 'Ручная загрузка', 'url' => ['parser/index']], ['label' => 'Проверка прайс файлов', 'url' => ['check-price/index']], + ['label' => 'Управление префиксами', 'url' => ['importers-prefix/index']], ], ], ['label' => 'Управление ролями', 'url' => ['#'], 'items' => [ diff --git a/backend/web/js/parser.js b/backend/web/js/parser.js index bc81bd2..216371e 100644 --- a/backend/web/js/parser.js +++ b/backend/web/js/parser.js @@ -1,13 +1,17 @@ $(function(){ + // check-price\view.php // для каждой строки обрабатываем клик по ссылке $('.modalButton').click(function (){ // находим контейнер с модальным контентом и подгружаем в него по оджаксу результат $('#modal').modal('show') .find('#modalContent') .load($(this).attr('value')); // в 'value' - у нас указан путь с гет параметрами к конроллеру + }); + + // server-files.php $('.deleteLink').click(function () { if ( confirm('Вы уверены что хотите удалить этот файл?') ){ diff --git a/vendor/yiisoft/multiparser/CsvParser.php b/vendor/yiisoft/multiparser/CsvParser.php index b64ef8e..ec175b9 100644 --- a/vendor/yiisoft/multiparser/CsvParser.php +++ b/vendor/yiisoft/multiparser/CsvParser.php @@ -97,7 +97,7 @@ class CsvParser implements ParserInterface { $finish = false; - while (!$finish) { + while (!$finish ) { $this->current_line ++; $j = 0; @@ -118,9 +118,10 @@ class CsvParser implements ParserInterface } } } - die(); - // $this->current_line --; - $this->file->seek( $this->current_line ); + // @todo - сделать опционально + // код для того что бы парсить первую строку, закомментировано как предполагается что первая значимая строка это заголовок + // $this->current_line --; +// $this->file->seek( $this->current_line ); } /** -- libgit2 0.21.4