Commit 4b12e92e9e693eaf502cdd4a07a330e24c270290
1 parent
5c9840b3
work with margins and brands pages
Showing
23 changed files
with
189 additions
and
153 deletions
Show diff stats
.gitignore
.htaccess
backend/.gitignore
backend/controllers/ParserController.php
| ... | ... | @@ -7,6 +7,7 @@ use common\components\exceptions\PriceParsingException; |
| 7 | 7 | use common\components\exceptions\RgParsingException; |
| 8 | 8 | use common\components\ModelArrayValidator; |
| 9 | 9 | use common\components\parsers\MailParser; |
| 10 | +use common\components\parsers\Parser; | |
| 10 | 11 | use Yii; |
| 11 | 12 | use yii\data\ActiveDataProvider; |
| 12 | 13 | use yii\filters\AccessControl; |
| ... | ... | @@ -186,11 +187,14 @@ class ParserController extends BaseController |
| 186 | 187 | public function actionServerFiles () |
| 187 | 188 | { |
| 188 | 189 | $arr_id_files = []; |
| 190 | + $arr_supported_extension = Parser::supportedExtension(); | |
| 189 | 191 | |
| 190 | 192 | // получим список файлов которые ожидают к загрузке |
| 191 | - foreach ( glob(Yii::getAlias('@temp_upload') . '/*.csv' ) as $server_file ) { | |
| 192 | - $file_id = basename($server_file,".csv"); | |
| 193 | - $arr_id_files[] = (int) $file_id; | |
| 193 | + foreach ($arr_supported_extension as $ext) { | |
| 194 | + foreach ( glob( Yii::getAlias('@temp_upload') . '/*.' . $ext ) as $server_file ) { | |
| 195 | + $file_id = basename($server_file, ".{$ext}"); | |
| 196 | + $arr_id_files[] = (int)$file_id; | |
| 197 | + } | |
| 194 | 198 | } |
| 195 | 199 | |
| 196 | 200 | $query = ImportersFiles::find()->where(['in', 'id', $arr_id_files])->orderBy( ['upload_time' => SORT_DESC] ); |
| ... | ... | @@ -215,7 +219,13 @@ class ParserController extends BaseController |
| 215 | 219 | $id = Yii::$app->request->post()['id']; |
| 216 | 220 | try { |
| 217 | 221 | $files_model->delete($id); |
| 218 | - unlink(Yii::getAlias('@temp_upload') . '/' . $id . '.csv' ); | |
| 222 | + if (file_exists( Yii::getAlias('@temp_upload') . '/' . $id . '.csv' )) { | |
| 223 | + unlink(Yii::getAlias('@temp_upload') . '/' . $id . '.csv' ); | |
| 224 | + } | |
| 225 | + if (file_exists( Yii::getAlias('@temp_upload') . '/' . $id . '.xlsx' )) { | |
| 226 | + unlink(Yii::getAlias('@temp_upload') . '/' . $id . '.xlsx' ); | |
| 227 | + } | |
| 228 | + | |
| 219 | 229 | // сообщим скрипту что все ОК |
| 220 | 230 | echo 1; |
| 221 | 231 | } catch (ErrorException $e) { |
| ... | ... | @@ -230,22 +240,24 @@ class ParserController extends BaseController |
| 230 | 240 | |
| 231 | 241 | public function actionLaunchCroneUploads () |
| 232 | 242 | { |
| 233 | - foreach (glob(Yii::getAlias('@temp_upload') . '/*.csv') as $server_file) { | |
| 243 | + $arr_supported_extension = Parser::supportedExtension(); | |
| 244 | + // получим список файлов которые ожидают к загрузке | |
| 245 | + foreach ($arr_supported_extension as $ext) { | |
| 246 | + foreach ( glob( Yii::getAlias('@temp_upload') . '/*.' . $ext ) as $server_file ) { | |
| 234 | 247 | |
| 235 | - $file_name = basename($server_file,".csv"); | |
| 236 | - copy( $server_file, Yii::getAlias('@auto_upload') . '/' . $file_name . '.csv' ); | |
| 248 | + $file_name = basename($server_file, ".{$ext}"); | |
| 249 | + copy($server_file, Yii::getAlias('@auto_upload') . '/' . $file_name . ".{$ext}"); | |
| 237 | 250 | |
| 251 | + } | |
| 238 | 252 | } |
| 239 | - | |
| 240 | 253 | $controller = new \console\controllers\ParserController( 'parse-prices', $this->module ); |
| 241 | - $controller->actionSaveMailAttachments(); | |
| 254 | + //$controller->actionSaveMailAttachments(); | |
| 242 | 255 | $controller->actionParsePrices(); |
| 243 | 256 | |
| 244 | 257 | Yii::$app->session->setFlash( 'server-files', 'Файл успешно загружен' ); |
| 245 | 258 | $this->redirect('server-files'); |
| 246 | 259 | } |
| 247 | 260 | |
| 248 | - | |
| 249 | 261 | /** |
| 250 | 262 | * сохраняет файл на диск и регистрирует в ImportersFiles |
| 251 | 263 | * @param $model - модель с настройками | ... | ... |
backend/views/brands/_form.php
| ... | ... | @@ -10,26 +10,20 @@ use yii\widgets\ActiveForm; |
| 10 | 10 | |
| 11 | 11 | <div class="brands-form"> |
| 12 | 12 | |
| 13 | - <?php $form = ActiveForm::begin(); ?> | |
| 13 | + <?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]); ?> | |
| 14 | 14 | |
| 15 | - <?= $form->field($model, 'BRAND')->textInput(['maxlength' => true]) ?> | |
| 16 | - | |
| 17 | - <?= $form->field($model, 'if_tecdoc')->textInput() ?> | |
| 18 | - | |
| 19 | - <?= $form->field($model, 'tecdoc_logo')->textInput(['maxlength' => true]) ?> | |
| 20 | - | |
| 21 | - <?= $form->field($model, 'if_oem')->textInput() ?> | |
| 22 | - | |
| 23 | - <?= $form->field($model, 'if_checked')->textInput() ?> | |
| 15 | + <?php | |
| 16 | + if($model->isNewRecord) | |
| 17 | + echo $form->field($model, 'BRAND')->textInput(['maxlength' => true])->label('Название') | |
| 18 | + ?> | |
| 24 | 19 | |
| 25 | 20 | <?= $form->field($model, 'CONTENT')->textarea(['rows' => 6]) ?> |
| 21 | + <?= $form->field($model, 'if_oem')->checkbox() ?> | |
| 22 | + <?= $form->field($model, 'IMG')->fileInput() ?> | |
| 26 | 23 | |
| 27 | - <?= $form->field($model, 'IMG')->textInput(['maxlength' => true]) ?> | |
| 28 | - | |
| 29 | - <?= $form->field($model, 'timestamp')->textInput() ?> | |
| 30 | 24 | |
| 31 | 25 | <div class="form-group"> |
| 32 | - <?= Html::submitButton($model->isNewRecord ? 'Добавить' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> | |
| 26 | + <?= Html::submitButton($model->isNewRecord ? 'Добавить' : 'Редактировать', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> | |
| 33 | 27 | </div> |
| 34 | 28 | |
| 35 | 29 | <?php ActiveForm::end(); ?> | ... | ... |
backend/views/brands/index.php
| ... | ... | @@ -9,6 +9,8 @@ use yii\grid\GridView; |
| 9 | 9 | |
| 10 | 10 | $this->title = 'Бренды'; |
| 11 | 11 | $this->params['breadcrumbs'][] = $this->title; |
| 12 | +$img0 = '/storage/checkbox0.gif'; | |
| 13 | +$img1 = '/storage/checkbox1.gif'; | |
| 12 | 14 | ?> |
| 13 | 15 | <div class="brands-index"> |
| 14 | 16 | |
| ... | ... | @@ -27,15 +29,34 @@ $this->params['breadcrumbs'][] = $this->title; |
| 27 | 29 | |
| 28 | 30 | 'ID', |
| 29 | 31 | 'BRAND', |
| 30 | - 'if_tecdoc', | |
| 31 | - 'tecdoc_logo', | |
| 32 | - 'if_oem', | |
| 33 | - // 'if_checked', | |
| 34 | - // 'CONTENT:ntext', | |
| 35 | - // 'IMG', | |
| 36 | - // 'timestamp', | |
| 37 | - | |
| 38 | - ['class' => 'yii\grid\ActionColumn'], | |
| 32 | + ['attribute' => 'if_tecdoc', | |
| 33 | + 'format' => 'raw', | |
| 34 | + 'value' => function ( $model ) use ($img0, $img1) { | |
| 35 | + if ($model->if_tecdoc == '1') { | |
| 36 | + $info = " <img src=$img1>"; | |
| 37 | + } | |
| 38 | + else { | |
| 39 | + $info = " <img src=$img0>"; | |
| 40 | + } | |
| 41 | + return $info; | |
| 42 | + }, | |
| 43 | + ], | |
| 44 | + | |
| 45 | + ['label' => 'ОРИГИНАЛ?', | |
| 46 | + 'attribute' => 'if_oem', | |
| 47 | + 'format' => 'raw', | |
| 48 | + 'value' => function ( $model ) use ($img0, $img1) { | |
| 49 | + if ($model->if_oem == '1') { | |
| 50 | + $info = " <img src=$img1>"; | |
| 51 | + } | |
| 52 | + else { | |
| 53 | + $info = " <img src=$img0>"; | |
| 54 | + } | |
| 55 | + return $info; | |
| 56 | + }, | |
| 57 | + ], | |
| 58 | + ['class' => 'yii\grid\ActionColumn', | |
| 59 | + 'template' => '{update}'], | |
| 39 | 60 | ], |
| 40 | 61 | ]); ?> |
| 41 | 62 | ... | ... |
backend/views/brands/update.php
| ... | ... | @@ -5,7 +5,7 @@ use yii\helpers\Html; |
| 5 | 5 | /* @var $this yii\web\View */ |
| 6 | 6 | /* @var $model common\models\Brands */ |
| 7 | 7 | |
| 8 | -$this->title = 'Update Brands: ' . ' ' . $model->BRAND; | |
| 8 | +$this->title = 'Редактирование бренда: ' . ' ' . $model->BRAND; | |
| 9 | 9 | $this->params['breadcrumbs'][] = ['label' => 'Brands', 'url' => ['index']]; |
| 10 | 10 | $this->params['breadcrumbs'][] = ['label' => $model->BRAND, 'url' => ['view', 'id' => $model->BRAND]]; |
| 11 | 11 | $this->params['breadcrumbs'][] = 'Update'; | ... | ... |
backend/views/margins/create.php
| ... | ... | @@ -6,7 +6,7 @@ use yii\helpers\Html; |
| 6 | 6 | /* @var $this yii\web\View */ |
| 7 | 7 | /* @var $model common\models\Margins */ |
| 8 | 8 | |
| 9 | -$this->title = 'Добавить Margins'; | |
| 9 | +$this->title = 'Добавить тип цен'; | |
| 10 | 10 | $this->params['breadcrumbs'][] = ['label' => 'Margins', 'url' => ['index']]; |
| 11 | 11 | $this->params['breadcrumbs'][] = $this->title; |
| 12 | 12 | ?> |
| ... | ... | @@ -18,4 +18,6 @@ $this->params['breadcrumbs'][] = $this->title; |
| 18 | 18 | 'model' => $model, |
| 19 | 19 | ]) ?> |
| 20 | 20 | |
| 21 | + <?= Html::a('Вернуться', ['index'], ['class' => 'btn btn-primary']) ?> | |
| 22 | + | |
| 21 | 23 | </div> | ... | ... |
backend/views/margins/index.php
| ... | ... | @@ -7,7 +7,7 @@ use yii\grid\GridView; |
| 7 | 7 | /* @var $searchModel common\models\MarginsSearch */ |
| 8 | 8 | /* @var $dataProvider yii\data\ActiveDataProvider */ |
| 9 | 9 | |
| 10 | -$this->title = 'Margins'; | |
| 10 | +$this->title = 'Типы цен'; | |
| 11 | 11 | $this->params['breadcrumbs'][] = $this->title; |
| 12 | 12 | ?> |
| 13 | 13 | <div class="margins-index"> |
| ... | ... | @@ -16,19 +16,17 @@ $this->params['breadcrumbs'][] = $this->title; |
| 16 | 16 | <?php // echo $this->render('_search', ['model' => $searchModel]); ?> |
| 17 | 17 | |
| 18 | 18 | <p> |
| 19 | - <?= Html::a('Добавить Margins', ['create'], ['class' => 'btn btn-success']) ?> | |
| 19 | + <?= Html::a('Добавить', ['create'], ['class' => 'btn btn-success']) ?> | |
| 20 | 20 | </p> |
| 21 | 21 | |
| 22 | 22 | <?= GridView::widget([ |
| 23 | 23 | 'dataProvider' => $dataProvider, |
| 24 | - 'filterModel' => $searchModel, | |
| 25 | 24 | 'columns' => [ |
| 26 | 25 | ['class' => 'yii\grid\SerialColumn'], |
| 27 | - | |
| 28 | 26 | 'name', |
| 29 | 27 | 'koef', |
| 30 | - | |
| 31 | - ['class' => 'yii\grid\ActionColumn'], | |
| 28 | + ['class' => 'yii\grid\ActionColumn', | |
| 29 | + 'template' => '{update}{delete}'], | |
| 32 | 30 | ], |
| 33 | 31 | ]); ?> |
| 34 | 32 | ... | ... |
backend/views/margins/update.php
| ... | ... | @@ -5,10 +5,10 @@ use yii\helpers\Html; |
| 5 | 5 | /* @var $this yii\web\View */ |
| 6 | 6 | /* @var $model common\models\Margins */ |
| 7 | 7 | |
| 8 | -$this->title = 'Update Margins: ' . ' ' . $model->name; | |
| 8 | +$this->title = 'Редактировать тип цен: ' . ' ' . $model->name; | |
| 9 | 9 | $this->params['breadcrumbs'][] = ['label' => 'Margins', 'url' => ['index']]; |
| 10 | 10 | $this->params['breadcrumbs'][] = ['label' => $model->name, 'url' => ['view', 'id' => $model->id]]; |
| 11 | -$this->params['breadcrumbs'][] = 'Update'; | |
| 11 | +$this->params['breadcrumbs'][] = 'Обновить'; | |
| 12 | 12 | ?> |
| 13 | 13 | <div class="margins-update"> |
| 14 | 14 | |
| ... | ... | @@ -18,4 +18,6 @@ $this->params['breadcrumbs'][] = 'Update'; |
| 18 | 18 | 'model' => $model, |
| 19 | 19 | ]) ?> |
| 20 | 20 | |
| 21 | + <?= Html::a('Вернуться', ['index'], ['class' => 'btn btn-primary']) ?> | |
| 22 | + | |
| 21 | 23 | </div> | ... | ... |
common/components/parsers/Parser.php
common/components/parsers/XlsxParser.php
| ... | ... | @@ -37,7 +37,7 @@ class XlsxParser extends TableParser |
| 37 | 37 | protected $current_sheet; |
| 38 | 38 | |
| 39 | 39 | // глубина округления для флоата |
| 40 | - // @todo - перенести вродительский класс и применить в дочерних классах | |
| 40 | + // @todo - перенести в родительский класс и применить в дочерних классах | |
| 41 | 41 | protected $float_precision = 6; |
| 42 | 42 | |
| 43 | 43 | public function setup() | ... | ... |
common/components/parsers/config.php
| ... | ... | @@ -88,6 +88,23 @@ |
| 88 | 88 | 'configuration' => ["string" => []], |
| 89 | 89 | ] |
| 90 | 90 | ], |
| 91 | + 'console' => | |
| 92 | + ['class' => 'common\components\parsers\XlsxParser', | |
| 93 | + 'path_for_extract_files' => \Yii::getAlias('@temp_upload') . '/xlsx/', | |
| 94 | + 'auto_detect_first_line' => true, | |
| 95 | + 'active_sheet' => 1, | |
| 96 | + 'converter_conf' => [ | |
| 97 | + 'class' => ' common\components\parsers\CustomConverter', | |
| 98 | + 'configuration' => ["encode" => 'DESCR', | |
| 99 | + "string" => 'DESCR', | |
| 100 | + "float" => 'PRICE', | |
| 101 | + "brand" => 'BRAND', | |
| 102 | + "integer" => ['BOX','ADD_BOX'], | |
| 103 | + "multiply" => [], | |
| 104 | + "article" => [], | |
| 105 | + "details" => [] | |
| 106 | + ] | |
| 107 | + ],], | |
| 91 | 108 | ] |
| 92 | 109 | ]; |
| 93 | 110 | ... | ... |
common/models/Brands.php
| ... | ... | @@ -49,14 +49,14 @@ class Brands extends \yii\db\ActiveRecord |
| 49 | 49 | public function attributeLabels() |
| 50 | 50 | { |
| 51 | 51 | return [ |
| 52 | - 'ID' => 'ID', | |
| 53 | - 'BRAND' => 'Brand', | |
| 54 | - 'if_tecdoc' => 'If Tecdoc', | |
| 52 | + 'ID' => 'Номер', | |
| 53 | + 'BRAND' => 'Название', | |
| 54 | + 'if_tecdoc' => 'ТЕКДОК?', | |
| 55 | 55 | 'tecdoc_logo' => 'Tecdoc Logo', |
| 56 | - 'if_oem' => 'If Oem', | |
| 56 | + 'if_oem' => 'Оргигинал', | |
| 57 | 57 | 'if_checked' => 'If Checked', |
| 58 | - 'CONTENT' => 'Content', | |
| 59 | - 'IMG' => 'Img', | |
| 58 | + 'CONTENT' => 'Описание', | |
| 59 | + 'IMG' => 'Изображение', | |
| 60 | 60 | 'timestamp' => 'Timestamp', |
| 61 | 61 | ]; |
| 62 | 62 | } | ... | ... |
common/models/BrandsSearch.php
| ... | ... | @@ -18,8 +18,8 @@ class BrandsSearch extends Brands |
| 18 | 18 | public function rules() |
| 19 | 19 | { |
| 20 | 20 | return [ |
| 21 | - [['ID', 'if_tecdoc', 'if_oem', 'if_checked'], 'integer'], | |
| 22 | - [['BRAND', 'tecdoc_logo', 'CONTENT', 'IMG', 'timestamp'], 'safe'], | |
| 21 | + [['ID'], 'integer'], | |
| 22 | + [['BRAND'], 'safe'], | |
| 23 | 23 | ]; |
| 24 | 24 | } |
| 25 | 25 | |
| ... | ... | @@ -57,16 +57,9 @@ class BrandsSearch extends Brands |
| 57 | 57 | |
| 58 | 58 | $query->andFilterWhere([ |
| 59 | 59 | 'ID' => $this->ID, |
| 60 | - 'if_tecdoc' => $this->if_tecdoc, | |
| 61 | - 'if_oem' => $this->if_oem, | |
| 62 | - 'if_checked' => $this->if_checked, | |
| 63 | - 'timestamp' => $this->timestamp, | |
| 60 | + 'BRAND' => $this->BRAND, | |
| 64 | 61 | ]); |
| 65 | 62 | |
| 66 | - $query->andFilterWhere(['like', 'BRAND', $this->BRAND]) | |
| 67 | - ->andFilterWhere(['like', 'tecdoc_logo', $this->tecdoc_logo]) | |
| 68 | - ->andFilterWhere(['like', 'CONTENT', $this->CONTENT]) | |
| 69 | - ->andFilterWhere(['like', 'IMG', $this->IMG]); | |
| 70 | 63 | |
| 71 | 64 | return $dataProvider; |
| 72 | 65 | } | ... | ... |
common/models/Currency.php
common/models/Margins.php
| ... | ... | @@ -28,7 +28,7 @@ class Margins extends \yii\db\ActiveRecord |
| 28 | 28 | { |
| 29 | 29 | return [ |
| 30 | 30 | [['name', 'koef'], 'required'], |
| 31 | - [['koef'], 'number'], | |
| 31 | + ['koef', \common\components\CommaNumberValidator::className()], | |
| 32 | 32 | [['name'], 'string', 'max' => 100], |
| 33 | 33 | [['name'], 'unique'] |
| 34 | 34 | ]; | ... | ... |
common/models/MarginsSearch.php
| ... | ... | @@ -19,8 +19,8 @@ class MarginsSearch extends Margins |
| 19 | 19 | { |
| 20 | 20 | return [ |
| 21 | 21 | [['id'], 'integer'], |
| 22 | - [['name'], 'safe'], | |
| 23 | - [['koef'], 'number'], | |
| 22 | +// [['name'], 'safe'], | |
| 23 | +// [['koef'], 'number'], | |
| 24 | 24 | ]; |
| 25 | 25 | } |
| 26 | 26 | |
| ... | ... | @@ -56,12 +56,12 @@ class MarginsSearch extends Margins |
| 56 | 56 | return $dataProvider; |
| 57 | 57 | } |
| 58 | 58 | |
| 59 | - $query->andFilterWhere([ | |
| 60 | - 'id' => $this->id, | |
| 61 | - 'koef' => $this->koef, | |
| 62 | - ]); | |
| 63 | - | |
| 64 | - $query->andFilterWhere(['like', 'name', $this->name]); | |
| 59 | +// $query->andFilterWhere([ | |
| 60 | +// 'id' => $this->id, | |
| 61 | +// 'koef' => $this->koef, | |
| 62 | +// ]); | |
| 63 | +// | |
| 64 | +// $query->andFilterWhere(['like', 'name', $this->name]); | |
| 65 | 65 | |
| 66 | 66 | return $dataProvider; |
| 67 | 67 | } | ... | ... |
composer.json
| ... | ... | @@ -24,7 +24,7 @@ |
| 24 | 24 | "kartik-v/yii2-datecontrol": "dev-master", |
| 25 | 25 | "codeception/codeception": "*", |
| 26 | 26 | "2amigos/yii2-ckeditor-widget": "~1.0", |
| 27 | - "mihaildev/yii2-ckeditor": "*", | |
| 27 | + "mihaildev/yii2-ckeditor": "^1.0", | |
| 28 | 28 | "kartik-v/yii2-widget-fileinput": "@dev", |
| 29 | 29 | "phpmailer/phpmailer": "^5.2", |
| 30 | 30 | "mihaildev/yii2-elfinder": "*" | ... | ... |
composer.lock
| ... | ... | @@ -4,8 +4,8 @@ |
| 4 | 4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", |
| 5 | 5 | "This file is @generated automatically" |
| 6 | 6 | ], |
| 7 | - "hash": "f6d5550f22108e48d542a099d5e9a3ea", | |
| 8 | - "content-hash": "bc7f313c8871095badc7533a53ff3d53", | |
| 7 | + "hash": "9ddc6cc1d58d87c992e53caaffe27119", | |
| 8 | + "content-hash": "cfa3f3c9f04cb6b28af05c11197eb35b", | |
| 9 | 9 | "packages": [ |
| 10 | 10 | { |
| 11 | 11 | "name": "2amigos/yii2-ckeditor-widget", | ... | ... |
console/controllers/ParserController.php
| ... | ... | @@ -6,6 +6,7 @@ use common\components\archives\ArchiveCreator; |
| 6 | 6 | use common\components\CustomVarDamp; |
| 7 | 7 | use common\components\mail\ImapMailReader; |
| 8 | 8 | use common\components\mail\MailAttachmentsSaver; |
| 9 | +use common\components\parsers\Parser; | |
| 9 | 10 | use yii\console\Controller; |
| 10 | 11 | use yii\helpers\Console; |
| 11 | 12 | use common\components\PriceWriter; |
| ... | ... | @@ -27,8 +28,11 @@ class ParserController extends Controller |
| 27 | 28 | ['mode' => 2, 'path' => \Yii::getAlias('@mail_upload')], |
| 28 | 29 | ]; |
| 29 | 30 | |
| 30 | - $this->parseCsvFiles($path_arr); | |
| 31 | - $this->parseXmlFiles($path_arr); | |
| 31 | + $arr_supported_extension = Parser::supportedExtension(); | |
| 32 | + foreach ($arr_supported_extension as $ext) { | |
| 33 | + | |
| 34 | + $this->parseFilesByExtension( $ext , $path_arr ); | |
| 35 | + } | |
| 32 | 36 | |
| 33 | 37 | } |
| 34 | 38 | |
| ... | ... | @@ -73,36 +77,18 @@ class ParserController extends Controller |
| 73 | 77 | |
| 74 | 78 | } |
| 75 | 79 | |
| 76 | - protected function parseCsvFiles($path_arr) | |
| 80 | + protected function parseFilesByExtension( $ext, $path_arr ) | |
| 77 | 81 | { |
| 78 | - \Yii::info('Начало загрузки файлов прайсов csv', 'parser'); | |
| 82 | + \Yii::info("Начало загрузки файлов прайсов {$ext}", 'parser'); | |
| 79 | 83 | foreach ($path_arr as $path_config) { |
| 80 | - foreach (glob($path_config['path'] . '/*.csv') as $file_path) { | |
| 81 | - $file_name = basename($file_path, ".csv"); | |
| 82 | - \Yii::info("Обработка файла - $file_path", 'parser'); | |
| 83 | - $importer_id = ImportersFiles::findOne(['id' => $file_name])->importer_id; | |
| 84 | - $current_importer = Importers::findOne(['id' => $importer_id]); | |
| 85 | - $keys = $current_importer->keys; | |
| 86 | - $mult_array = $current_importer->multiply; | |
| 87 | - | |
| 88 | - // получим настройки ценообразования и передадим их отдельно в конвертер | |
| 89 | - $sign = ''; | |
| 90 | - $multiplier = ''; | |
| 91 | - extract($mult_array); | |
| 92 | - | |
| 93 | - $config = [ | |
| 94 | - 'record_id' => $file_name, | |
| 95 | - 'importer_id' => $importer_id, | |
| 96 | - 'mode' => $path_config['mode'], | |
| 97 | - 'parser_config' => ['keys' => $keys, | |
| 98 | - 'converter_conf' => | |
| 99 | - ['sign' => $sign, | |
| 100 | - 'multiplier' => $multiplier], | |
| 101 | - 'mode' => 'console'] | |
| 102 | - ]; | |
| 84 | + foreach ( glob( $path_config['path'] . "/*.{$ext}" ) as $file_path ) { | |
| 85 | + $file_name = basename( $file_path, ".{$ext}" ); | |
| 86 | + \Yii::info( "Обработка файла - $file_path", 'parser' ); | |
| 87 | + | |
| 88 | + $config = $this->getParsingConfiguration( $file_name, $path_config['mode'], $ext ); | |
| 103 | 89 | |
| 104 | 90 | if ($this->parseFile($file_path, $config)) { |
| 105 | - $temp_file = \Yii::getAlias('@temp_upload') . '/' . $file_name . '.csv'; | |
| 91 | + $temp_file = \Yii::getAlias('@temp_upload') . '/' . $file_name . ".{$ext}"; | |
| 106 | 92 | if( file_exists( $temp_file ) ) |
| 107 | 93 | unlink($temp_file); |
| 108 | 94 | |
| ... | ... | @@ -111,55 +97,13 @@ class ParserController extends Controller |
| 111 | 97 | \Yii::error("Загрузка файла - $file_path завершена с ошибкой", 'parser'); |
| 112 | 98 | } |
| 113 | 99 | //при любом завершении скрипта файл с очереди автозагрузки нужно удалить |
| 114 | - $auto_file = $path_config['path'] . '/' . $file_name . '.csv'; | |
| 100 | + $auto_file = $path_config['path'] . '/' . $file_name . ".{$ext}"; | |
| 115 | 101 | if( file_exists( $auto_file ) ) |
| 116 | 102 | unlink($auto_file); |
| 117 | 103 | } |
| 118 | 104 | } |
| 119 | 105 | } |
| 120 | 106 | |
| 121 | - protected function parseXmlFiles($path_arr) | |
| 122 | - { | |
| 123 | - \Yii::info('Начало загрузки файлов прайсов xml', 'parser'); | |
| 124 | - foreach ($path_arr as $path_config) { | |
| 125 | - foreach (glob($path_config['path'] . '/*.xml') as $file_path) { | |
| 126 | - $file_name = basename($file_path, ".xml"); | |
| 127 | - \Yii::info("Обработка файла - $file_path", 'parser'); | |
| 128 | - | |
| 129 | - $files_model = new ImportersFiles(); | |
| 130 | - // id поставщика всегда = 1 - Склад | |
| 131 | - $files_model->importer_id = 1; | |
| 132 | - try { | |
| 133 | - $files_model->save(); | |
| 134 | - } catch (ErrorException $e) { | |
| 135 | - throw $e; | |
| 136 | - } | |
| 137 | - // получим id только что записанной записи | |
| 138 | - $record_id = $files_model->find() | |
| 139 | - ->where(['importer_id' => $files_model->importer_id]) | |
| 140 | - ->orderBy(['id' => SORT_DESC]) | |
| 141 | - ->one() | |
| 142 | - ->id; | |
| 143 | - | |
| 144 | - $config = ['record_id' => $record_id, | |
| 145 | - 'importer_id' => 1, | |
| 146 | - 'mode' => $path_config['mode'], | |
| 147 | - 'parser_config' => [ | |
| 148 | - 'mode' => 'console'] | |
| 149 | - ]; | |
| 150 | - | |
| 151 | - if ($this->parseFile($file_path, $config)) { | |
| 152 | - \Yii::info("Загрузка файла - $file_path успешно завершена", 'parser'); | |
| 153 | - } else { | |
| 154 | - \Yii::error("Загрузка файла - $file_path завершена с ошибкой", 'parser'); | |
| 155 | - } | |
| 156 | - | |
| 157 | - $auto_file = $path_config['path'] . '/' . $file_name . '.xml'; | |
| 158 | - if( file_exists( $auto_file ) ) | |
| 159 | - unlink($auto_file); | |
| 160 | - } | |
| 161 | - } | |
| 162 | - } | |
| 163 | 107 | |
| 164 | 108 | protected function parseFile($file_path, $configuration) |
| 165 | 109 | { |
| ... | ... | @@ -193,9 +137,9 @@ class ParserController extends Controller |
| 193 | 137 | $writer->setData($data); |
| 194 | 138 | |
| 195 | 139 | $writer->writePriceToDB(); |
| 196 | - $error = $writer->hasValidationError(); | |
| 140 | + $has_error = $writer->hasValidationError(); | |
| 197 | 141 | $log_msg = strip_tags( $writer->getValidatedMsg() ); |
| 198 | - if ( $error ) { | |
| 142 | + if ( $has_error ) { | |
| 199 | 143 | \Yii::error($log_msg, 'parser'); |
| 200 | 144 | } else { |
| 201 | 145 | \Yii::info($log_msg, 'parser'); |
| ... | ... | @@ -205,16 +149,12 @@ class ParserController extends Controller |
| 205 | 149 | } |
| 206 | 150 | } |
| 207 | 151 | } |
| 208 | - | |
| 209 | - $log_model->error = (int) $error; | |
| 152 | + $log_model->error = (int) $has_error; | |
| 210 | 153 | $log_model->log_msg = $log_msg; |
| 211 | 154 | // запишем данные в лог |
| 212 | 155 | $log_model->save(); |
| 213 | 156 | |
| 214 | - | |
| 215 | - | |
| 216 | 157 | return true; |
| 217 | - | |
| 218 | 158 | } |
| 219 | 159 | |
| 220 | 160 | private function getMailAttachments($mail_reader, $importer_id_prefix = '') |
| ... | ... | @@ -313,4 +253,53 @@ class ParserController extends Controller |
| 313 | 253 | } |
| 314 | 254 | } |
| 315 | 255 | } |
| 256 | + | |
| 257 | + protected function getParsingConfiguration( $file_name, $mode, $ext ){ | |
| 258 | + | |
| 259 | + if ($ext === 'xml') { | |
| 260 | + $files_model = new ImportersFiles(); | |
| 261 | + // id поставщика всегда = 1 - Склад | |
| 262 | + $files_model->importer_id = 1; | |
| 263 | + try { | |
| 264 | + $files_model->save(); | |
| 265 | + } catch (ErrorException $e) { | |
| 266 | + throw $e; | |
| 267 | + } | |
| 268 | + // получим id только что записанной записи | |
| 269 | + $record_id = $files_model->find() | |
| 270 | + ->where(['importer_id' => $files_model->importer_id]) | |
| 271 | + ->orderBy(['id' => SORT_DESC]) | |
| 272 | + ->one() | |
| 273 | + ->id; | |
| 274 | + | |
| 275 | + $config = ['record_id' => $record_id, | |
| 276 | + 'importer_id' => 1, | |
| 277 | + 'mode' => $mode, | |
| 278 | + 'parser_config' => [ | |
| 279 | + 'mode' => 'console'] | |
| 280 | + ]; | |
| 281 | + } else { | |
| 282 | + $importer_id = ImportersFiles::findOne(['id' => $file_name])->importer_id; | |
| 283 | + $current_importer = Importers::findOne(['id' => $importer_id]); | |
| 284 | + $keys = $current_importer->keys; | |
| 285 | + $mult_array = $current_importer->multiply; | |
| 286 | + | |
| 287 | + // получим настройки ценообразования и передадим их отдельно в конвертер | |
| 288 | + $sign = ''; | |
| 289 | + $multiplier = ''; | |
| 290 | + extract($mult_array); | |
| 291 | + | |
| 292 | + $config = [ | |
| 293 | + 'record_id' => $file_name, | |
| 294 | + 'importer_id' => $importer_id, | |
| 295 | + 'mode' => $mode, | |
| 296 | + 'parser_config' => ['keys' => $keys, | |
| 297 | + 'converter_conf' => | |
| 298 | + ['sign' => $sign, | |
| 299 | + 'multiplier' => $multiplier], | |
| 300 | + 'mode' => 'console'] | |
| 301 | + ]; | |
| 302 | + } | |
| 303 | + return $config; | |
| 304 | +} | |
| 316 | 305 | } |
| 317 | 306 | \ No newline at end of file | ... | ... |
| 1 | +/temp | ... | ... |