Commit 9dd0fbe477898ae66284e8be90a347c779477878

Authored by Mihail
1 parent 8894c93a

add writing data to all praces tables(acsept crosses)

backend/components/base/CustomDbConnection.php 0 → 100644
  1 +<?php
  2 +/**
  3 + * Created by PhpStorm.
  4 + * User: Cibermag
  5 + * Date: 21.09.2015
  6 + * Time: 17:36
  7 + */
  8 +
  9 +namespace backend\components\base;
  10 +
  11 +use yii\db\Connection;
  12 +
  13 +class CustomDbConnection extends Connection {
  14 + //@todo - переписать с использованием событий - почемуто не сработало это событие
  15 + public function afterOpen()
  16 + {
  17 + $now = new \DateTime();
  18 + $mins = $now->getOffset() / 60;
  19 + $sgn = ($mins < 0 ? -1 : 1);
  20 + $mins = abs($mins);
  21 + $hrs = floor($mins / 60);
  22 + $mins -= $hrs * 60;
  23 + $offset = sprintf('%+d:%02d', $hrs*$sgn, $mins);
  24 +
  25 + $this->pdo->exec("SET time_zone='$offset';");
  26 +
  27 + }
  28 +
  29 + protected function initConnection()
  30 + {
  31 + parent::initConnection();
  32 + $this->afterOpen();
  33 +
  34 + }
  35 +
  36 +
  37 +}
0 \ No newline at end of file 38 \ No newline at end of file
backend/components/parsers/CustomConverter.php
@@ -44,14 +44,15 @@ class CustomConverter extends Converter { @@ -44,14 +44,15 @@ class CustomConverter extends Converter {
44 return $result; 44 return $result;
45 } 45 }
46 46
47 - public function addColumn ($value_arr, $add_key, $add_value) 47 + public function addColumns ($value_arr, $add_array)
48 { 48 {
49 $i = 0; 49 $i = 0;
50 while ($i < count($value_arr)) { 50 while ($i < count($value_arr)) {
51 - $value_arr[$i][$add_key] = $add_value; 51 + foreach ($add_array as $add_key => $add_value) {
  52 + $value_arr[$i][$add_key] = $add_value;
  53 + }
52 $i++; 54 $i++;
53 } 55 }
54 -  
55 return $value_arr; 56 return $value_arr;
56 } 57 }
57 } 58 }
58 \ No newline at end of file 59 \ No newline at end of file
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 = 20; 14 + public $last_line = 30;
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()
backend/controllers/ParserController.php
@@ -12,6 +12,7 @@ use yii\multiparser\DynamicFormHelper; @@ -12,6 +12,7 @@ use yii\multiparser\DynamicFormHelper;
12 use backend\components\parsers\CustomParserConfigurator; 12 use backend\components\parsers\CustomParserConfigurator;
13 use backend\models\Details; 13 use backend\models\Details;
14 use backend\models\ImporterFiles; 14 use backend\models\ImporterFiles;
  15 +use backend\models\Importer;
15 use yii\base\ErrorException; 16 use yii\base\ErrorException;
16 17
17 use common\components\CustomVarDamp; 18 use common\components\CustomVarDamp;
@@ -70,7 +71,6 @@ class ParserController extends BaseController @@ -70,7 +71,6 @@ class ParserController extends BaseController
70 71
71 public function actionResults() 72 public function actionResults()
72 { 73 {
73 -  
74 $model = new UploadFileParsingForm(); 74 $model = new UploadFileParsingForm();
75 $data = []; 75 $data = [];
76 if ($model->load(Yii::$app->request->post())) { 76 if ($model->load(Yii::$app->request->post())) {
@@ -116,7 +116,6 @@ class ParserController extends BaseController @@ -116,7 +116,6 @@ class ParserController extends BaseController
116 116
117 public function actionWrite() 117 public function actionWrite()
118 { 118 {
119 -  
120 //получим колонки которые выбрал пользователь 119 //получим колонки которые выбрал пользователь
121 $arr_attributes = Yii::$app->request->post()['DynamicModel']; 120 $arr_attributes = Yii::$app->request->post()['DynamicModel'];
122 //соберем модель по полученным данным 121 //соберем модель по полученным данным
@@ -145,37 +144,55 @@ class ParserController extends BaseController @@ -145,37 +144,55 @@ class ParserController extends BaseController
145 $data = \Yii::$app->multiparser->convertToAssocArray($data, $arr, 'attr_'); 144 $data = \Yii::$app->multiparser->convertToAssocArray($data, $arr, 'attr_');
146 145
147 146
148 - // запишем дату старта в таблицу файлов поставщика (ImportersFiles) 147 + // 1. запишем дату старта в таблицу файлов поставщика (ImportersFiles)
149 $files_model = new ImporterFiles(); 148 $files_model = new ImporterFiles();
150 // id поставщика получим из конфигурации 149 // id поставщика получим из конфигурации
151 $files_model->load(['ImporterFiles' => $configuration->toArray()]); 150 $files_model->load(['ImporterFiles' => $configuration->toArray()]);
152 if ($files_model->validate()) { 151 if ($files_model->validate()) {
153 try { 152 try {
154 $files_model->save(); 153 $files_model->save();
  154 + $update_date = $files_model->find()
  155 + ->where(['importer_id' => $files_model->importer_id])
  156 + ->orderBy(['id' => SORT_DESC])
  157 + ->one()
  158 + ->upload_time;
  159 + $update_date = date('Y-m-d H:i:s',strtotime($update_date));
  160 + // CustomVarDamp::dumpAndDie(strtotime($update_date));
155 } catch (ErrorException $e) { 161 } catch (ErrorException $e) {
156 CustomVarDamp::dump($e->getMessage()); 162 CustomVarDamp::dump($e->getMessage());
157 } 163 }
158 164
159 165
160 - // запишем полученные данные в таблицу товаров (Details) 166 + // 2. запишем полученные данные в таблицу товаров (Details)
161 $details_model = new Details('web'); 167 $details_model = new Details('web');
162 // проверим все ли обязательные колонки были указаны пользователем 168 // проверим все ли обязательные колонки были указаны пользователем
163 $details_model->load(['Details' => $data[0]]); 169 $details_model->load(['Details' => $data[0]]);
164 if ($details_model->validate()) { 170 if ($details_model->validate()) {
165 - // проставим импортера  
166 - $data = $details_model->prepareData($data, $configuration); 171 + // дополним данные значением импортера и даты обновления цены
  172 + $data = \Yii::$app->multiparser->addColumns( $data, ['IMPORT_ID' => $configuration['importer_id'],'timestamp' => $update_date] );
167 173
168 try { 174 try {
  175 + //@todo add transaction
169 // попытаемся вставить данные в БД с апдейтом по ключам 176 // попытаемся вставить данные в БД с апдейтом по ключам
170 $details_model->save($data); 177 $details_model->save($data);
171 178
172 - // а также зафиксируем дату конца загрузки  
173 - $files_model->time_end = mktime(); // ошибка!!!!!!!!!!!!!!!! 179 + // 3. зафиксируем дату конца загрузки в файлах поставщика
  180 + $files_model->time_end = date('Y-m-d H:i:s');
  181 + // CustomVarDamp::dumpAndDie($files_model);
174 $files_model->save(); 182 $files_model->save();
175 183
  184 + // 4. зафиксируем дату загрузки в таблице поставщиков
  185 + $imp_model = Importer::findOne( $configuration['importer_id'] );
  186 + $imp_model->price_date_update = ''.strtotime($update_date);
  187 +
  188 + if (!$imp_model->save()) {
  189 + CustomVarDamp::dumpAndDie( $imp_model->getErrors() );
  190 + }
  191 +
176 // все прошло успешно - очищаем кеш 192 // все прошло успешно - очищаем кеш
177 Yii::$app->getCache()->delete('parser_data'); 193 Yii::$app->getCache()->delete('parser_data');
178 Yii::$app->getCache()->delete('parser_configuration'); 194 Yii::$app->getCache()->delete('parser_configuration');
  195 + // @todo - Delete the file
179 196
180 CustomVarDamp::dumpAndDie('!!!'); 197 CustomVarDamp::dumpAndDie('!!!');
181 } catch (ErrorException $e) { 198 } catch (ErrorException $e) {
backend/models/Details.php
@@ -46,15 +46,15 @@ class Details extends Model{ @@ -46,15 +46,15 @@ class Details extends Model{
46 return '{{%details}}'; 46 return '{{%details}}';
47 } 47 }
48 48
49 - //@todo вероятно этой функции не место здесь  
50 - public function prepareData ( $data, $configuration )  
51 - {  
52 - if ( isset($configuration['importer_id']) && $configuration['importer_id']) {  
53 - $data = \Yii::$app->multiparser->addColumn( $data, 'IMPORT_ID', $configuration['importer_id'] );  
54 - }  
55 - // \common\components\CustomVarDamp::dumpAndDie($data);  
56 - return $data;  
57 - } 49 +// //@todo вероятно этой функции не место здесь
  50 +// public function prepareData ( $data, $configuration )
  51 +// {
  52 +// if ( isset($configuration['importer_id']) && $configuration['importer_id']) {
  53 +// $data = \Yii::$app->multiparser->addColumn( $data, 'IMPORT_ID', $configuration['importer_id'] );
  54 +// }
  55 +// // \common\components\CustomVarDamp::dumpAndDie($data);
  56 +// return $data;
  57 +// }
58 58
59 /** 59 /**
60 * @param $data - двумерный массив данных для записи в таблицу details 60 * @param $data - двумерный массив данных для записи в таблицу details
@@ -70,7 +70,7 @@ class Details extends Model{ @@ -70,7 +70,7 @@ class Details extends Model{
70 70
71 $query_update = ' on duplicate key update '; 71 $query_update = ' on duplicate key update ';
72 foreach ($fields_arr_to_update as $field) { 72 foreach ($fields_arr_to_update as $field) {
73 - $query_update .= "{$field} = values ({$field}),"; 73 + $query_update .= "{$field} = values({$field}),";
74 } 74 }
75 // удалим последнюю запятую 75 // удалим последнюю запятую
76 $query_update = substr($query_update, 0, strlen($query_update) - 1); 76 $query_update = substr($query_update, 0, strlen($query_update) - 1);
@@ -85,7 +85,7 @@ class Details extends Model{ @@ -85,7 +85,7 @@ class Details extends Model{
85 $query_insert = Yii::$app->db->createCommand()->batchInsert($table_name, $keys_arr, $current_batch_array)->sql; 85 $query_insert = Yii::$app->db->createCommand()->batchInsert($table_name, $keys_arr, $current_batch_array)->sql;
86 // добавим фрагмент с апдейтом при дубляже 86 // добавим фрагмент с апдейтом при дубляже
87 $query = "{$query_insert} {$query_update}"; 87 $query = "{$query_insert} {$query_update}";
88 - 88 + // \common\components\CustomVarDamp::dumpAndDie($query);
89 $res = Yii::$app->db->createCommand($query)->execute(); 89 $res = Yii::$app->db->createCommand($query)->execute();
90 90
91 } 91 }
backend/models/Importer.php
@@ -47,7 +47,8 @@ class Importer extends BaseActiveRecord @@ -47,7 +47,8 @@ class Importer extends BaseActiveRecord
47 public function rules() 47 public function rules()
48 { 48 {
49 return [ 49 return [
50 - [['code', 'name', 'name_price', 'currency_id', 'delivery', 'email', 'info', 'PARSER_FIELD_SIGN', 'price_date_update'], 'required'], 50 + [['code', 'name', 'currency_id', 'delivery', 'info', 'price_date_update'], 'required'],
  51 + [['name_price', 'email', 'PARSER_FIELD_SIGN'], 'safe'],
51 [['currency_id', 'active', 'PARSER_IS_ACTIVE', 'PARSER_COLUMN_COUNT', 'PARSER_FIELD_BRAND', 'PARSER_FIELD_ARTICLE', 'PARSER_FIELD_ARTICLE_PREFIX', 'PARSER_FIELD_PRICE', 'PARSER_FIELD_DESCR', 'PARSER_FIELD_BOX', 'PARSER_FIELD_ADD_BOX', 'PARSER_FIELD_GROUP_RG'], 'integer'], 52 [['currency_id', 'active', 'PARSER_IS_ACTIVE', 'PARSER_COLUMN_COUNT', 'PARSER_FIELD_BRAND', 'PARSER_FIELD_ARTICLE', 'PARSER_FIELD_ARTICLE_PREFIX', 'PARSER_FIELD_PRICE', 'PARSER_FIELD_DESCR', 'PARSER_FIELD_BOX', 'PARSER_FIELD_ADD_BOX', 'PARSER_FIELD_GROUP_RG'], 'integer'],
52 [['info'], 'string'], 53 [['info'], 'string'],
53 [['PARSER_FIELD_MULTIPLIER'], 'number'], 54 [['PARSER_FIELD_MULTIPLIER'], 'number'],
backend/models/UploadFileParsingForm.php
@@ -20,6 +20,7 @@ class UploadFileParsingForm extends Model @@ -20,6 +20,7 @@ class UploadFileParsingForm extends Model
20 public $delimiter; 20 public $delimiter;
21 public $delete_price; 21 public $delete_price;
22 public $delete_prefix; 22 public $delete_prefix;
  23 + public $update_date;
23 24
24 /** 25 /**
25 * @return array the validation rules. 26 * @return array the validation rules.
@@ -35,7 +36,8 @@ class UploadFileParsingForm extends Model @@ -35,7 +36,8 @@ class UploadFileParsingForm extends Model
35 ['importer_id', 'integer','max' => 999999, 'min' => 0 ], 36 ['importer_id', 'integer','max' => 999999, 'min' => 0 ],
36 [['action','delete_prefix', 'delete_price'], 'boolean'], 37 [['action','delete_prefix', 'delete_price'], 'boolean'],
37 ['delimiter', 'string', 'max' => 1], 38 ['delimiter', 'string', 'max' => 1],
38 - ['delimiter', 'default', 'value' => ';'] 39 + ['delimiter', 'default', 'value' => ';'],
  40 + ['update_date', 'safe']
39 41
40 ]; 42 ];
41 } 43 }