Commit 4b12e92e9e693eaf502cdd4a07a330e24c270290

Authored by Mihail
1 parent 5c9840b3

work with margins and brands pages

.gitignore
... ... @@ -3,4 +3,4 @@
3 3 /vendor
4 4 /storage
5 5 tests/_output/*
6   -composer.lock
7 6 \ No newline at end of file
  7 +composer.lock
... ...
.htaccess
... ... @@ -12,7 +12,7 @@ AddDefaultCharset utf-8
12 12  
13 13 RewriteBase /
14 14 # deal with admin first
15   - RewriteRule ^storage/(.*)?$ /storage/$1 [L,PT]
  15 + RewriteRule ^storage/(.*)?$ /storage/$1 [L,PT]
16 16  
17 17 RewriteCond %{REQUEST_URI} ^/(admin)
18 18  
... ...
backend/.gitignore
1 1 /temp
  2 +/tmp
2 3 /uploads
3 4 /runtime
4 5 \ No newline at end of file
... ...
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-&gt;params[&#39;breadcrumbs&#39;][] = $this-&gt;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-&gt;params[&#39;breadcrumbs&#39;][] = $this-&gt;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-&gt;params[&#39;breadcrumbs&#39;][] = $this-&gt;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-&gt;params[&#39;breadcrumbs&#39;][] = &#39;Update&#39;;
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
... ... @@ -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 100 protected function cleanUp( )
96 101 {
97 102  
... ...
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
... ... @@ -56,7 +56,7 @@ class Currency extends \yii\db\ActiveRecord
56 56  
57 57 public function beforeSave($insert)
58 58 {
59   - if (parent::beforeSave($insert)) {
  59 + if ( parent::beforeSave($insert) ) {
60 60 $this->timestamp = date("Y-m-d H:i:s");
61 61 return true;
62 62 } else {
... ...
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
... ...
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 2 \ No newline at end of file
... ...