Commit aac46b7995f0245e3ac4e2fbb323339e72899cc7
1 parent
036d7990
Import test
Showing
2 changed files
with
45 additions
and
17 deletions
Show diff stats
common/modules/product/models/Export.php
| ... | ... | @@ -3,6 +3,7 @@ |
| 3 | 3 | namespace common\modules\product\models; |
| 4 | 4 | |
| 5 | 5 | use common\modules\rubrication\models\TaxGroup; |
| 6 | + use common\modules\rubrication\models\TaxOption; | |
| 6 | 7 | use yii\base\Model; |
| 7 | 8 | |
| 8 | 9 | class Export extends Model |
| ... | ... | @@ -101,14 +102,19 @@ |
| 101 | 102 | return $result; |
| 102 | 103 | |
| 103 | 104 | } |
| 104 | - | |
| 105 | + | |
| 106 | + /** | |
| 107 | + * @param TaxOption[] $filters | |
| 108 | + * | |
| 109 | + * @return string | |
| 110 | + */ | |
| 105 | 111 | public function convertFilterToString($filters) |
| 106 | 112 | { |
| 107 | 113 | if(!empty($filters)){ |
| 108 | 114 | $fittersArray = []; |
| 109 | 115 | foreach($filters as $filter) { |
| 110 | 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
| ... | ... | @@ -267,7 +267,7 @@ |
| 267 | 267 | $is_utf = ( preg_match( |
| 268 | 268 | '//u', |
| 269 | 269 | file_get_contents( |
| 270 | - Yii::getAlias('@uploadDir') . '/' . Yii::getAlias('@uploadFileProducts'), | |
| 270 | + Yii::getAlias('@uploadDir') . '/' . Yiiа::getAlias('@uploadFileProducts'), | |
| 271 | 271 | null, |
| 272 | 272 | null, |
| 273 | 273 | null, |
| ... | ... | @@ -317,9 +317,9 @@ |
| 317 | 317 | $result_items[] = "Не указано наименование товара (строка $j)"; |
| 318 | 318 | continue; |
| 319 | 319 | } |
| 320 | - if(preg_match('/^.+\(#(\d+)#\)$/', trim($product_name), $remote_id)) { | |
| 321 | - if(!empty($remote_id[1])) { | |
| 322 | - $remote_id = $remote_id[1]; | |
| 320 | + if (preg_match('/^.+\(#(\d+)#\)$/', trim($product_name), $remote_id)) { | |
| 321 | + if (!empty( $remote_id[ 1 ] )) { | |
| 322 | + $remote_id = $remote_id[ 1 ]; | |
| 323 | 323 | $product_name = substr($product_name, 0, strpos($product_name, '(#' . $remote_id . '#)')); |
| 324 | 324 | } |
| 325 | 325 | } |
| ... | ... | @@ -368,13 +368,16 @@ |
| 368 | 368 | $product_image = explode('=', $data[ 14 ]); |
| 369 | 369 | $product_image = @$product_image[ 3 ]; |
| 370 | 370 | |
| 371 | - if(!empty($remote_id)) { | |
| 372 | - if(($_product = Product::find()->filterWhere(['product_id' => $remote_id])->one()) === null) { | |
| 371 | + if (!empty( $remote_id )) { | |
| 372 | + if (( $_product = Product::find() | |
| 373 | + ->filterWhere([ 'product_id' => $remote_id ]) | |
| 374 | + ->one() ) === null | |
| 375 | + ) { | |
| 373 | 376 | $_product = new Product(); |
| 374 | 377 | } |
| 375 | 378 | } elseif (( $_product = Product::find() |
| 376 | - ->filterWhere([ 'name' => trim($product_name) ]) | |
| 377 | - ->one() ) === null | |
| 379 | + ->filterWhere([ 'name' => trim($product_name) ]) | |
| 380 | + ->one() ) === null | |
| 378 | 381 | ) { |
| 379 | 382 | $_product = new Product(); |
| 380 | 383 | } |
| ... | ... | @@ -630,22 +633,31 @@ |
| 630 | 633 | $filters_options = explode(',', $filter[ 2 ][ 0 ]); |
| 631 | 634 | |
| 632 | 635 | foreach ($filters_options as $filter_options) { |
| 633 | - $value = TaxValueString::find() | |
| 634 | - ->innerJoinWith('taxOption') | |
| 635 | - ->andWhere([ 'value' => $filter_options ]) | |
| 636 | - ->andWhere([ 'tax_option.tax_group_id' => $taxGroup->tax_group_id ]) | |
| 637 | - ->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 | + } | |
| 638 | 645 | |
| 639 | 646 | if (!$value instanceof TaxValueString) { |
| 640 | 647 | // Create option |
| 641 | 648 | $option = new TaxOption(); |
| 642 | 649 | $option->tax_group_id = $taxGroup->tax_group_id; |
| 643 | - $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 | + } | |
| 644 | 656 | $option->save(); |
| 645 | 657 | |
| 646 | 658 | $value = new TaxValueString(); |
| 647 | 659 | $value->tax_option_id = $option->tax_option_id; |
| 648 | - $value->value = $filter_options; | |
| 660 | + $value->value = $option->name; | |
| 649 | 661 | $value->save(); |
| 650 | 662 | |
| 651 | 663 | $option->default_value = $value->tax_value_id; |
| ... | ... | @@ -659,4 +671,14 @@ |
| 659 | 671 | |
| 660 | 672 | return $options; |
| 661 | 673 | } |
| 674 | + | |
| 675 | + private function parseFilter($filter) | |
| 676 | + { | |
| 677 | + $regex = '/^(.+)\(#(.+)#\)$/'; | |
| 678 | + if (preg_match($regex, $filter, $result)) { | |
| 679 | + return $result; | |
| 680 | + } else { | |
| 681 | + return false; | |
| 682 | + } | |
| 683 | + } | |
| 662 | 684 | } |
| 663 | 685 | \ No newline at end of file | ... | ... |