Commit 105200f0573ba0db5f128c198f2cd834bd73b370

Authored by Alexey Boroda
2 parents 2be06650 2e23f037

Merge remote-tracking branch 'origin/master'

common/modules/product/models/Export.php
@@ -3,6 +3,7 @@ @@ -3,6 +3,7 @@
3 namespace common\modules\product\models; 3 namespace common\modules\product\models;
4 4
5 use common\modules\rubrication\models\TaxGroup; 5 use common\modules\rubrication\models\TaxGroup;
  6 + use common\modules\rubrication\models\TaxOption;
6 use yii\base\Model; 7 use yii\base\Model;
7 8
8 class Export extends Model 9 class Export extends Model
@@ -59,7 +60,7 @@ @@ -59,7 +60,7 @@
59 $list = [ 60 $list = [
60 $categories, 61 $categories,
61 !empty($product->brand) ? $product->brand ->name :'', 62 !empty($product->brand) ? $product->brand ->name :'',
62 - $product->name, 63 + $product->name . '(#' . $product->product_id .'#)',
63 '', 64 '',
64 ( ( !empty( $product->description ) ) ? $product->description : '' ), 65 ( ( !empty( $product->description ) ) ? $product->description : '' ),
65 $filterString, 66 $filterString,
@@ -101,14 +102,19 @@ @@ -101,14 +102,19 @@
101 return $result; 102 return $result;
102 103
103 } 104 }
104 - 105 +
  106 + /**
  107 + * @param TaxOption[] $filters
  108 + *
  109 + * @return string
  110 + */
105 public function convertFilterToString($filters) 111 public function convertFilterToString($filters)
106 { 112 {
107 if(!empty($filters)){ 113 if(!empty($filters)){
108 $fittersArray = []; 114 $fittersArray = [];
109 foreach($filters as $filter) { 115 foreach($filters as $filter) {
110 if($filter->taxGroup instanceof TaxGroup){ 116 if($filter->taxGroup instanceof TaxGroup){
111 - $fittersArray[ $filter->taxGroup->alias ][] = $filter->value; 117 + $fittersArray[ $filter->taxGroup->alias ][] = $filter->value . '(#' . $filter->alias . '#)';
112 } 118 }
113 119
114 } 120 }
common/modules/product/models/Import.php
@@ -243,7 +243,6 @@ @@ -243,7 +243,6 @@
243 243
244 public function goProducts($from = 0, $limit = null) 244 public function goProducts($from = 0, $limit = null)
245 { 245 {
246 -  
247 set_time_limit(0); 246 set_time_limit(0);
248 $new_products = $linked_products = 0; 247 $new_products = $linked_products = 0;
249 248
@@ -318,6 +317,12 @@ @@ -318,6 +317,12 @@
318 $result_items[] = "Не указано наименование товара (строка $j)"; 317 $result_items[] = "Не указано наименование товара (строка $j)";
319 continue; 318 continue;
320 } 319 }
  320 + if (preg_match('/^.+\(#(\d+)#\)$/', trim($product_name), $remote_id)) {
  321 + if (!empty( $remote_id[ 1 ] )) {
  322 + $remote_id = $remote_id[ 1 ];
  323 + $product_name = substr($product_name, 0, strpos($product_name, '(#' . $remote_id . '#)'));
  324 + }
  325 + }
321 326
322 // 4 Описание Укр 327 // 4 Описание Укр
323 $product_body_uk = $data[ 3 ]; 328 $product_body_uk = $data[ 3 ];
@@ -363,9 +368,16 @@ @@ -363,9 +368,16 @@
363 $product_image = explode('=', $data[ 14 ]); 368 $product_image = explode('=', $data[ 14 ]);
364 $product_image = @$product_image[ 3 ]; 369 $product_image = @$product_image[ 3 ];
365 370
366 - if (( $_product = Product::find()  
367 - ->filterWhere([ 'name' => trim($product_name) ])  
368 - ->one() ) === null 371 + if (!empty( $remote_id )) {
  372 + if (( $_product = Product::find()
  373 + ->filterWhere([ 'product_id' => $remote_id ])
  374 + ->one() ) === null
  375 + ) {
  376 + $_product = new Product();
  377 + }
  378 + } elseif (( $_product = Product::find()
  379 + ->filterWhere([ 'name' => trim($product_name) ])
  380 + ->one() ) === null
369 ) { 381 ) {
370 $_product = new Product(); 382 $_product = new Product();
371 } 383 }
@@ -621,26 +633,44 @@ @@ -621,26 +633,44 @@
621 $filters_options = explode(',', $filter[ 2 ][ 0 ]); 633 $filters_options = explode(',', $filter[ 2 ][ 0 ]);
622 634
623 foreach ($filters_options as $filter_options) { 635 foreach ($filters_options as $filter_options) {
624 - $value = TaxValueString::find()  
625 - ->innerJoinWith('taxOption')  
626 - ->andWhere([ 'value' => $filter_options ])  
627 - ->andWhere([ 'tax_option.tax_group_id' => $taxGroup->tax_group_id ])  
628 - ->one(); 636 + $parsed_filter = $this->parseFilter($filter_options);
  637 + $value = null;
  638 + if ($parsed_filter !== false) {
  639 + $value = TaxValueString::find()
  640 + ->innerJoinWith('taxOption')
  641 + ->andWhere([ 'tax_option.alias' => $parsed_filter[ 2 ] ])
  642 + ->andWhere([ 'tax_option.tax_group_id' => $taxGroup->tax_group_id ])
  643 + ->one();
  644 + }
629 645
630 if (!$value instanceof TaxValueString) { 646 if (!$value instanceof TaxValueString) {
631 // Create option 647 // Create option
632 $option = new TaxOption(); 648 $option = new TaxOption();
633 $option->tax_group_id = $taxGroup->tax_group_id; 649 $option->tax_group_id = $taxGroup->tax_group_id;
634 - $option->name = $filter_options; 650 + if($parsed_filter !== false) {
  651 + $option->name = $parsed_filter[1];
  652 + $option->alias = $parsed_filter[2];
  653 + } else {
  654 + $option->name = $filter_options;
  655 + }
635 $option->save(); 656 $option->save();
636 657
637 $value = new TaxValueString(); 658 $value = new TaxValueString();
638 $value->tax_option_id = $option->tax_option_id; 659 $value->tax_option_id = $option->tax_option_id;
639 - $value->value = $filter_options; 660 + $value->value = $option->name;
640 $value->save(); 661 $value->save();
641 662
642 $option->default_value = $value->tax_value_id; 663 $option->default_value = $value->tax_value_id;
643 $option->save(); 664 $option->save();
  665 + } else {
  666 + if($parsed_filter !== false) {
  667 + $value->value = $parsed_filter[1];
  668 + $value->taxOption->name = $parsed_filter[1];
  669 + } else {
  670 + $value->value = $filter_options;
  671 + $value->taxOption->name = $filter_options;
  672 + }
  673 + $value->save();
644 } 674 }
645 $options[] = $value->tax_option_id; 675 $options[] = $value->tax_option_id;
646 676
@@ -650,4 +680,14 @@ @@ -650,4 +680,14 @@
650 680
651 return $options; 681 return $options;
652 } 682 }
  683 +
  684 + private function parseFilter($filter)
  685 + {
  686 + $regex = '/^(.+)\(#(.+)#\)$/';
  687 + if (preg_match($regex, $filter, $result)) {
  688 + return $result;
  689 + } else {
  690 + return false;
  691 + }
  692 + }
653 } 693 }
654 \ No newline at end of file 694 \ No newline at end of file