Compare View

switch
from
...
to
 
Commits (2)
@@ -3,4 +3,4 @@ @@ -3,4 +3,4 @@
3 /vendor 3 /vendor
4 /storage 4 /storage
5 tests/_output/* 5 tests/_output/*
6 -composer.lock  
7 \ No newline at end of file 6 \ No newline at end of file
  7 +composer.lock
@@ -12,7 +12,7 @@ AddDefaultCharset utf-8 @@ -12,7 +12,7 @@ AddDefaultCharset utf-8
12 12
13 RewriteBase / 13 RewriteBase /
14 # deal with admin first 14 # deal with admin first
15 - RewriteRule ^storage/(.*)?$ /storage/$1 [L,PT] 15 + RewriteRule ^storage/(.*)?$ /storage/$1 [L,PT]
16 16
17 RewriteCond %{REQUEST_URI} ^/(admin) 17 RewriteCond %{REQUEST_URI} ^/(admin)
18 18
backend/.gitignore
1 /temp 1 /temp
  2 +/tmp
2 /uploads 3 /uploads
3 /runtime 4 /runtime
4 \ No newline at end of file 5 \ No newline at end of file
backend/controllers/ParserController.php
@@ -7,6 +7,7 @@ use common\components\exceptions\PriceParsingException; @@ -7,6 +7,7 @@ use common\components\exceptions\PriceParsingException;
7 use common\components\exceptions\RgParsingException; 7 use common\components\exceptions\RgParsingException;
8 use common\components\ModelArrayValidator; 8 use common\components\ModelArrayValidator;
9 use common\components\parsers\MailParser; 9 use common\components\parsers\MailParser;
  10 +use common\components\parsers\Parser;
10 use Yii; 11 use Yii;
11 use yii\data\ActiveDataProvider; 12 use yii\data\ActiveDataProvider;
12 use yii\filters\AccessControl; 13 use yii\filters\AccessControl;
@@ -186,11 +187,14 @@ class ParserController extends BaseController @@ -186,11 +187,14 @@ class ParserController extends BaseController
186 public function actionServerFiles () 187 public function actionServerFiles ()
187 { 188 {
188 $arr_id_files = []; 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 $query = ImportersFiles::find()->where(['in', 'id', $arr_id_files])->orderBy( ['upload_time' => SORT_DESC] ); 200 $query = ImportersFiles::find()->where(['in', 'id', $arr_id_files])->orderBy( ['upload_time' => SORT_DESC] );
@@ -215,7 +219,13 @@ class ParserController extends BaseController @@ -215,7 +219,13 @@ class ParserController extends BaseController
215 $id = Yii::$app->request->post()['id']; 219 $id = Yii::$app->request->post()['id'];
216 try { 220 try {
217 $files_model->delete($id); 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 echo 1; 230 echo 1;
221 } catch (ErrorException $e) { 231 } catch (ErrorException $e) {
@@ -230,22 +240,24 @@ class ParserController extends BaseController @@ -230,22 +240,24 @@ class ParserController extends BaseController
230 240
231 public function actionLaunchCroneUploads () 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 $controller = new \console\controllers\ParserController( 'parse-prices', $this->module ); 253 $controller = new \console\controllers\ParserController( 'parse-prices', $this->module );
241 - $controller->actionSaveMailAttachments(); 254 + //$controller->actionSaveMailAttachments();
242 $controller->actionParsePrices(); 255 $controller->actionParsePrices();
243 256
244 Yii::$app->session->setFlash( 'server-files', 'Файл успешно загружен' ); 257 Yii::$app->session->setFlash( 'server-files', 'Файл успешно загружен' );
245 $this->redirect('server-files'); 258 $this->redirect('server-files');
246 } 259 }
247 260
248 -  
249 /** 261 /**
250 * сохраняет файл на диск и регистрирует в ImportersFiles 262 * сохраняет файл на диск и регистрирует в ImportersFiles
251 * @param $model - модель с настройками 263 * @param $model - модель с настройками
backend/views/brands/_form.php
@@ -10,26 +10,20 @@ use yii\widgets\ActiveForm; @@ -10,26 +10,20 @@ use yii\widgets\ActiveForm;
10 10
11 <div class="brands-form"> 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 <?= $form->field($model, 'CONTENT')->textarea(['rows' => 6]) ?> 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 <div class="form-group"> 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 </div> 27 </div>
34 28
35 <?php ActiveForm::end(); ?> 29 <?php ActiveForm::end(); ?>
backend/views/brands/index.php
@@ -9,6 +9,8 @@ use yii\grid\GridView; @@ -9,6 +9,8 @@ use yii\grid\GridView;
9 9
10 $this->title = 'Бренды'; 10 $this->title = 'Бренды';
11 $this->params['breadcrumbs'][] = $this->title; 11 $this->params['breadcrumbs'][] = $this->title;
  12 +$img0 = '/storage/checkbox0.gif';
  13 +$img1 = '/storage/checkbox1.gif';
12 ?> 14 ?>
13 <div class="brands-index"> 15 <div class="brands-index">
14 16
@@ -27,15 +29,34 @@ $this-&gt;params[&#39;breadcrumbs&#39;][] = $this-&gt;title; @@ -27,15 +29,34 @@ $this-&gt;params[&#39;breadcrumbs&#39;][] = $this-&gt;title;
27 29
28 'ID', 30 'ID',
29 'BRAND', 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,7 +5,7 @@ use yii\helpers\Html;
5 /* @var $this yii\web\View */ 5 /* @var $this yii\web\View */
6 /* @var $model common\models\Brands */ 6 /* @var $model common\models\Brands */
7 7
8 -$this->title = 'Update Brands: ' . ' ' . $model->BRAND; 8 +$this->title = 'Редактирование бренда: ' . ' ' . $model->BRAND;
9 $this->params['breadcrumbs'][] = ['label' => 'Brands', 'url' => ['index']]; 9 $this->params['breadcrumbs'][] = ['label' => 'Brands', 'url' => ['index']];
10 $this->params['breadcrumbs'][] = ['label' => $model->BRAND, 'url' => ['view', 'id' => $model->BRAND]]; 10 $this->params['breadcrumbs'][] = ['label' => $model->BRAND, 'url' => ['view', 'id' => $model->BRAND]];
11 $this->params['breadcrumbs'][] = 'Update'; 11 $this->params['breadcrumbs'][] = 'Update';
backend/views/margins/create.php
@@ -6,7 +6,7 @@ use yii\helpers\Html; @@ -6,7 +6,7 @@ use yii\helpers\Html;
6 /* @var $this yii\web\View */ 6 /* @var $this yii\web\View */
7 /* @var $model common\models\Margins */ 7 /* @var $model common\models\Margins */
8 8
9 -$this->title = 'Добавить Margins'; 9 +$this->title = 'Добавить тип цен';
10 $this->params['breadcrumbs'][] = ['label' => 'Margins', 'url' => ['index']]; 10 $this->params['breadcrumbs'][] = ['label' => 'Margins', 'url' => ['index']];
11 $this->params['breadcrumbs'][] = $this->title; 11 $this->params['breadcrumbs'][] = $this->title;
12 ?> 12 ?>
@@ -18,4 +18,6 @@ $this-&gt;params[&#39;breadcrumbs&#39;][] = $this-&gt;title; @@ -18,4 +18,6 @@ $this-&gt;params[&#39;breadcrumbs&#39;][] = $this-&gt;title;
18 'model' => $model, 18 'model' => $model,
19 ]) ?> 19 ]) ?>
20 20
  21 + <?= Html::a('Вернуться', ['index'], ['class' => 'btn btn-primary']) ?>
  22 +
21 </div> 23 </div>
backend/views/margins/index.php
@@ -7,7 +7,7 @@ use yii\grid\GridView; @@ -7,7 +7,7 @@ use yii\grid\GridView;
7 /* @var $searchModel common\models\MarginsSearch */ 7 /* @var $searchModel common\models\MarginsSearch */
8 /* @var $dataProvider yii\data\ActiveDataProvider */ 8 /* @var $dataProvider yii\data\ActiveDataProvider */
9 9
10 -$this->title = 'Margins'; 10 +$this->title = 'Типы цен';
11 $this->params['breadcrumbs'][] = $this->title; 11 $this->params['breadcrumbs'][] = $this->title;
12 ?> 12 ?>
13 <div class="margins-index"> 13 <div class="margins-index">
@@ -16,19 +16,17 @@ $this-&gt;params[&#39;breadcrumbs&#39;][] = $this-&gt;title; @@ -16,19 +16,17 @@ $this-&gt;params[&#39;breadcrumbs&#39;][] = $this-&gt;title;
16 <?php // echo $this->render('_search', ['model' => $searchModel]); ?> 16 <?php // echo $this->render('_search', ['model' => $searchModel]); ?>
17 17
18 <p> 18 <p>
19 - <?= Html::a('Добавить Margins', ['create'], ['class' => 'btn btn-success']) ?> 19 + <?= Html::a('Добавить', ['create'], ['class' => 'btn btn-success']) ?>
20 </p> 20 </p>
21 21
22 <?= GridView::widget([ 22 <?= GridView::widget([
23 'dataProvider' => $dataProvider, 23 'dataProvider' => $dataProvider,
24 - 'filterModel' => $searchModel,  
25 'columns' => [ 24 'columns' => [
26 ['class' => 'yii\grid\SerialColumn'], 25 ['class' => 'yii\grid\SerialColumn'],
27 -  
28 'name', 26 'name',
29 'koef', 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,10 +5,10 @@ use yii\helpers\Html;
5 /* @var $this yii\web\View */ 5 /* @var $this yii\web\View */
6 /* @var $model common\models\Margins */ 6 /* @var $model common\models\Margins */
7 7
8 -$this->title = 'Update Margins: ' . ' ' . $model->name; 8 +$this->title = 'Редактировать тип цен: ' . ' ' . $model->name;
9 $this->params['breadcrumbs'][] = ['label' => 'Margins', 'url' => ['index']]; 9 $this->params['breadcrumbs'][] = ['label' => 'Margins', 'url' => ['index']];
10 $this->params['breadcrumbs'][] = ['label' => $model->name, 'url' => ['view', 'id' => $model->id]]; 10 $this->params['breadcrumbs'][] = ['label' => $model->name, 'url' => ['view', 'id' => $model->id]];
11 -$this->params['breadcrumbs'][] = 'Update'; 11 +$this->params['breadcrumbs'][] = 'Обновить';
12 ?> 12 ?>
13 <div class="margins-update"> 13 <div class="margins-update">
14 14
@@ -18,4 +18,6 @@ $this-&gt;params[&#39;breadcrumbs&#39;][] = &#39;Update&#39;; @@ -18,4 +18,6 @@ $this-&gt;params[&#39;breadcrumbs&#39;][] = &#39;Update&#39;;
18 'model' => $model, 18 'model' => $model,
19 ]) ?> 19 ]) ?>
20 20
  21 + <?= Html::a('Вернуться', ['index'], ['class' => 'btn btn-primary']) ?>
  22 +
21 </div> 23 </div>
common/components/parsers/Parser.php
@@ -92,6 +92,11 @@ abstract class Parser @@ -92,6 +92,11 @@ abstract class Parser
92 92
93 } 93 }
94 94
  95 + public final static function supportedExtension()
  96 + {
  97 + return ['csv','xml','xlsx'];
  98 + }
  99 +
95 protected function cleanUp( ) 100 protected function cleanUp( )
96 { 101 {
97 102
common/components/parsers/XlsxParser.php
@@ -37,7 +37,7 @@ class XlsxParser extends TableParser @@ -37,7 +37,7 @@ class XlsxParser extends TableParser
37 protected $current_sheet; 37 protected $current_sheet;
38 38
39 // глубина округления для флоата 39 // глубина округления для флоата
40 - // @todo - перенести вродительский класс и применить в дочерних классах 40 + // @todo - перенести в родительский класс и применить в дочерних классах
41 protected $float_precision = 6; 41 protected $float_precision = 6;
42 42
43 public function setup() 43 public function setup()
common/components/parsers/config.php
@@ -88,6 +88,23 @@ @@ -88,6 +88,23 @@
88 'configuration' => ["string" => []], 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,14 +49,14 @@ class Brands extends \yii\db\ActiveRecord
49 public function attributeLabels() 49 public function attributeLabels()
50 { 50 {
51 return [ 51 return [
52 - 'ID' => 'ID',  
53 - 'BRAND' => 'Brand',  
54 - 'if_tecdoc' => 'If Tecdoc', 52 + 'ID' => 'Номер',
  53 + 'BRAND' => 'Название',
  54 + 'if_tecdoc' => 'ТЕКДОК?',
55 'tecdoc_logo' => 'Tecdoc Logo', 55 'tecdoc_logo' => 'Tecdoc Logo',
56 - 'if_oem' => 'If Oem', 56 + 'if_oem' => 'Оргигинал',
57 'if_checked' => 'If Checked', 57 'if_checked' => 'If Checked',
58 - 'CONTENT' => 'Content',  
59 - 'IMG' => 'Img', 58 + 'CONTENT' => 'Описание',
  59 + 'IMG' => 'Изображение',
60 'timestamp' => 'Timestamp', 60 'timestamp' => 'Timestamp',
61 ]; 61 ];
62 } 62 }
common/models/BrandsSearch.php
@@ -18,8 +18,8 @@ class BrandsSearch extends Brands @@ -18,8 +18,8 @@ class BrandsSearch extends Brands
18 public function rules() 18 public function rules()
19 { 19 {
20 return [ 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,16 +57,9 @@ class BrandsSearch extends Brands
57 57
58 $query->andFilterWhere([ 58 $query->andFilterWhere([
59 'ID' => $this->ID, 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 return $dataProvider; 64 return $dataProvider;
72 } 65 }
common/models/Currency.php
@@ -56,7 +56,7 @@ class Currency extends \yii\db\ActiveRecord @@ -56,7 +56,7 @@ class Currency extends \yii\db\ActiveRecord
56 56
57 public function beforeSave($insert) 57 public function beforeSave($insert)
58 { 58 {
59 - if (parent::beforeSave($insert)) { 59 + if ( parent::beforeSave($insert) ) {
60 $this->timestamp = date("Y-m-d H:i:s"); 60 $this->timestamp = date("Y-m-d H:i:s");
61 return true; 61 return true;
62 } else { 62 } else {
common/models/Margins.php
@@ -28,7 +28,7 @@ class Margins extends \yii\db\ActiveRecord @@ -28,7 +28,7 @@ class Margins extends \yii\db\ActiveRecord
28 { 28 {
29 return [ 29 return [
30 [['name', 'koef'], 'required'], 30 [['name', 'koef'], 'required'],
31 - [['koef'], 'number'], 31 + ['koef', \common\components\CommaNumberValidator::className()],
32 [['name'], 'string', 'max' => 100], 32 [['name'], 'string', 'max' => 100],
33 [['name'], 'unique'] 33 [['name'], 'unique']
34 ]; 34 ];
common/models/MarginsSearch.php
@@ -19,8 +19,8 @@ class MarginsSearch extends Margins @@ -19,8 +19,8 @@ class MarginsSearch extends Margins
19 { 19 {
20 return [ 20 return [
21 [['id'], 'integer'], 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,12 +56,12 @@ class MarginsSearch extends Margins
56 return $dataProvider; 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 return $dataProvider; 66 return $dataProvider;
67 } 67 }
@@ -24,7 +24,7 @@ @@ -24,7 +24,7 @@
24 "kartik-v/yii2-datecontrol": "dev-master", 24 "kartik-v/yii2-datecontrol": "dev-master",
25 "codeception/codeception": "*", 25 "codeception/codeception": "*",
26 "2amigos/yii2-ckeditor-widget": "~1.0", 26 "2amigos/yii2-ckeditor-widget": "~1.0",
27 - "mihaildev/yii2-ckeditor": "*", 27 + "mihaildev/yii2-ckeditor": "^1.0",
28 "kartik-v/yii2-widget-fileinput": "@dev", 28 "kartik-v/yii2-widget-fileinput": "@dev",
29 "phpmailer/phpmailer": "^5.2", 29 "phpmailer/phpmailer": "^5.2",
30 "mihaildev/yii2-elfinder": "*" 30 "mihaildev/yii2-elfinder": "*"
@@ -4,8 +4,8 @@ @@ -4,8 +4,8 @@
4 "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", 4 "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
5 "This file is @generated automatically" 5 "This file is @generated automatically"
6 ], 6 ],
7 - "hash": "f6d5550f22108e48d542a099d5e9a3ea",  
8 - "content-hash": "bc7f313c8871095badc7533a53ff3d53", 7 + "hash": "9ddc6cc1d58d87c992e53caaffe27119",
  8 + "content-hash": "cfa3f3c9f04cb6b28af05c11197eb35b",
9 "packages": [ 9 "packages": [
10 { 10 {
11 "name": "2amigos/yii2-ckeditor-widget", 11 "name": "2amigos/yii2-ckeditor-widget",
console/controllers/ParserController.php
@@ -6,6 +6,7 @@ use common\components\archives\ArchiveCreator; @@ -6,6 +6,7 @@ use common\components\archives\ArchiveCreator;
6 use common\components\CustomVarDamp; 6 use common\components\CustomVarDamp;
7 use common\components\mail\ImapMailReader; 7 use common\components\mail\ImapMailReader;
8 use common\components\mail\MailAttachmentsSaver; 8 use common\components\mail\MailAttachmentsSaver;
  9 +use common\components\parsers\Parser;
9 use yii\console\Controller; 10 use yii\console\Controller;
10 use yii\helpers\Console; 11 use yii\helpers\Console;
11 use common\components\PriceWriter; 12 use common\components\PriceWriter;
@@ -27,8 +28,11 @@ class ParserController extends Controller @@ -27,8 +28,11 @@ class ParserController extends Controller
27 ['mode' => 2, 'path' => \Yii::getAlias('@mail_upload')], 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,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 foreach ($path_arr as $path_config) { 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 if ($this->parseFile($file_path, $config)) { 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 if( file_exists( $temp_file ) ) 92 if( file_exists( $temp_file ) )
107 unlink($temp_file); 93 unlink($temp_file);
108 94
@@ -111,55 +97,13 @@ class ParserController extends Controller @@ -111,55 +97,13 @@ class ParserController extends Controller
111 \Yii::error("Загрузка файла - $file_path завершена с ошибкой", 'parser'); 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 if( file_exists( $auto_file ) ) 101 if( file_exists( $auto_file ) )
116 unlink($auto_file); 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 protected function parseFile($file_path, $configuration) 108 protected function parseFile($file_path, $configuration)
165 { 109 {
@@ -193,9 +137,9 @@ class ParserController extends Controller @@ -193,9 +137,9 @@ class ParserController extends Controller
193 $writer->setData($data); 137 $writer->setData($data);
194 138
195 $writer->writePriceToDB(); 139 $writer->writePriceToDB();
196 - $error = $writer->hasValidationError(); 140 + $has_error = $writer->hasValidationError();
197 $log_msg = strip_tags( $writer->getValidatedMsg() ); 141 $log_msg = strip_tags( $writer->getValidatedMsg() );
198 - if ( $error ) { 142 + if ( $has_error ) {
199 \Yii::error($log_msg, 'parser'); 143 \Yii::error($log_msg, 'parser');
200 } else { 144 } else {
201 \Yii::info($log_msg, 'parser'); 145 \Yii::info($log_msg, 'parser');
@@ -205,16 +149,12 @@ class ParserController extends Controller @@ -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 $log_model->log_msg = $log_msg; 153 $log_model->log_msg = $log_msg;
211 // запишем данные в лог 154 // запишем данные в лог
212 $log_model->save(); 155 $log_model->save();
213 156
214 -  
215 -  
216 return true; 157 return true;
217 -  
218 } 158 }
219 159
220 private function getMailAttachments($mail_reader, $importer_id_prefix = '') 160 private function getMailAttachments($mail_reader, $importer_id_prefix = '')
@@ -313,4 +253,53 @@ class ParserController extends Controller @@ -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 \ No newline at end of file 306 \ No newline at end of file
frontend/.gitignore 0 → 100644
  1 +/temp
frontend/tmp/sess_dg8vgf1i7kpjvc9npptd9pnc83 0 → 100644
  1 +__flash|a:0:{}__captcha/site/captcha|s:7:"uiyvkur";__captcha/site/captchacount|i:1;
0 \ No newline at end of file 2 \ No newline at end of file