Commit ab917b7436f86e52d80f204b5ec2a14e41312c25
1 parent
58552c89
Import
Showing
3 changed files
with
111 additions
and
465 deletions
Show diff stats
common/modules/product/controllers/ManageController.php
... | ... | @@ -268,15 +268,23 @@ class ManageController extends Controller |
268 | 268 | if ($model->load(Yii::$app->request->post())) { |
269 | 269 | $file = UploadedFile::getInstances($model, 'file'); |
270 | 270 | $method = 'go'. ucfirst($model->type); |
271 | + $target = Yii::getAlias('@uploadDir') .'/'. Yii::getAlias('@uploadFile'. ucfirst($model->type)); | |
271 | 272 | if (empty($file)) { |
272 | 273 | $model->errors[] = 'File not upload'; |
273 | 274 | } elseif ($method == 'goPrices' && $file[0]->name != 'file_1.csv') { |
274 | 275 | $model->errors[] = 'File need "file_1.csv"'; |
275 | 276 | } elseif ($method == 'goProducts' && $file[0]->name == 'file_1.csv') { |
276 | 277 | $model->errors[] = 'File can not "file_1.csv"'; |
277 | - } elseif ($model->validate()) { | |
278 | - $file[0]->saveAs(Yii::getAlias('@uploadDir') .'/'. Yii::getAlias('@uploadFile'. ucfirst($model->type))); | |
279 | - $model->$method(); | |
278 | + } elseif ($model->validate() && $file[0]->saveAs($target)) { | |
279 | + // PROCESS PAGE | |
280 | + return $this->render('import-process', [ | |
281 | + 'model' => $model, | |
282 | + 'method' => $model->type, | |
283 | + 'target' => $target, | |
284 | + ]); | |
285 | +// $model->$method(); | |
286 | + } else { | |
287 | + $model->errors[] = 'File can not be upload or other error'; | |
280 | 288 | } |
281 | 289 | } |
282 | 290 | |
... | ... | @@ -285,6 +293,28 @@ class ManageController extends Controller |
285 | 293 | ]); |
286 | 294 | } |
287 | 295 | |
296 | + public function actionProducts() { | |
297 | + $from = Yii::$app->request->get('from', 0); | |
298 | + | |
299 | + $model = new Import(); | |
300 | + | |
301 | + if (Yii::$app->request->isAjax) { | |
302 | + Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; | |
303 | + return $model->goProducts($from, 10); | |
304 | + } | |
305 | + } | |
306 | + | |
307 | + public function actionPrices() { | |
308 | + $from = Yii::$app->request->get('from', 0); | |
309 | + | |
310 | + $model = new Import(); | |
311 | + | |
312 | + if (Yii::$app->request->isAjax) { | |
313 | + Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; | |
314 | + return $model->goPrices($from, 10); | |
315 | + } | |
316 | + } | |
317 | + | |
288 | 318 | public function actionExport() { |
289 | 319 | $model = new Export(); |
290 | 320 | if (($file = $model->process(Yii::getAlias('@uploadDir')))) { | ... | ... |
common/modules/product/views/manage/import-process.php
0 → 100644
1 | +<?php | |
2 | + | |
3 | +use yii\helpers\Html; | |
4 | +use yii\widgets\ActiveForm; | |
5 | + | |
6 | +$this->registerJs(" | |
7 | + | |
8 | +"); | |
9 | +?> | |
10 | + | |
11 | +<script type="text/javascript"> | |
12 | + jQuery(document).ready(function () { | |
13 | + var in_process=false; | |
14 | + var count=1; | |
15 | + | |
16 | + in_process=true; | |
17 | + | |
18 | + doImport(); | |
19 | + | |
20 | +// $('ul#process-result').prepend('<li style="color: green; font-weight: bold">Импорт завершен</li>'); | |
21 | + | |
22 | + function doImport(from) { | |
23 | + from = typeof(from) != 'undefined' ? from : 0; | |
24 | + console.log('go', from); | |
25 | + $.ajax({ | |
26 | + url: "<?= Yii::$app->request->baseUrl .'/product/manage/'. $method?>", | |
27 | + data: {from:from}, | |
28 | + dataType: 'json', | |
29 | + success: function(data){ | |
30 | + for(var key in data.items) | |
31 | + { | |
32 | + $('ul#process-result').prepend('<li>'+ data.items[key] +'</li>'); | |
33 | + count++; | |
34 | + } | |
35 | + | |
36 | + var per = Math.round(100*data.from/data.totalsize)+'%'; | |
37 | + $('#progressbar div').css({width: per}); | |
38 | +// $('#progressbar .ui-progressbar-value').html(per); | |
39 | + | |
40 | + if(data != false && !data.end) | |
41 | + { | |
42 | + doImport(data.from); | |
43 | + } | |
44 | + else | |
45 | + { | |
46 | + progressbar.hide('fast'); | |
47 | + in_process = false; | |
48 | + } | |
49 | + }, | |
50 | + error: function(xhr, status, errorThrown) { | |
51 | + alert(errorThrown+'\n'+xhr.responseText); | |
52 | + } | |
53 | + }); | |
54 | + } | |
55 | + | |
56 | + }); | |
57 | +</script> | |
58 | + | |
59 | +<div class="product-import-process-form"> | |
60 | + <h1>Импорт <?= $method == 'prices' ? 'цен' : 'данных'?> товаров</h1> | |
61 | + | |
62 | + <?= \yii\jui\ProgressBar::widget([ | |
63 | + 'clientOptions' => [ | |
64 | + 'value' => 100, | |
65 | + 'label' => 'ddd' | |
66 | + ], | |
67 | + 'options' => [ | |
68 | + 'id' => 'progressbar' | |
69 | + ], | |
70 | + ]);?> | |
71 | + <ul id="process-result"></ul> | |
72 | +</div> | ... | ... |
console/controllers/ImportController.php
... | ... | @@ -4,6 +4,7 @@ namespace console\controllers; |
4 | 4 | |
5 | 5 | use common\modules\product\models\Category; |
6 | 6 | use common\modules\product\models\CategoryName; |
7 | +use common\modules\product\models\Import; | |
7 | 8 | use common\modules\product\models\ProductImage; |
8 | 9 | use common\modules\product\models\ProductVariantType; |
9 | 10 | use common\modules\product\models\Stock; |
... | ... | @@ -28,473 +29,16 @@ class ImportController extends Controller { |
28 | 29 | return fopen ($filename, 'r'); |
29 | 30 | } |
30 | 31 | |
31 | - public function actionIndex() { | |
32 | - $new_products = $linked_products = 0; | |
33 | - | |
34 | - $db = yii::$app->db; | |
35 | - | |
36 | - if ( !($handle = $this->getProductsFile()) ) { | |
37 | - return Controller::EXIT_CODE_ERROR; | |
38 | - } | |
39 | - | |
40 | - $j = 0; | |
41 | - | |
42 | - while (($data = fgetcsv ($handle, 10000, ";")) !== FALSE) | |
43 | - { | |
44 | - $j++; | |
45 | - | |
46 | - foreach ($data as &$value) | |
47 | - { | |
48 | - //$value = mb_convert_encoding ($value, "UTF-8", mb_detect_encoding ($value)); | |
49 | - $value = iconv ('windows-1251', "UTF-8//TRANSLIT//IGNORE", $value); | |
50 | - $value = trim ($value); | |
51 | - } | |
52 | - | |
53 | - // будет всегда 19 элементов | |
54 | - for ($i = 0; $i <= 18; $i++) | |
55 | - { | |
56 | - if (! isset ($data[$i])) | |
57 | - { | |
58 | - $data[$i] = null; | |
59 | - } | |
60 | - } | |
61 | - | |
62 | - // 1 Группа (категория) | |
63 | - $catalog_name = $data[0]; | |
64 | - if (empty ($catalog_name)) | |
65 | - { | |
66 | - CONTINUE; | |
67 | - } | |
68 | - | |
69 | - // 2 Бренд | |
70 | - $brand_name = $data[1]; | |
71 | - if (empty ($brand_name)) | |
72 | - { | |
73 | - CONTINUE; | |
74 | - } | |
75 | - | |
76 | - // 3 Название товара | |
77 | - $product_name = $data[2]; | |
78 | - if (empty ($product_name)) | |
79 | - { | |
80 | - CONTINUE; | |
81 | - } | |
82 | - | |
83 | - // 4 Описание Укр | |
84 | - $product_body_uk = $data[3]; | |
85 | - | |
86 | - // 5 Описание Рус | |
87 | - $product_body_ru = $data[4]; | |
88 | - | |
89 | - // 6 Фильтр (через запятую) | |
90 | - $filters = explode (',', $data[5]); | |
91 | - | |
92 | - // 7 Доп фильтр через запятую | |
93 | - $filters_extra = explode (',', $data[6]); | |
94 | - | |
95 | - // 8 Пол череззапятую (мужской, женский, детский, унисекс) | |
96 | - $gender = explode (',', $data[7]); | |
97 | - | |
98 | - // 9 Год | |
99 | - $years = explode (',', $data[8]); | |
100 | - | |
101 | - // 10 Цена старая | |
102 | - $product_cost_old = $data[10]; | |
103 | - | |
104 | - // 11 Цена | |
105 | - $product_cost = $data[9]; | |
106 | - | |
107 | - // 12 Акция | |
108 | - $product_akciya = (bool)$data[11]; | |
109 | - | |
110 | - // 13 Сопуд. Тов. | |
111 | - $similar = explode (',', $data[12]); | |
112 | - | |
113 | - // 14 Новинки | |
114 | - $product_new = (bool)$data[13]; | |
115 | - | |
116 | - // 15 Топ продаж | |
117 | - $product_top = (bool)$data[14]; | |
118 | - | |
119 | - // 16 Сетка Характеристик | |
120 | - $feature = explode ('=', $data[15]); | |
121 | - | |
122 | - // 17 ВИДЕО КОД | |
123 | - $product_video = $data[16]; | |
124 | - | |
125 | - // 18 Галлерея фото | |
126 | - $fotos = explode (',', $data[17]); | |
127 | - | |
128 | - // 19 Штрих код товара. | |
129 | - // расшифровал - это модификации товара! | |
130 | - | |
131 | - $product_image = explode ('=', $data[18]); | |
132 | - $product_image = @$product_image[3]; | |
133 | - | |
134 | - if ( ($_product = Product::find()->filterWhere(['ilike', 'name', trim($product_name)])->one()) === null ) { | |
135 | - $_product = new Product(); | |
136 | - } | |
137 | - | |
138 | - $is_new_product = empty($_product->product_id); | |
139 | - | |
140 | - // ==== Set category ==== | |
141 | - if ( ($category = CategoryName::find()->filterWhere(['ilike', 'value', trim($catalog_name)])->one()) === null ) { | |
142 | - // Create category | |
143 | - $category = new Category(); | |
144 | - $category->name = trim($catalog_name); | |
145 | - $category->save(); | |
146 | - } | |
147 | - $_product->categories = [$category->category_id]; | |
148 | - | |
149 | - // ===== Set brand ==== | |
150 | - if ( $brand_name ) { | |
151 | - if ( ($brand = BrandName::find()->filterWhere(['ilike', 'value', trim($brand_name)])->one()) !== null ) { | |
152 | - $_product->brand_id = $brand->brand_id; | |
153 | - } else { | |
154 | - // Create brand | |
155 | - $brand = new Brand(); | |
156 | - $brand->name = trim($brand_name); | |
157 | - $brand->save(); | |
158 | - $_product->brand_id = $brand->brand_id; | |
159 | - } | |
160 | - } | |
161 | - | |
162 | - $_product->name = $product_name; | |
163 | - $_product->video = $product_video; | |
164 | - $_product->description = $product_body_ru; | |
165 | - $_product->is_top = $product_top; | |
166 | - $_product->akciya = $product_akciya; | |
167 | - $_product->is_new = $product_new; | |
168 | - | |
169 | - if (!$_product->save()) { | |
170 | - var_dump($category->category_id, $_product->categories);exit; | |
171 | - } | |
172 | - | |
173 | - | |
174 | - // @todo Set image | |
175 | - /*// картинки | |
176 | - if (is_file ($dir.'/mod/' . $product_image)) | |
177 | - { | |
178 | - $resizeObj = new resize ($dir.'/mod/' . $product_image); | |
179 | - $resizeObj->resizeImage (135, 200, 'auto'); | |
180 | - $resizeObj->saveImage ($dir.'/products/ico/' . $product_image, 100); | |
181 | - $resizeObj->resizeImage (370, 370, 'auto'); | |
182 | - $resizeObj->saveImage ($dir.'/products/big/' . $product_image, 100); | |
183 | - }*/ | |
184 | - | |
185 | - // ==== mods ==== | |
186 | - | |
187 | - // (типа штрих код товара) | |
188 | - | |
189 | - // нужно для проставления характеристик относящихся к модификациям | |
190 | - $MOD_ARRAY = []; | |
191 | - | |
192 | - for ($i = 18; $i < count ($data); $i ++) | |
193 | - { | |
194 | - if (! empty ($data[$i])) | |
195 | - { | |
196 | - $mod_arr = explode ('=', $data[$i]); | |
197 | - $mod_art = $mod_arr[0]; | |
198 | - $mod_size = $mod_arr[1]; | |
199 | - $mod_color = $mod_arr[2]; | |
200 | - $mod_image = $mod_arr[3]; | |
201 | - $mod_cost = floatval($product_cost); | |
202 | - $mod_old_cost = floatval($product_cost_old); | |
203 | - | |
204 | - // Check product variant | |
205 | - if ( ($_productVariant = ProductVariant::find()->andFilterWhere(['ilike', 'sku', $mod_art])->andFilterWhere(['product_id' => $_product->product_id])->one()) === null ) { | |
206 | - $_productVariant = new ProductVariant(); | |
207 | - $_productVariant->product_id = $_product->product_id; | |
208 | - } | |
209 | - $_productVariant->product_unit_id = 1; | |
210 | - | |
211 | - $_productVariant->sku = $mod_art; | |
212 | - $_productVariant->price = $mod_cost; | |
213 | - $_productVariant->price_old = $mod_old_cost; | |
214 | - $_productVariant->stock = 1; | |
215 | - | |
216 | - $product_variant_type_name = ''; | |
217 | - if (! empty ($mod_color)) { | |
218 | - $product_variant_type_name = 'Цвет'; | |
219 | - $_productVariant->name = $mod_color; | |
220 | - } | |
221 | - elseif (! empty ($mod_size)) { | |
222 | - $product_variant_type_name = 'Размер'; | |
223 | - $_productVariant->name = $mod_size; | |
224 | - } | |
225 | - | |
226 | - // ===== Set variant type ==== | |
227 | - if ( $product_variant_type_name ) { | |
228 | - if ( ($product_variant_type = ProductVariantType::find()->filterWhere(['ilike', 'name', $product_variant_type_name])->one()) !== null ) { | |
229 | - $_productVariant->product_variant_type_id = $product_variant_type->product_variant_type_id; | |
230 | - } else { | |
231 | - $product_variant_type = new ProductVariantType(); | |
232 | - $product_variant_type->name = $product_variant_type_name; | |
233 | - $product_variant_type->save(); | |
234 | - $_productVariant->product_variant_type_id = $product_variant_type->product_variant_type_id; | |
235 | - } | |
236 | - } | |
237 | - $_productVariant->save(false); | |
238 | -// if (!$_productVariant->save(false)) { | |
239 | -//// $this->stdout("$j: Product {$_product->name} #{$_product->product_id} NOT saved (". ($is_new_product ? 'new product' : 'exists product') .")\n"); | |
240 | -//// var_dump($_productVariant);exit; | |
241 | -// continue; | |
242 | -// } | |
243 | - | |
244 | -// if ($mod_art == '610934725148') { | |
245 | -// var_dump($_productVariant); | |
246 | -// exit; | |
247 | -// } | |
248 | - | |
249 | - $MOD_ARRAY[] = $_productVariant->product_variant_id; | |
250 | - | |
251 | - if ($mod_image) { | |
252 | - $url = 'http://rukzachok.com.ua/upload/mod/' . urlencode($mod_image); | |
253 | - $image = @file_get_contents($url); | |
254 | - if ($image) { | |
255 | - if (($variantImage = ProductImage::find()->andFilterWhere(['ilike', 'image', $mod_image])->andFilterWhere(['product_variant_id' => $_productVariant->product_variant_id])->one()) === null) { | |
256 | - file_put_contents(Yii::getAlias('@productsDir') . "/" . $mod_image, $image); | |
257 | - $variantImage = new ProductImage(); | |
258 | - $variantImage->product_id = $_product->product_id; | |
259 | - $variantImage->product_variant_id = $_productVariant->product_variant_id; | |
260 | - $variantImage->image = $mod_image; | |
261 | - $variantImage->save(); | |
262 | - } | |
263 | - } | |
264 | - } | |
265 | - } | |
266 | - } | |
267 | - | |
268 | - /*// ==== fotos ==== | |
269 | - | |
270 | - foreach ($fotos as $foto) | |
271 | - { | |
272 | - $fields = [ | |
273 | - 'product_id' => $product_id, | |
274 | - 'image' => $foto | |
275 | - ]; | |
276 | - | |
277 | - $modelFotos = Fotos::find () | |
278 | - ->where ('image=:image', [ | |
279 | - ':image' => $foto | |
280 | - ]) | |
281 | - ->one (); | |
282 | - | |
283 | - if (empty ($modelFotos->id)) | |
284 | - { | |
285 | - $db->createCommand () | |
286 | - ->insert ('products_fotos', $fields) | |
287 | - ->execute (); | |
288 | - } | |
289 | - else | |
290 | - { | |
291 | - $db->createCommand () | |
292 | - ->update ('products_fotos', $fields, 'id = ' . $modelFotos->id) | |
293 | - ->execute (); | |
294 | - } | |
295 | - | |
296 | - if (is_file ($dir.'/fotos/' . $foto)) | |
297 | - { | |
298 | - $resizeObj = new resize ($dir.'/fotos/' . $foto); | |
299 | - $resizeObj->resizeImage (100, 100, 'crop'); | |
300 | - $resizeObj->saveImage ($dir.'/fotos/ico/' . $foto, 100); | |
301 | - $resizeObj->resizeImage (400, 400, 'crop'); | |
302 | - $resizeObj->saveImage ($dir.'/fotos/big/' . $foto, 100); | |
303 | - } | |
304 | - }*/ | |
305 | - | |
306 | - $options = []; | |
307 | - | |
308 | - if (! empty ($filters)) { | |
309 | - // Set Naznachenie (tax_group_id = 20) | |
310 | - foreach($filters as $filter) { | |
311 | - $filter = trim($filter); | |
312 | - if (!$filter) { | |
313 | - continue; | |
314 | - } | |
315 | - if ( ($value = TaxValueString::find()->innerJoinWith('taxOption')->andFilterWhere(['ilike', 'value', $filter])->andFilterWhere(['tax_option.tax_group_id' => 20])->one()) === null ) { | |
316 | - // Create option | |
317 | - $option = new TaxOption(); | |
318 | - $option->tax_group_id = 20; | |
319 | - $option->save(); | |
320 | - | |
321 | - $value = new TaxValueString(); | |
322 | - $value->tax_option_id = $option->tax_option_id; | |
323 | - $value->value = $filter; | |
324 | - $value->save(); | |
325 | - | |
326 | - $option->default_value = $value->tax_value_id; | |
327 | - $option->save(); | |
328 | - } | |
329 | - $options[] = $value->tax_option_id; | |
330 | - } | |
331 | - } | |
332 | - | |
333 | - if (! empty ($years)) { | |
334 | - // Set God (tax_group_id = 21) | |
335 | - foreach($years as $filter) { | |
336 | - $filter = trim($filter); | |
337 | - if (!$filter) { | |
338 | - continue; | |
339 | - } | |
340 | - if ( ($value = TaxValueString::find()->innerJoinWith('taxOption')->andFilterWhere(['ilike', 'value', $filter])->andFilterWhere(['tax_option.tax_group_id' => 21])->one()) === null ) { | |
341 | - // Create option | |
342 | - $option = new TaxOption(); | |
343 | - $option->tax_group_id = 21; | |
344 | - $option->save(); | |
345 | - | |
346 | - $value = new TaxValueString(); | |
347 | - $value->tax_option_id = $option->tax_option_id; | |
348 | - $value->value = $filter; | |
349 | - $value->save(); | |
350 | - | |
351 | - $option->default_value = $value->tax_value_id; | |
352 | - $option->save(); | |
353 | - } | |
354 | - $options[] = $value->tax_option_id; | |
355 | - } | |
356 | - } | |
357 | - | |
358 | - if (! empty ($gender)) { | |
359 | - // Set Pol (tax_group_id = 22) | |
360 | - foreach($gender as $filter) { | |
361 | - $filter = trim($filter); | |
362 | - if (!$filter) { | |
363 | - continue; | |
364 | - } | |
365 | - if ( ($value = TaxValueString::find()->innerJoinWith('taxOption')->andFilterWhere(['ilike', 'value', $filter])->andFilterWhere(['tax_option.tax_group_id' => 22])->one()) === null ) { | |
366 | - // Create option | |
367 | - $option = new TaxOption(); | |
368 | - $option->tax_group_id = 22; | |
369 | - $option->save(); | |
370 | - | |
371 | - $value = new TaxValueString(); | |
372 | - $value->tax_option_id = $option->tax_option_id; | |
373 | - $value->value = $filter; | |
374 | - $value->save(); | |
375 | - | |
376 | - $option->default_value = $value->tax_value_id; | |
377 | - $option->save(); | |
378 | - } | |
379 | - $options[] = $value->tax_option_id; | |
380 | - } | |
381 | - } | |
382 | - | |
383 | - if (!empty($options)) { | |
384 | - $_product->options = $options; | |
385 | - } | |
386 | - | |
387 | - $_product->save(); | |
388 | - | |
389 | - $this->stdout("$j: Product {$_product->name} #{$_product->product_id} saved (". ($is_new_product ? 'new product' : 'exists product') .")\n"); | |
390 | - | |
391 | - /*if ($j > 100) { | |
392 | - $this->stdout("Dev OK"); | |
393 | - exit; | |
394 | - }*/ | |
395 | - | |
396 | - } | |
397 | - | |
398 | - fclose ($handle); | |
32 | + public function actionProducts() { | |
33 | + $model = new Import(); | |
34 | + $data = $model->goProducts(0, null); | |
399 | 35 | |
400 | 36 | return Controller::EXIT_CODE_NORMAL; |
401 | 37 | } |
402 | 38 | |
403 | - public function goProducts() { | |
404 | - | |
405 | - } | |
406 | - | |
407 | 39 | public function actionPrices() { |
408 | - $new_products = $linked_products = 0; | |
409 | - | |
410 | - if ( !($handle = $this->getProductsFile('uploadFilePrices')) ) { | |
411 | - $this->stdout("File not found\n"); | |
412 | - return Controller::EXIT_CODE_ERROR; | |
413 | - } | |
414 | - | |
415 | - $j = 0; | |
416 | - | |
417 | - while (($data = fgetcsv ($handle, 10000, ";")) !== FALSE) { | |
418 | - $j++; | |
419 | -// if ($j > 1) { | |
420 | -// return TRUE; | |
421 | -// } | |
422 | - | |
423 | - foreach ($data as &$value) | |
424 | - { | |
425 | - //$value = mb_convert_encoding ($value, "UTF-8", mb_detect_encoding ($value)); | |
426 | - $value = iconv ('windows-1251', "UTF-8//TRANSLIT//IGNORE", $value); | |
427 | - $value = trim ($value); | |
428 | - } | |
429 | - | |
430 | - // данные строк | |
431 | - $modification_code = @$data[0]; | |
432 | - $_price = floatval(@$data[1]); | |
433 | - $_price_promo = floatval(@$data[2]); | |
434 | - $count = intval(@$data[3]); | |
435 | - $city_name = @$data[4]; | |
436 | - $product_title = @$data[5]; | |
437 | - | |
438 | - // @todo refactory this code | |
439 | - $price = $_price_promo > 0 ? $_price_promo : $_price; | |
440 | - $price_promo = $_price_promo > 0 ? $_price : $_price_promo; | |
441 | - | |
442 | - $modification_code = trim($modification_code); | |
443 | - | |
444 | - if (empty ($modification_code)) { | |
445 | - continue; | |
446 | - } | |
447 | - // товары в пути | |
448 | - if (empty ($city_name)) | |
449 | - { | |
450 | - $this->saveNotFoundRecord ( | |
451 | - [$modification_code, $product_title], | |
452 | - Yii::getAlias('@uploadFilePricesAway') | |
453 | - ); | |
454 | - | |
455 | - $this->stdout("~ Товар $product_title в пути\n"); | |
456 | - | |
457 | - continue; | |
458 | - } | |
459 | - | |
460 | - if ( ($productVariant = ProductVariant::find()->filterWhere(['sku' => $modification_code])->one()) === null ) { | |
461 | - // 'Нет даной модификации в базе'; | |
462 | - $this->saveNotFoundRecord ( | |
463 | - [$modification_code, $product_title], | |
464 | - Yii::getAlias('@uploadFilePricesNoVariant') | |
465 | - ); | |
466 | - | |
467 | - $this->stdout("- Для товара $product_title (#$modification_code) не найдено соотвествия\n"); | |
468 | - | |
469 | - continue; | |
470 | - } | |
471 | - | |
472 | - $quantity = 0; | |
473 | - | |
474 | - // ===== Set stock ==== | |
475 | - if ( $city_name ) { | |
476 | - if ( ($stock = Stock::find()->filterWhere(['name' => trim($city_name)])->one()) === null ) { | |
477 | - // Create stock | |
478 | - $stock = new Stock(); | |
479 | - $stock->name = trim($city_name); | |
480 | - $stock->save(); | |
481 | - } | |
482 | - | |
483 | - $productVariant->stocks[$stock->stock_id] = $count; | |
484 | - $quantity = $quantity + $count; | |
485 | - } | |
486 | - | |
487 | - $productVariant->price = $price; | |
488 | - $productVariant->price_old = $price_promo; | |
489 | - $productVariant->stock = $quantity; | |
490 | - | |
491 | - $productVariant->save(); | |
492 | - | |
493 | - $this->stdout("+ Товар $product_title успешно сохранен\n"); | |
494 | - } | |
495 | - fclose ($handle); | |
496 | - | |
497 | - unlink(Yii::getAlias('@uploadDir') .'/'. Yii::getAlias('@uploadFilePrices')); | |
40 | + $model = new Import(); | |
41 | + $data = $model->goPrices(0, null); | |
498 | 42 | |
499 | 43 | return Controller::EXIT_CODE_NORMAL; |
500 | 44 | } | ... | ... |