Commit 96f5a82290d90ed126d5a3f15f16d9def9179b64

Authored by Administrator
1 parent 70412c76

29.06.16

backend/config/bootstrap.php
@@ -6,4 +6,4 @@ Yii::setAlias('@uploadFilePricesAway', 'price_product_away.csv'); @@ -6,4 +6,4 @@ Yii::setAlias('@uploadFilePricesAway', 'price_product_away.csv');
6 Yii::setAlias('@uploadFilePricesDuplicate', 'price_duplicate.csv'); 6 Yii::setAlias('@uploadFilePricesDuplicate', 'price_duplicate.csv');
7 Yii::setAlias('@uploadFilePricesNoVariant', 'price_no_variant.csv'); 7 Yii::setAlias('@uploadFilePricesNoVariant', 'price_no_variant.csv');
8 8
9 -Yii::setAlias('@productsDir', '@frontend/web/images/products');  
10 \ No newline at end of file 9 \ No newline at end of file
  10 +Yii::setAlias('@productsDir', '@storage/products');
11 \ No newline at end of file 11 \ No newline at end of file
common/modules/product/behaviors/FilterBehavior.php 0 → 100755
  1 +<?php
  2 +
  3 +namespace common\modules\product\behaviors;
  4 +
  5 +
  6 +use common\modules\product\models\ProductOption;
  7 +use common\modules\rubrication\models\TaxGroup;
  8 +use common\modules\rubrication\models\TaxOption;
  9 +use yii\base\Behavior;
  10 +
  11 +use Yii;
  12 +
  13 +
  14 +class FilterBehavior extends Behavior {
  15 +
  16 + public function getFilters(){
  17 +
  18 + return $this->owner->hasMany(TaxOption::className(), ['tax_option_id' => 'option_id'])
  19 + ->viaTable(ProductOption::tableName(),[ 'product_id'=> $this->owner->tableSchema->primaryKey[0]])
  20 + ->joinWith('taxGroup')->all();
  21 + }
  22 +
  23 +
  24 +}
0 \ No newline at end of file 25 \ No newline at end of file
common/modules/product/models/Export.php
@@ -4,6 +4,7 @@ namespace common\modules\product\models; @@ -4,6 +4,7 @@ namespace common\modules\product\models;
4 4
5 use common\modules\product\helpers\ProductHelper; 5 use common\modules\product\helpers\ProductHelper;
6 use yii\base\Model; 6 use yii\base\Model;
  7 +use yii\helpers\ArrayHelper;
7 8
8 class Export extends Model { 9 class Export extends Model {
9 public $errors = []; 10 public $errors = [];
@@ -15,59 +16,66 @@ class Export extends Model { @@ -15,59 +16,66 @@ class Export extends Model {
15 } 16 }
16 setlocale(LC_ALL, 'ru_RU.CP1251'); 17 setlocale(LC_ALL, 'ru_RU.CP1251');
17 $handle = fopen($dirName .'/'. $filename, "w"); 18 $handle = fopen($dirName .'/'. $filename, "w");
18 - $products = Product::find()->joinWith(['variants'])->where(['!=', ProductVariant::tableName() .'.stock', 0])->select('product.product_id')->all(); 19 + ///$products = Product::find()->joinWith(['variants'])->where(['!=', ProductVariant::tableName() .'.stock', 0])->select('product.product_id')->all();
  20 + $products = Product::find()
  21 + ->with(['variantsWithFilters','brand','categoriesWithName'])->all();
  22 +
19 $i = 0; 23 $i = 0;
20 - foreach ($products as $product_id) 24 + foreach ($products as $product)
21 { 25 {
22 - $product = Product::findOne($product_id); 26 +
  27 +
23 $i++; 28 $i++;
24 /*if ($i>1e2) { 29 /*if ($i>1e2) {
25 break; 30 break;
26 }*/ 31 }*/
27 $mods = []; 32 $mods = [];
28 33
29 - foreach ($product->enabledVariants as $variant) 34 + $filterString = $this->convertFilterToString($product->getFilters());
  35 +
  36 + foreach ($product->variantsWithFilters as $variant)
30 { 37 {
31 - $size = $color = '';  
32 - if ($product->product_variant_type_id) {  
33 - $productVariantType = ProductVariantType::findOne($product->product_variant_type_id);  
34 - if ($productVariantType) {  
35 - if ($productVariantType->product_variant_type_id == ProductHelper::PRODUCT_VARIANT_TYPE_COLOR) {  
36 - $color = $product->name;  
37 - } elseif ($productVariantType->product_variant_type_id == ProductHelper::PRODUCT_VARIANT_TYPE_SIZE) {  
38 - $size = $product->name;  
39 - }  
40 - }  
41 - }  
42 - $mods[] = $variant->sku . '=' . $size . '=' . $color . '=' . $variant->imageUrl; 38 +
  39 + $color = $variant->name;
  40 +
  41 + $mods[] = $variant->sku .
  42 + '=' . $this->convertFilterToString($variant->filters) .
  43 + '=' . $color .
  44 + '=' . ((!empty($variant->image)) ? $variant->image->image: '').
  45 + '=' . $variant->stock;
43 } 46 }
44 47
45 $fotos = []; 48 $fotos = [];
46 49
47 - foreach ($product->images as $image)  
48 - {  
49 - $fotos[] = $image->imageUrl; 50 +// foreach ($product->images as $image)
  51 +// {
  52 +// $fotos[] = $image->imageUrl;
  53 +// }
  54 +
  55 +// $filters = $product->properties;
  56 + $categories = [];
  57 + foreach($product->categoriesWithName as $value){
  58 + $categorName = ArrayHelper::getColumn($value->categoryNames,'value');
  59 + $categories[] = $categorName[0];
  60 +
50 } 61 }
51 62
52 - $filters = $product->properties; 63 +
  64 + $categories = implode(',',$categories);
53 65
54 $list = [ 66 $list = [
55 - $product->category->name, 67 + $categories,
56 $product->brand->name, 68 $product->brand->name,
57 $product->name, 69 $product->name,
58 '', 70 '',
59 ((! empty($product->description)) ? $product->description : ''), 71 ((! empty($product->description)) ? $product->description : ''),
60 - ((! empty($filters[ProductHelper::PRODUCT_TAX_GROUP_ID_TARGET])) ? implode (',', $filters[ProductHelper::PRODUCT_TAX_GROUP_ID_TARGET]) : ''),  
61 - '',  
62 - ((! empty($filters[ProductHelper::PRODUCT_TAX_GROUP_ID_SEX])) ? implode (',', $filters[ProductHelper::PRODUCT_TAX_GROUP_ID_SEX]) : ''),  
63 - ((! empty($filters[ProductHelper::PRODUCT_TAX_GROUP_ID_YEAR])) ? implode (',', $filters[ProductHelper::PRODUCT_TAX_GROUP_ID_YEAR]) : ''),  
64 - $product->price_old,  
65 - $product->price, 72 + $filterString,
  73 + (!empty($product->variant)) ? $product->variant->price_old : '',
  74 + (!empty($product->variant)) ? $product->variant->price : '',
66 intval($product->akciya), 75 intval($product->akciya),
67 '', 76 '',
68 intval($product->new), 77 intval($product->new),
69 intval($product->top), 78 intval($product->top),
70 - '',  
71 $product->video, 79 $product->video,
72 implode (',', $fotos), 80 implode (',', $fotos),
73 ]; 81 ];
@@ -77,11 +85,30 @@ class Export extends Model { @@ -77,11 +85,30 @@ class Export extends Model {
77 $cell = iconv("UTF-8", "WINDOWS-1251", $cell); 85 $cell = iconv("UTF-8", "WINDOWS-1251", $cell);
78 } 86 }
79 87
  88 +
80 fputcsv($handle, $to_write, ';'); 89 fputcsv($handle, $to_write, ';');
81 } 90 }
82 91
  92 +
  93 +
83 fclose ($handle); 94 fclose ($handle);
84 95
85 return $dirName .'/'. $filename; 96 return $dirName .'/'. $filename;
86 } 97 }
  98 +
  99 +
  100 + public function convertFilterToString($filters){
  101 + $fittersArray = [];
  102 + foreach($filters as $filter){
  103 + $fittersArray[$filter->taxGroup->alias][] = $filter->name;
  104 + }
  105 + $filterString=[];
  106 +
  107 + foreach($fittersArray as $filterName =>$filterRows ){
  108 + $row = implode(',',$filterRows);
  109 + $filterString[] = "[{$filterName}:{$row}]";
  110 +
  111 + }
  112 + return implode('*',$filterString);
  113 + }
87 } 114 }
88 \ No newline at end of file 115 \ No newline at end of file
common/modules/product/models/Import.php
@@ -542,7 +542,7 @@ class Import extends Model { @@ -542,7 +542,7 @@ class Import extends Model {
542 // Create option 542 // Create option
543 $option = new TaxOption(); 543 $option = new TaxOption();
544 $option->tax_group_id = $taxGroup->tax_group_id; 544 $option->tax_group_id = $taxGroup->tax_group_id;
545 - $option->alias = $filter_options; 545 + $option->name = $filter_options;
546 $option->save(); 546 $option->save();
547 547
548 $value = new TaxValueString(); 548 $value = new TaxValueString();
common/modules/product/models/Product.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\behaviors\Slug; 5 use common\behaviors\Slug;
  6 +use common\modules\product\behaviors\FilterBehavior;
6 use common\modules\rubrication\models\TaxGroup; 7 use common\modules\rubrication\models\TaxGroup;
7 use common\modules\rubrication\models\TaxOption; 8 use common\modules\rubrication\models\TaxOption;
8 use Yii; 9 use Yii;
@@ -53,6 +54,9 @@ class Product extends \yii\db\ActiveRecord @@ -53,6 +54,9 @@ class Product extends \yii\db\ActiveRecord
53 ] 54 ]
54 ], 55 ],
55 [ 56 [
  57 + 'class' =>FilterBehavior::className(),
  58 + ],
  59 + [
56 'class' => Slug::className(), 60 'class' => Slug::className(),
57 'in_attribute' => 'name', 61 'in_attribute' => 'name',
58 'out_attribute' => 'alias', 62 'out_attribute' => 'alias',
@@ -218,6 +222,10 @@ class Product extends \yii\db\ActiveRecord @@ -218,6 +222,10 @@ class Product extends \yii\db\ActiveRecord
218 return $this->hasMany(Category::className(), ['category_id' => 'category_id'])->viaTable('product_category', ['product_id' => 'product_id']); 222 return $this->hasMany(Category::className(), ['category_id' => 'category_id'])->viaTable('product_category', ['product_id' => 'product_id']);
219 // return $this->getRelations('product_categories'); 223 // return $this->getRelations('product_categories');
220 } 224 }
  225 + public function getCategoriesWithName() {
  226 + return $this->hasMany(Category::className(), ['category_id' => 'category_id'])->viaTable('product_category', ['product_id' => 'product_id'])->joinWith('categoryNames');
  227 +// return $this->getRelations('product_categories');
  228 + }
221 229
222 public function getCategoriesNames() { 230 public function getCategoriesNames() {
223 $result = []; 231 $result = [];
@@ -227,6 +235,10 @@ class Product extends \yii\db\ActiveRecord @@ -227,6 +235,10 @@ class Product extends \yii\db\ActiveRecord
227 return $result; 235 return $result;
228 } 236 }
229 237
  238 + public function getVariantsWithFilters(){
  239 + return $this->hasMany(ProductVariant::className(), ['product_id' => 'product_id'])->with('filters');
  240 + }
  241 +
230 public function getCategory() { 242 public function getCategory() {
231 return $this->hasOne(Category::className(), ['category_id' => 'category_id'])->viaTable('product_category', ['product_id' => 'product_id']); 243 return $this->hasOne(Category::className(), ['category_id' => 'category_id'])->viaTable('product_category', ['product_id' => 'product_id']);
232 } 244 }
common/modules/product/models/ProductImage.php
@@ -54,7 +54,6 @@ class ProductImage extends \yii\db\ActiveRecord @@ -54,7 +54,6 @@ class ProductImage extends \yii\db\ActiveRecord
54 'product_id' => Yii::t('product', 'Product ID'), 54 'product_id' => Yii::t('product', 'Product ID'),
55 'product_variant_id' => Yii::t('product', 'Product Variant ID'), 55 'product_variant_id' => Yii::t('product', 'Product Variant ID'),
56 'product' => Yii::t('product', 'Product'), 56 'product' => Yii::t('product', 'Product'),
57 - 'product' => Yii::t('product', 'Product'),  
58 'product_variant' => Yii::t('product', 'Product Variant'), 57 'product_variant' => Yii::t('product', 'Product Variant'),
59 'image' => Yii::t('product', 'Image'), 58 'image' => Yii::t('product', 'Image'),
60 'alt' => Yii::t('product', 'Alt'), 59 'alt' => Yii::t('product', 'Alt'),
common/modules/product/models/ProductVariant.php
@@ -2,6 +2,7 @@ @@ -2,6 +2,7 @@
2 2
3 namespace common\modules\product\models; 3 namespace common\modules\product\models;
4 4
  5 +use common\modules\product\behaviors\FilterBehavior;
5 use common\modules\relation\relationBehavior; 6 use common\modules\relation\relationBehavior;
6 use common\modules\rubrication\models\TaxOption; 7 use common\modules\rubrication\models\TaxOption;
7 use Yii; 8 use Yii;
@@ -52,7 +53,7 @@ class ProductVariant extends \yii\db\ActiveRecord @@ -52,7 +53,7 @@ class ProductVariant extends \yii\db\ActiveRecord
52 'relations' => [ 53 'relations' => [
53 'product_variant_option' => 'entity1' // Product variant options 54 'product_variant_option' => 'entity1' // Product variant options
54 ] 55 ]
55 - ] 56 + ],
56 ]; 57 ];
57 } 58 }
58 59
@@ -141,6 +142,14 @@ class ProductVariant extends \yii\db\ActiveRecord @@ -141,6 +142,14 @@ class ProductVariant extends \yii\db\ActiveRecord
141 return is_null($this->stock) ? '∞' : ($this->stock > 0 ? Yii::t('product', 'Enable') : Yii::t('product', 'Disable')); // intval($this->stock); 142 return is_null($this->stock) ? '∞' : ($this->stock > 0 ? Yii::t('product', 'Enable') : Yii::t('product', 'Disable')); // intval($this->stock);
142 } 143 }
143 144
  145 + public function getFilters(){
  146 +
  147 + return $this->hasMany(TaxOption::className(), ['tax_option_id' => 'option_id'])
  148 + ->viaTable('product_variant_option',[ 'product_variant_id'=> 'product_variant_id'])
  149 + ->joinWith('taxGroup');
  150 + }
  151 +
  152 +
144 /** 153 /**
145 * @return \yii\db\ActiveQuery 154 * @return \yii\db\ActiveQuery
146 */ 155 */
common/modules/rubrication/controllers/TaxOptionController.php
@@ -76,10 +76,12 @@ class TaxOptionController extends Controller @@ -76,10 +76,12 @@ class TaxOptionController extends Controller
76 $valueModelName = $this->getValueModelName($group); 76 $valueModelName = $this->getValueModelName($group);
77 $valueModel = new $valueModelName; 77 $valueModel = new $valueModelName;
78 78
79 - if ($model->load(Yii::$app->request->post()) && $valueModel->load(Yii::$app->request->post())) { 79 + if ($model->load(Yii::$app->request->post())) {
  80 +
80 $model->save(); 81 $model->save();
81 82
82 $valueModel->tax_option_id = $model->tax_option_id; 83 $valueModel->tax_option_id = $model->tax_option_id;
  84 + $valueModel->value = $model->name;
83 $valueModel->save(); 85 $valueModel->save();
84 86
85 $model->default_value = $valueModel->tax_value_id; 87 $model->default_value = $valueModel->tax_value_id;
@@ -112,9 +114,10 @@ class TaxOptionController extends Controller @@ -112,9 +114,10 @@ class TaxOptionController extends Controller
112 $valueModelName = $this->getValueModelName($group); 114 $valueModelName = $this->getValueModelName($group);
113 $valueModel = $valueModelName::findOne($model->default_value); 115 $valueModel = $valueModelName::findOne($model->default_value);
114 116
115 - if ($model->load(Yii::$app->request->post()) && $valueModel->load(Yii::$app->request->post())) { 117 + if ($model->load(Yii::$app->request->post())) {
116 $model->save(); 118 $model->save();
117 $valueModel->tax_option_id = $model->tax_option_id; 119 $valueModel->tax_option_id = $model->tax_option_id;
  120 + $valueModel->value = $model->name;
118 $valueModel->save(); 121 $valueModel->save();
119 122
120 $model->default_value = $valueModel->tax_value_id; 123 $model->default_value = $valueModel->tax_value_id;
common/modules/rubrication/models/TaxOption.php
@@ -35,6 +35,8 @@ use yii\db\ActiveRecord; @@ -35,6 +35,8 @@ use yii\db\ActiveRecord;
35 class TaxOption extends \yii\db\ActiveRecord 35 class TaxOption extends \yii\db\ActiveRecord
36 { 36 {
37 public $_items_count; 37 public $_items_count;
  38 +
  39 +
38 /** 40 /**
39 * @inheritdoc 41 * @inheritdoc
40 */ 42 */
@@ -47,10 +49,11 @@ class TaxOption extends \yii\db\ActiveRecord @@ -47,10 +49,11 @@ class TaxOption extends \yii\db\ActiveRecord
47 ], 49 ],
48 'slug' => [ 50 'slug' => [
49 'class' => 'common\behaviors\Slug', 51 'class' => 'common\behaviors\Slug',
50 - 'in_attribute' => 'ValueRenderFlash', 52 + 'in_attribute' => 'name',
51 'out_attribute' => 'alias', 53 'out_attribute' => 'alias',
52 'translit' => true 54 'translit' => true
53 ], 55 ],
  56 +
54 ]; 57 ];
55 } 58 }
56 59
@@ -68,7 +71,7 @@ class TaxOption extends \yii\db\ActiveRecord @@ -68,7 +71,7 @@ class TaxOption extends \yii\db\ActiveRecord
68 public function rules() 71 public function rules()
69 { 72 {
70 return [ 73 return [
71 - [['tax_group_id'], 'required'], 74 + [['tax_group_id','name'], 'required'],
72 [['tax_group_id', 'parent_id', 'sort', 'default_value'], 'integer'], 75 [['tax_group_id', 'parent_id', 'sort', 'default_value'], 'integer'],
73 [['alias'], 'string', 'max' => 50], 76 [['alias'], 'string', 'max' => 50],
74 [['tax_group_id'], 'exist', 'skipOnError' => true, 'targetClass' => TaxGroup::className(), 'targetAttribute' => ['tax_group_id' => 'tax_group_id']], 77 [['tax_group_id'], 'exist', 'skipOnError' => true, 'targetClass' => TaxGroup::className(), 'targetAttribute' => ['tax_group_id' => 'tax_group_id']],
@@ -103,6 +106,7 @@ class TaxOption extends \yii\db\ActiveRecord @@ -103,6 +106,7 @@ class TaxOption extends \yii\db\ActiveRecord
103 return $this->hasMany(TaxEntityRelation::className(), ['tax_option_id' => 'tax_option_id'])->inverseOf('taxOption'); 106 return $this->hasMany(TaxEntityRelation::className(), ['tax_option_id' => 'tax_option_id'])->inverseOf('taxOption');
104 } 107 }
105 108
  109 +
106 /** 110 /**
107 * @return \yii\db\ActiveQuery 111 * @return \yii\db\ActiveQuery
108 */ 112 */
@@ -151,6 +155,21 @@ class TaxOption extends \yii\db\ActiveRecord @@ -151,6 +155,21 @@ class TaxOption extends \yii\db\ActiveRecord
151 return $this->hasMany(TaxOptionToOption::className(), ['tax_option2_id' => 'tax_option_id'])->inverseOf('taxOption2'); 155 return $this->hasMany(TaxOptionToOption::className(), ['tax_option2_id' => 'tax_option_id'])->inverseOf('taxOption2');
152 } 156 }
153 157
  158 +
  159 + public function getTaxValueString(){
  160 + return $this->hasOne(TaxValueString::className(), ['tax_option_id' => 'tax_option_id']);
  161 + }
  162 +
  163 + public function getName(){
  164 + return (!empty($this->taxValueString)) ? $this->taxValueString->value : '' ;
  165 + }
  166 +
  167 +
  168 +
  169 + public function setName($values){
  170 + $this->name = $values;
  171 + }
  172 +
154 /** 173 /**
155 */ 174 */
156 public function getValue() 175 public function getValue()
common/modules/rubrication/views/tax-option/_form.php
@@ -27,7 +27,9 @@ use common\modules\rubrication\helpers\RubricationHelper; @@ -27,7 +27,9 @@ use common\modules\rubrication\helpers\RubricationHelper;
27 <?= $form->field($model, 'tax_group_id')->hiddenInput()->label('') ?> 27 <?= $form->field($model, 'tax_group_id')->hiddenInput()->label('') ?>
28 <?php endif?> 28 <?php endif?>
29 29
30 - <?php require(dirname(__FILE__) .'/value/_fields_'. $group->module .'.php')?> 30 +
  31 + <?= $form->field($model, 'name')->textInput(['maxlength' => true]) ?>
  32 +<!-- --><?php //require(dirname(__FILE__) .'/value/_fields_'. $group->module .'.php')?>
31 33
32 <?= $form->field($model, 'alias')->textInput(['maxlength' => true]) ?> 34 <?= $form->field($model, 'alias')->textInput(['maxlength' => true]) ?>
33 35