Commit 1fa223125237d4fd2fcf51f56104ff11e30b1616
1 parent
1c9309e1
add auto upload action and reorganized ParserController
Showing
11 changed files
with
362 additions
and
87 deletions
Show diff stats
backend/.gitignore
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 = 10; | 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() |
1 | +<?php | ||
2 | +namespace backend\controllers; | ||
3 | + | ||
4 | +use Yii; | ||
5 | +use yii\bootstrap\Modal; | ||
6 | +use yii\data\ActiveDataProvider; | ||
7 | +use yii\filters\AccessControl; | ||
8 | +use backend\components\base\BaseController; | ||
9 | +use yii\filters\VerbFilter; | ||
10 | +use backend\models\Details; | ||
11 | +use backend\models\ImporterFiles; | ||
12 | +use backend\models\Importer; | ||
13 | +use yii\base\ErrorException; | ||
14 | + | ||
15 | +use common\components\CustomVarDamp; | ||
16 | + | ||
17 | +/** | ||
18 | + * Parser controller | ||
19 | + */ | ||
20 | +class CheckPriceController extends BaseController | ||
21 | +{ | ||
22 | + public $layout = "/column"; | ||
23 | + | ||
24 | + /** | ||
25 | + * @inheritdoc | ||
26 | + */ | ||
27 | + public function behaviors() | ||
28 | + { | ||
29 | + return [ | ||
30 | + 'access' => [ | ||
31 | + 'class' => AccessControl::className(), | ||
32 | + 'rules' => [ | ||
33 | + [ | ||
34 | + 'actions' => ['index', 'view'], | ||
35 | + 'allow' => true, | ||
36 | + 'roles' => ['@'], | ||
37 | + ], | ||
38 | + ], | ||
39 | + ], | ||
40 | +// 'verbs' => [ | ||
41 | +// 'class' => VerbFilter::className(), | ||
42 | +// 'actions' => [ | ||
43 | +// 'logout' => ['post'], | ||
44 | +// ], | ||
45 | +// ], | ||
46 | + ]; | ||
47 | + } | ||
48 | + | ||
49 | + /** | ||
50 | + * @inheritdoc | ||
51 | + */ | ||
52 | + public function actions() | ||
53 | + { | ||
54 | + return [ | ||
55 | + 'error' => [ | ||
56 | + 'class' => 'yii\web\ErrorAction', | ||
57 | + ], | ||
58 | + ]; | ||
59 | + } | ||
60 | + | ||
61 | + | ||
62 | + public function actionIndex() | ||
63 | + { | ||
64 | + | ||
65 | + if(Yii::$app->request->isAjax){ | ||
66 | + CustomVarDamp::dumpAndDie(1); | ||
67 | + } | ||
68 | + | ||
69 | + //$query = (new Query())->select('*')->from('{{%importer_files}}')->where(['not', ['time_end' => null]])->orderBy(['upload_time' => SORT_DESC]); | ||
70 | + $query = Importer::find()->where(['active' => true])->orderBy(['price_date_update' => SORT_DESC]); | ||
71 | + | ||
72 | + $provider = new ActiveDataProvider([ | ||
73 | + 'query' => $query, | ||
74 | + 'pagination' => [ | ||
75 | + 'pageSize' => 10, | ||
76 | + ], | ||
77 | + ]); | ||
78 | + return $this->render('index', | ||
79 | + [ | ||
80 | + 'dataProvider' => $provider, | ||
81 | + ]); | ||
82 | + } | ||
83 | + | ||
84 | + | ||
85 | + public function actionView ($id) | ||
86 | + { | ||
87 | + $query = Details::find()->where(['IMPORT_ID' => $id])->orderBy(['timestamp' => SORT_DESC]); | ||
88 | + | ||
89 | + $provider = new ActiveDataProvider([ | ||
90 | + 'query' => $query, | ||
91 | + 'pagination' => [ | ||
92 | + 'pageSize' => 16, | ||
93 | + ], | ||
94 | + ]); | ||
95 | + return $this->render('view', | ||
96 | + ['dataProvider' => $provider]); | ||
97 | + } | ||
98 | +} |
backend/controllers/ParserController.php
@@ -36,7 +36,7 @@ class ParserController extends BaseController | @@ -36,7 +36,7 @@ class ParserController extends BaseController | ||
36 | 'class' => AccessControl::className(), | 36 | 'class' => AccessControl::className(), |
37 | 'rules' => [ | 37 | 'rules' => [ |
38 | [ | 38 | [ |
39 | - 'actions' => ['index', 'results', 'write','check_price'], | 39 | + 'actions' => ['index', 'results', 'write', 'check_price'], |
40 | 'allow' => true, | 40 | 'allow' => true, |
41 | 'roles' => ['@'], | 41 | 'roles' => ['@'], |
42 | ], | 42 | ], |
@@ -64,24 +64,57 @@ class ParserController extends BaseController | @@ -64,24 +64,57 @@ class ParserController extends BaseController | ||
64 | } | 64 | } |
65 | 65 | ||
66 | 66 | ||
67 | - public function actionIndex() | 67 | + public function actionIndex($mode = 0) |
68 | { | 68 | { |
69 | $model = new UploadFileParsingForm(); | 69 | $model = new UploadFileParsingForm(); |
70 | + // установим режим, 0 - ручная загрузка, 1 - автозагрузка | ||
71 | + $model->mode = $mode; | ||
70 | 72 | ||
71 | return $this->render('index', ['model' => $model]); | 73 | return $this->render('index', ['model' => $model]); |
72 | } | 74 | } |
73 | 75 | ||
74 | - public function actionResults() | 76 | + public function actionResults($mode = 0) |
75 | { | 77 | { |
76 | - $model = new UploadFileParsingForm(); | 78 | + |
79 | + $model = new UploadFileParsingForm(['mode' => $mode]); | ||
77 | $data = []; | 80 | $data = []; |
78 | if ($model->load(Yii::$app->request->post())) { | 81 | if ($model->load(Yii::$app->request->post())) { |
79 | $model->file = UploadedFile::getInstance($model, 'file'); | 82 | $model->file = UploadedFile::getInstance($model, 'file'); |
80 | - // первый проход - валидируем, сохраняем файл, ложим в кеш отпарсенные данные и параметры модели (потом при записи в базу данных они пригодятся) | 83 | + // первый проход - валидируем, сохраняем файл, ложим в кеш (для ручной загрузки) отпарсенные данные и параметры модели (потом при записи в базу данных они пригодятся) |
81 | if ($model->validate()) { | 84 | if ($model->validate()) { |
82 | - $model->file_path = Yii::getAlias('@webroot') . '/uploads/' . $model->file->baseName . '.' . $model->file->extension; | 85 | + // запишем дату загрузки файла в таблицу файлов поставщика (ImportersFiles) |
86 | + $files_model = new ImporterFiles(); | ||
87 | + // id поставщика получим из конфигурации | ||
88 | + $files_model->load(['ImporterFiles' => $model->toArray()]); | ||
89 | + try { | ||
90 | + $files_model->save(); | ||
91 | + } catch (ErrorException $e) { | ||
92 | + CustomVarDamp::dump($e->getMessage()); | ||
93 | + } | ||
94 | + // получим id только что записанной записи - его запишем в название файла | ||
95 | + $id = $files_model->find() | ||
96 | + ->where(['importer_id' => $files_model->importer_id]) | ||
97 | + ->orderBy(['id' => SORT_DESC]) | ||
98 | + ->one() | ||
99 | + ->id; | ||
100 | + | ||
101 | + $file_name = $id . '.' . $model->file->extension; | ||
102 | + | ||
103 | + if ($model->mode) { | ||
104 | + $model->file_path = Yii::getAlias('@auto_upload') . '/' . $file_name; | ||
105 | + } else { | ||
106 | + $model->file_path = Yii::getAlias('@manual_upload') . '/' . $file_name; | ||
107 | + } | ||
83 | 108 | ||
84 | $model->file->saveAs($model->file_path); | 109 | $model->file->saveAs($model->file_path); |
110 | + | ||
111 | + // для авто загрузки, обработка завершена | ||
112 | + if ($model->mode) { | ||
113 | + $model->success = true; | ||
114 | + return $this->render('index', ['model' => $model]); | ||
115 | + } | ||
116 | + | ||
117 | + // === ручная загрузка =========== | ||
85 | //запускаем парсинг | 118 | //запускаем парсинг |
86 | $data = $model->readFile(); | 119 | $data = $model->readFile(); |
87 | // сохраняем в кеш отпарсенные даные | 120 | // сохраняем в кеш отпарсенные даные |
@@ -90,6 +123,14 @@ class ParserController extends BaseController | @@ -90,6 +123,14 @@ class ParserController extends BaseController | ||
90 | Yii::$app->getCache()->set('parser_configuration', serialize($model)); | 123 | Yii::$app->getCache()->set('parser_configuration', serialize($model)); |
91 | 124 | ||
92 | 125 | ||
126 | + } else { | ||
127 | + // не прошла валидация форма загрузки файлов | ||
128 | + //@todo - отправка на страницу ошибок | ||
129 | + $errors_arr = $model->getErrors(); | ||
130 | + foreach ($errors_arr as $error) { | ||
131 | + CustomVarDamp::dump(array_values($error)); | ||
132 | + } | ||
133 | + die; | ||
93 | } | 134 | } |
94 | // листаем пагинатором, или повторно вызываем - считываем из кеша отпрасенные данные | 135 | // листаем пагинатором, или повторно вызываем - считываем из кеша отпрасенные данные |
95 | } else if (Yii::$app->getCache()->get('parser_data')) { | 136 | } else if (Yii::$app->getCache()->get('parser_data')) { |
@@ -148,69 +189,63 @@ class ParserController extends BaseController | @@ -148,69 +189,63 @@ class ParserController extends BaseController | ||
148 | 189 | ||
149 | // 1. запишем дату старта в таблицу файлов поставщика (ImportersFiles) | 190 | // 1. запишем дату старта в таблицу файлов поставщика (ImportersFiles) |
150 | $files_model = new ImporterFiles(); | 191 | $files_model = new ImporterFiles(); |
151 | - // id поставщика получим из конфигурации | 192 | + // id поставщика и id загруженного файла получим из конфигурации |
152 | $files_model->load(['ImporterFiles' => $configuration->toArray()]); | 193 | $files_model->load(['ImporterFiles' => $configuration->toArray()]); |
153 | - if ($files_model->validate()) { | 194 | + |
195 | + $update_date = date('Y-m-d H:i:s'); | ||
196 | + $files_model->time_start = $update_date; | ||
197 | + // запишем дату начала загрузки | ||
198 | + if (!$files_model->save()) { | ||
199 | + CustomVarDamp::dumpAndDie($files_model->getErrors()); | ||
200 | + } | ||
201 | + | ||
202 | + | ||
203 | + // 2. запишем полученные данные в таблицу товаров (Details) | ||
204 | + $details_model = new Details(); | ||
205 | + // проверим все ли обязательные колонки были указаны пользователем | ||
206 | + $details_model->load(['Details' => $data[0]]); | ||
207 | + if ($details_model->validate()) { | ||
208 | + // дополним данные значением импортера и даты обновления цены | ||
209 | + $data = \Yii::$app->multiparser->addColumns($data, ['IMPORT_ID' => $configuration['importer_id'], 'timestamp' => $update_date]); | ||
210 | + | ||
154 | try { | 211 | try { |
155 | - $files_model->save(); | ||
156 | - $update_date = $files_model->find() | ||
157 | - ->where(['importer_id' => $files_model->importer_id]) | ||
158 | - ->orderBy(['id' => SORT_DESC]) | ||
159 | - ->one() | ||
160 | - ->upload_time; | ||
161 | - $update_date = date('Y-m-d H:i:s',strtotime($update_date)); | ||
162 | - // CustomVarDamp::dumpAndDie(strtotime($update_date)); | ||
163 | - } catch (ErrorException $e) { | ||
164 | - CustomVarDamp::dump($e->getMessage()); | ||
165 | - } | 212 | + //@todo add transaction |
213 | + // попытаемся вставить данные в БД с апдейтом по ключам | ||
214 | + $details_model->ManualInsert($data); | ||
166 | 215 | ||
216 | + // 3. зафиксируем дату конца загрузки в файлах поставщика | ||
167 | 217 | ||
168 | - // 2. запишем полученные данные в таблицу товаров (Details) | ||
169 | - $details_model = new Details(); | ||
170 | - // проверим все ли обязательные колонки были указаны пользователем | ||
171 | - $details_model->load(['Details' => $data[0]]); | ||
172 | - if ($details_model->validate()) { | ||
173 | - // дополним данные значением импортера и даты обновления цены | ||
174 | - $data = \Yii::$app->multiparser->addColumns( $data, ['IMPORT_ID' => $configuration['importer_id'],'timestamp' => $update_date] ); | ||
175 | - | ||
176 | - try { | ||
177 | - //@todo add transaction | ||
178 | - // попытаемся вставить данные в БД с апдейтом по ключам | ||
179 | - $details_model->ManualInsert($data); | ||
180 | - | ||
181 | - // 3. зафиксируем дату начала и конца загрузки в файлах поставщика (для ручной загрузки начало приравниваем time_start и update_date) | ||
182 | - $files_model->time_start = $update_date; | ||
183 | - $files_model->time_end = date('Y-m-d H:i:s'); | ||
184 | - // CustomVarDamp::dumpAndDie($files_model); | ||
185 | - $files_model->save(); | ||
186 | - | ||
187 | - // 4. зафиксируем дату загрузки в таблице поставщиков | ||
188 | - $imp_model = Importer::findOne( $configuration['importer_id'] ); | ||
189 | - $imp_model->price_date_update = $update_date; | ||
190 | - | ||
191 | - if (!$imp_model->save()) { | ||
192 | - CustomVarDamp::dumpAndDie( $imp_model->getErrors() ); | ||
193 | - } | ||
194 | - $configuration['success'] = true; | ||
195 | - // все прошло успешно - очищаем кеш | ||
196 | - Yii::$app->getCache()->delete('parser_data'); | ||
197 | - Yii::$app->getCache()->delete('parser_configuration'); | ||
198 | - // @todo - Delete the file | ||
199 | - | ||
200 | - // все успешно - возвращаемся в начало | ||
201 | - return $this->render('index', ['model' => $configuration]); | ||
202 | - } catch (ErrorException $e) { | ||
203 | - CustomVarDamp::dump($e->getMessage()); | 218 | + $files_model->time_end = date('Y-m-d H:i:s'); |
219 | + // CustomVarDamp::dumpAndDie($files_model); | ||
220 | + if (!$files_model->save()) { | ||
221 | + CustomVarDamp::dumpAndDie($files_model->getErrors()); | ||
204 | } | 222 | } |
205 | - } | ||
206 | - if ($details_model->hasErrors()) { | ||
207 | - $errors_arr = $details_model->getErrors(); | ||
208 | - foreach ($errors_arr as $error) { | ||
209 | - CustomVarDamp::dump(array_values($error)); | 223 | + |
224 | + // 4. зафиксируем дату загрузки в таблице поставщиков | ||
225 | + $imp_model = Importer::findOne($configuration['importer_id']); | ||
226 | + $imp_model->price_date_update = $update_date; | ||
227 | + | ||
228 | + if (!$imp_model->save()) { | ||
229 | + CustomVarDamp::dumpAndDie($imp_model->getErrors()); | ||
210 | } | 230 | } |
231 | + $configuration['success'] = true; | ||
232 | + // все прошло успешно - очищаем кеш | ||
233 | + Yii::$app->getCache()->delete('parser_data'); | ||
234 | + Yii::$app->getCache()->delete('parser_configuration'); | ||
211 | 235 | ||
212 | - } | 236 | + unlink($configuration['file_path']); |
213 | 237 | ||
238 | + return $this->render('index', ['model' => $configuration]); | ||
239 | + | ||
240 | + } catch (ErrorException $e) { | ||
241 | + CustomVarDamp::dump($e->getMessage()); | ||
242 | + } | ||
243 | + } | ||
244 | + if ($details_model->hasErrors()) { | ||
245 | + $errors_arr = $details_model->getErrors(); | ||
246 | + foreach ($errors_arr as $error) { | ||
247 | + CustomVarDamp::dump(array_values($error)); | ||
248 | + } | ||
214 | 249 | ||
215 | } | 250 | } |
216 | 251 | ||
@@ -219,19 +254,19 @@ class ParserController extends BaseController | @@ -219,19 +254,19 @@ class ParserController extends BaseController | ||
219 | 254 | ||
220 | } | 255 | } |
221 | 256 | ||
222 | -// public function actionCheck_price () | ||
223 | -// { | ||
224 | -// //$query = (new Query())->select('*')->from('{{%importer_files}}')->where(['not', ['time_end' => null]])->orderBy(['upload_time' => SORT_DESC]); | ||
225 | -// $query = Importer::find()->where(['active' => true])->orderBy(['price_date_update' => SORT_DESC]); | ||
226 | -// | ||
227 | -// $provider = new ActiveDataProvider([ | ||
228 | -// 'query' => $query, | ||
229 | -// 'pagination' => [ | ||
230 | -// 'pageSize' => 10, | ||
231 | -// ], | ||
232 | -// ]); | ||
233 | -// return $this->render('check_price', | ||
234 | -// [ | ||
235 | -// 'dataProvider' => $provider]); | ||
236 | -// } | 257 | + public function actionAutoUpload() |
258 | + { | ||
259 | + //$query = (new Query())->select('*')->from('{{%importer_files}}')->where(['not', ['time_end' => null]])->orderBy(['upload_time' => SORT_DESC]); | ||
260 | + $query = Importer::find()->where(['active' => true])->orderBy(['price_date_update' => SORT_DESC]); | ||
261 | + | ||
262 | + $provider = new ActiveDataProvider([ | ||
263 | + 'query' => $query, | ||
264 | + 'pagination' => [ | ||
265 | + 'pageSize' => 10, | ||
266 | + ], | ||
267 | + ]); | ||
268 | + return $this->render('check_price', | ||
269 | + [ | ||
270 | + 'dataProvider' => $provider]); | ||
271 | + } | ||
237 | } | 272 | } |
backend/models/Details.php
@@ -70,6 +70,7 @@ class Details extends BaseActiveRecord | @@ -70,6 +70,7 @@ class Details extends BaseActiveRecord | ||
70 | 70 | ||
71 | public function ManualInsert ($data) | 71 | public function ManualInsert ($data) |
72 | { | 72 | { |
73 | + // \common\components\CustomVarDamp::dumpAndDie($data); | ||
73 | $table_name = self::tableName(); | 74 | $table_name = self::tableName(); |
74 | $keys_arr = array_keys( $data[0] ); | 75 | $keys_arr = array_keys( $data[0] ); |
75 | // найдем те поля которые не являются ключами. Их нужно будет при дубляже апдейтить | 76 | // найдем те поля которые не являются ключами. Их нужно будет при дубляже апдейтить |
backend/models/UploadFileParsingForm.php
@@ -25,10 +25,22 @@ class UploadFileParsingForm extends Model | @@ -25,10 +25,22 @@ class UploadFileParsingForm extends Model | ||
25 | // служебные атрибуты | 25 | // служебные атрибуты |
26 | public $file_path; | 26 | public $file_path; |
27 | public $success; | 27 | public $success; |
28 | + public $mode; //0 - режим ручной загрузки, 1 - режим автозагрузки | ||
28 | 29 | ||
29 | /** | 30 | /** |
30 | * @return array the validation rules. | 31 | * @return array the validation rules. |
31 | */ | 32 | */ |
33 | + public function __construct($config = []) | ||
34 | + { | ||
35 | + parent::__construct($config); | ||
36 | + if ( $this->mode ) { | ||
37 | + // автозагрузка, проставим сценарий | ||
38 | + $this->scenario = 'auto'; | ||
39 | + } | ||
40 | + | ||
41 | + } | ||
42 | + | ||
43 | + | ||
32 | public function rules() | 44 | public function rules() |
33 | { | 45 | { |
34 | return [ | 46 | return [ |
@@ -38,8 +50,9 @@ class UploadFileParsingForm extends Model | @@ -38,8 +50,9 @@ class UploadFileParsingForm extends Model | ||
38 | [['file'], 'file'],// 'extensions' => ['csv', 'xml'] ], | 50 | [['file'], 'file'],// 'extensions' => ['csv', 'xml'] ], |
39 | // 'wrongMimeType' => 'Указан неподдерживаемый тип файла. Можно выбирать csv, xml файлы.' ], | 51 | // 'wrongMimeType' => 'Указан неподдерживаемый тип файла. Можно выбирать csv, xml файлы.' ], |
40 | ['importer_id', 'integer','max' => 999999, 'min' => 0 ], | 52 | ['importer_id', 'integer','max' => 999999, 'min' => 0 ], |
41 | - [['action','delete_prefix', 'delete_price', 'success'], 'boolean'], | 53 | + [['action','delete_prefix', 'delete_price', 'success'], 'boolean', 'except' => 'auto' ], // только для ручной загрузки |
42 | ['delimiter', 'string', 'max' => 1], | 54 | ['delimiter', 'string', 'max' => 1], |
55 | + ['mode', 'safe'], | ||
43 | ['delimiter', 'default', 'value' => ';'], | 56 | ['delimiter', 'default', 'value' => ';'], |
44 | [ 'success', 'default', 'value' => false] | 57 | [ 'success', 'default', 'value' => false] |
45 | 58 | ||
@@ -65,4 +78,21 @@ class UploadFileParsingForm extends Model | @@ -65,4 +78,21 @@ class UploadFileParsingForm extends Model | ||
65 | return $data; | 78 | return $data; |
66 | } | 79 | } |
67 | 80 | ||
81 | + public function fields() | ||
82 | + { | ||
83 | + return [ | ||
84 | + | ||
85 | + 'importer_id', | ||
86 | + 'delimiter', | ||
87 | + 'delete_price', | ||
88 | + 'delete_prefix', | ||
89 | + 'file_path', | ||
90 | + // id записи таблицы ImportersFiles, получаем из имени загруженного файла | ||
91 | + 'id' => function () { | ||
92 | + return $this->file->getBaseName(); | ||
93 | + }, | ||
94 | + ]; | ||
95 | + } | ||
96 | + | ||
97 | + | ||
68 | } | 98 | } |
69 | \ No newline at end of file | 99 | \ No newline at end of file |
1 | +<?php | ||
2 | +use yii\helpers\Html; | ||
3 | +use yii\grid\GridView; | ||
4 | +use yii\grid\SerialColumn; | ||
5 | +use yii\grid\ActionColumn; | ||
6 | +use yii\widgets\Pjax; | ||
7 | + | ||
8 | + | ||
9 | +/* @var $this yii\web\View */ | ||
10 | +/* @var $searchModel backend\models\CatalogSearch */ | ||
11 | +/* @var $dataProvider yii\data\ActiveDataProvider */ | ||
12 | + | ||
13 | +$this->title = 'Проверка прайсов'; | ||
14 | +$this->params['breadcrumbs'][] = $this->title; | ||
15 | +?> | ||
16 | +<div class="catalog-index"> | ||
17 | + | ||
18 | + <h1><?= Html::encode($this->title) ?></h1> | ||
19 | + | ||
20 | + | ||
21 | + <?= GridView::widget( ['dataProvider' => $dataProvider, | ||
22 | + 'columns' => [['class' => SerialColumn::className()], | ||
23 | + [ | ||
24 | + 'class' => ActionColumn::className(), | ||
25 | + 'template'=>'{view}', | ||
26 | + 'contentOptions' => function ($model, $key, $index, $column){ | ||
27 | + return ['data' => ['id' => $model->id, 'date' => $model->price_date_update]]; | ||
28 | + } | ||
29 | + ], | ||
30 | + [ | ||
31 | + 'label' =>'Поставщик', | ||
32 | + 'value' => function ($data) { | ||
33 | + return '№ ' .$data->id . ' ' . $data->name; | ||
34 | + }, | ||
35 | + ], | ||
36 | + ['label' =>'Дата обновления', | ||
37 | + 'attribute' => 'price_date_update' ], | ||
38 | + ['label' => 'Кол-во дней', | ||
39 | + 'value' => function ($data) { | ||
40 | + $date1 = new DateTime("now"); | ||
41 | + $date2 = new DateTime( $data->price_date_update ); | ||
42 | + $quo_days = $date2->diff($date1)->format('%R%a'); | ||
43 | + // уберем первый символ - там знак "+" | ||
44 | + $quo_days = substr( $quo_days, 1, strlen($quo_days) ); | ||
45 | + $quo_days = (int) $quo_days; | ||
46 | + | ||
47 | + if($quo_days > 15) | ||
48 | + $quo_days = '>15'; | ||
49 | + | ||
50 | + return $quo_days; | ||
51 | + } | ||
52 | + ], | ||
53 | + ]] );?> | ||
54 | + | ||
55 | + | ||
56 | + | ||
57 | + | ||
58 | +</div> | ||
0 | \ No newline at end of file | 59 | \ No newline at end of file |
1 | +<?php | ||
2 | +use yii\helpers\Html; | ||
3 | +use yii\grid\GridView; | ||
4 | +use yii\grid\SerialColumn; | ||
5 | +use yii\bootstrap\Modal; | ||
6 | + | ||
7 | + | ||
8 | +/* @var $this yii\web\View */ | ||
9 | +/* @var $searchModel backend\models\CatalogSearch */ | ||
10 | +/* @var $dataProvider yii\data\ActiveDataProvider */ | ||
11 | + | ||
12 | +$this->title = 'Проверка прайсов'; | ||
13 | +$this->params['breadcrumbs'][] = $this->title; | ||
14 | + | ||
15 | +?> | ||
16 | +<div class="catalog-index"> | ||
17 | + | ||
18 | + <h1><?= Html::encode($this->title) ?></h1> | ||
19 | + | ||
20 | + <?= GridView::widget( ['dataProvider' => $dataProvider, | ||
21 | + | ||
22 | + ] ); | ||
23 | + | ||
24 | + | ||
25 | + ?> | ||
26 | + | ||
27 | + | ||
28 | + | ||
29 | +</div> | ||
30 | +<?php | ||
31 | + | ||
32 | +?> | ||
0 | \ No newline at end of file | 33 | \ No newline at end of file |
backend/views/layouts/column.php
@@ -283,8 +283,9 @@ $this->beginContent('@app/views/layouts/main.php'); | @@ -283,8 +283,9 @@ $this->beginContent('@app/views/layouts/main.php'); | ||
283 | 'options' => ['class' => 'sidebar-menu'], | 283 | 'options' => ['class' => 'sidebar-menu'], |
284 | 'items' => [ | 284 | 'items' => [ |
285 | ['label' => "Загрузка файлов", 'url' => ['#'], 'items' => [ | 285 | ['label' => "Загрузка файлов", 'url' => ['#'], 'items' => [ |
286 | + ['label' => 'Загрузить файл на сервер', 'url' => ['parser/index', 'mode' => 1]], | ||
286 | ['label' => 'Ручная загрузка', 'url' => ['parser/index']], | 287 | ['label' => 'Ручная загрузка', 'url' => ['parser/index']], |
287 | - ['label' => 'Проверка прайс файлов', 'url' => ['check_price/index']], | 288 | + ['label' => 'Проверка прайс файлов', 'url' => ['check-price/index']], |
288 | ], | 289 | ], |
289 | ], | 290 | ], |
290 | ['label' => 'Управление ролями', 'url' => ['#'], 'items' => [ | 291 | ['label' => 'Управление ролями', 'url' => ['#'], 'items' => [ |
backend/views/parser/index.php
@@ -3,16 +3,24 @@ use yii\widgets\ActiveForm; | @@ -3,16 +3,24 @@ use yii\widgets\ActiveForm; | ||
3 | use yii\helpers\Html; | 3 | use yii\helpers\Html; |
4 | use backend\models\Importer; | 4 | use backend\models\Importer; |
5 | use yii\helpers\ArrayHelper; | 5 | use yii\helpers\ArrayHelper; |
6 | +if ( $model->mode ) { | ||
7 | + // авто загрузка | ||
8 | + $mode = 1; | ||
9 | + $button_label = 'Загрузить'; | ||
10 | +} else { | ||
11 | + // ручная загрузка | ||
12 | + $mode = 0; | ||
13 | + $button_label = 'Прочитать'; | ||
14 | +} | ||
6 | 15 | ||
7 | ?> | 16 | ?> |
8 | <div class="row"> | 17 | <div class="row"> |
9 | <div class="col-lg-5"> | 18 | <div class="col-lg-5"> |
10 | - <?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data',],'action'=>['parser/results']]); | 19 | + <?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data',],'action'=>['parser/results', 'mode' => $mode]]); |
11 | if (!$model->action) { | 20 | if (!$model->action) { |
12 | $model->action = 1; | 21 | $model->action = 1; |
13 | } | 22 | } |
14 | if ($model->success) { // вернулись после успешной загрузки данного файла | 23 | if ($model->success) { // вернулись после успешной загрузки данного файла |
15 | - //echo "<h4>Файл успешно загружен</h4>"; | ||
16 | echo Html::tag('h3', 'Файл успешно загружен',['class'=>'bg-success']); | 24 | echo Html::tag('h3', 'Файл успешно загружен',['class'=>'bg-success']); |
17 | } | 25 | } |
18 | ?> | 26 | ?> |
@@ -20,16 +28,25 @@ use yii\helpers\ArrayHelper; | @@ -20,16 +28,25 @@ use yii\helpers\ArrayHelper; | ||
20 | 28 | ||
21 | 29 | ||
22 | <?= $form->field($model, 'importer_id')->dropDownList(ArrayHelper::map( Importer::find()->all(), 'id','name' )); ?> | 30 | <?= $form->field($model, 'importer_id')->dropDownList(ArrayHelper::map( Importer::find()->all(), 'id','name' )); ?> |
23 | - <?= $form->field($model, 'delete_price')->checkbox(['label' => 'Загрузить с удалением старого прайса']) ?> | 31 | + |
32 | + <?php if ( !$mode ) { | ||
33 | + echo $form->field($model, 'delete_price')->checkbox(['label' => 'Загрузить с удалением старого прайса']); | ||
34 | + } | ||
35 | + ?> | ||
36 | + | ||
24 | <?= $form->field($model, 'file')->fileInput()->label(false) ?> | 37 | <?= $form->field($model, 'file')->fileInput()->label(false) ?> |
25 | - <?= $form->field($model, 'action')->radioList([1 => 'Стандартная обработка', 0 => 'С разделителем'])->label(false) ?> | ||
26 | - <?= $form->field($model, 'delimiter', ['inputOptions' => ['value' => ';']]) ?> | ||
27 | 38 | ||
28 | - <?= $form->field($model, 'delete_prefix')->checkbox(['label' => 'Удалять префикс']) ?> | 39 | + <?php if ( !$mode ) { |
40 | + echo $form->field($model, 'action')->radioList([1 => 'Стандартная обработка', 0 => 'С разделителем'])->label(false); | ||
41 | + echo $form->field($model, 'delimiter', ['inputOptions' => ['value' => ';']]); | ||
42 | + | ||
43 | + echo $form->field($model, 'delete_prefix')->checkbox(['label' => 'Удалять префикс']); | ||
44 | + } | ||
45 | + ?> | ||
29 | 46 | ||
30 | 47 | ||
31 | <div class="form-group"> | 48 | <div class="form-group"> |
32 | - <?= Html::submitButton(Yii::t('app', 'Прочитать'), ['class' => 'btn btn-primary']) ?> | 49 | + <?= Html::submitButton(Yii::t( 'app', $button_label ), ['class' => 'btn btn-primary']) ?> |
33 | </div> | 50 | </div> |
34 | 51 | ||
35 | <?php ActiveForm::end() ?> | 52 | <?php ActiveForm::end() ?> |
common/config/bootstrap.php
@@ -3,3 +3,5 @@ Yii::setAlias('common', dirname(__DIR__)); | @@ -3,3 +3,5 @@ Yii::setAlias('common', dirname(__DIR__)); | ||
3 | Yii::setAlias('frontend', dirname(dirname(__DIR__)) . '/frontend'); | 3 | Yii::setAlias('frontend', dirname(dirname(__DIR__)) . '/frontend'); |
4 | Yii::setAlias('backend', dirname(dirname(__DIR__)) . '/backend'); | 4 | Yii::setAlias('backend', dirname(dirname(__DIR__)) . '/backend'); |
5 | Yii::setAlias('console', dirname(dirname(__DIR__)) . '/console'); | 5 | Yii::setAlias('console', dirname(dirname(__DIR__)) . '/console'); |
6 | +Yii::setAlias('auto_upload', dirname(dirname(__DIR__)) . '/backend/uploads/auto'); | ||
7 | +Yii::setAlias('manual_upload', dirname(dirname(__DIR__)) . '/backend/uploads/manual'); |