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 38 \ No newline at end of file
... ...
backend/components/parsers/CustomConverter.php
... ... @@ -44,14 +44,15 @@ class CustomConverter extends Converter {
44 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 49 $i = 0;
50 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 54 $i++;
53 55 }
54   -
55 56 return $value_arr;
56 57 }
57 58 }
58 59 \ No newline at end of file
... ...
backend/components/parsers/CustomCsvParser.php
... ... @@ -11,7 +11,7 @@ namespace backend\components\parsers;
11 11  
12 12 class CustomCsvParser extends \yii\multiparser\CsvParser {
13 13  
14   - public $last_line = 20;
  14 + public $last_line = 30;
15 15 //public $hasHeaderRow = true;
16 16 // public $keys = ['first','second', 'third', 'forth', 'fifth'];
17 17 public function setupConverter()
... ...
backend/controllers/ParserController.php
... ... @@ -12,6 +12,7 @@ use yii\multiparser\DynamicFormHelper;
12 12 use backend\components\parsers\CustomParserConfigurator;
13 13 use backend\models\Details;
14 14 use backend\models\ImporterFiles;
  15 +use backend\models\Importer;
15 16 use yii\base\ErrorException;
16 17  
17 18 use common\components\CustomVarDamp;
... ... @@ -70,7 +71,6 @@ class ParserController extends BaseController
70 71  
71 72 public function actionResults()
72 73 {
73   -
74 74 $model = new UploadFileParsingForm();
75 75 $data = [];
76 76 if ($model->load(Yii::$app->request->post())) {
... ... @@ -116,7 +116,6 @@ class ParserController extends BaseController
116 116  
117 117 public function actionWrite()
118 118 {
119   -
120 119 //получим колонки которые выбрал пользователь
121 120 $arr_attributes = Yii::$app->request->post()['DynamicModel'];
122 121 //соберем модель по полученным данным
... ... @@ -145,37 +144,55 @@ class ParserController extends BaseController
145 144 $data = \Yii::$app->multiparser->convertToAssocArray($data, $arr, 'attr_');
146 145  
147 146  
148   - // запишем дату старта в таблицу файлов поставщика (ImportersFiles)
  147 + // 1. запишем дату старта в таблицу файлов поставщика (ImportersFiles)
149 148 $files_model = new ImporterFiles();
150 149 // id поставщика получим из конфигурации
151 150 $files_model->load(['ImporterFiles' => $configuration->toArray()]);
152 151 if ($files_model->validate()) {
153 152 try {
154 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 161 } catch (ErrorException $e) {
156 162 CustomVarDamp::dump($e->getMessage());
157 163 }
158 164  
159 165  
160   - // запишем полученные данные в таблицу товаров (Details)
  166 + // 2. запишем полученные данные в таблицу товаров (Details)
161 167 $details_model = new Details('web');
162 168 // проверим все ли обязательные колонки были указаны пользователем
163 169 $details_model->load(['Details' => $data[0]]);
164 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 174 try {
  175 + //@todo add transaction
169 176 // попытаемся вставить данные в БД с апдейтом по ключам
170 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 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 193 Yii::$app->getCache()->delete('parser_data');
178 194 Yii::$app->getCache()->delete('parser_configuration');
  195 + // @todo - Delete the file
179 196  
180 197 CustomVarDamp::dumpAndDie('!!!');
181 198 } catch (ErrorException $e) {
... ...
backend/models/Details.php
... ... @@ -46,15 +46,15 @@ class Details extends Model{
46 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 60 * @param $data - двумерный массив данных для записи в таблицу details
... ... @@ -70,7 +70,7 @@ class Details extends Model{
70 70  
71 71 $query_update = ' on duplicate key update ';
72 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 76 $query_update = substr($query_update, 0, strlen($query_update) - 1);
... ... @@ -85,7 +85,7 @@ class Details extends Model{
85 85 $query_insert = Yii::$app->db->createCommand()->batchInsert($table_name, $keys_arr, $current_batch_array)->sql;
86 86 // добавим фрагмент с апдейтом при дубляже
87 87 $query = "{$query_insert} {$query_update}";
88   -
  88 + // \common\components\CustomVarDamp::dumpAndDie($query);
89 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 47 public function rules()
48 48 {
49 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 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 53 [['info'], 'string'],
53 54 [['PARSER_FIELD_MULTIPLIER'], 'number'],
... ...
backend/models/UploadFileParsingForm.php
... ... @@ -20,6 +20,7 @@ class UploadFileParsingForm extends Model
20 20 public $delimiter;
21 21 public $delete_price;
22 22 public $delete_prefix;
  23 + public $update_date;
23 24  
24 25 /**
25 26 * @return array the validation rules.
... ... @@ -35,7 +36,8 @@ class UploadFileParsingForm extends Model
35 36 ['importer_id', 'integer','max' => 999999, 'min' => 0 ],
36 37 [['action','delete_prefix', 'delete_price'], 'boolean'],
37 38 ['delimiter', 'string', 'max' => 1],
38   - ['delimiter', 'default', 'value' => ';']
  39 + ['delimiter', 'default', 'value' => ';'],
  40 + ['update_date', 'safe']
39 41  
40 42 ];
41 43 }
... ...