Commit 21ce7afa7afd9888deef5a8e995c9c39efb51321

Authored by Alexey Boroda
1 parent 321cea72

-Fix when cannot unset all options from product or variant

-Fix when product have no options its variants don't display during filtering by variant's options
common/modules/product/controllers/ManageController.php
@@ -9,6 +9,7 @@ @@ -9,6 +9,7 @@
9 use Yii; 9 use Yii;
10 use common\modules\product\models\Product; 10 use common\modules\product\models\Product;
11 use common\modules\product\models\ProductSearch; 11 use common\modules\product\models\ProductSearch;
  12 + use yii\helpers\VarDumper;
12 use yii\web\Controller; 13 use yii\web\Controller;
13 use yii\web\NotFoundHttpException; 14 use yii\web\NotFoundHttpException;
14 use yii\filters\VerbFilter; 15 use yii\filters\VerbFilter;
@@ -125,7 +126,9 @@ @@ -125,7 +126,9 @@
125 public function actionUpdate($id) 126 public function actionUpdate($id)
126 { 127 {
127 $model = $this->findModel($id); 128 $model = $this->findModel($id);
  129 +
128 if($model->load(Yii::$app->request->post())) { 130 if($model->load(Yii::$app->request->post())) {
  131 + $model->unlinkAll('options',true);
129 $model->imagesUpload = UploadedFile::getInstances($model, 'imagesUpload'); 132 $model->imagesUpload = UploadedFile::getInstances($model, 'imagesUpload');
130 if($model->save()) { 133 if($model->save()) {
131 if(!empty( $model->imagesUpload ) && ( ( $images = $model->imagesUpload() ) !== false )) { 134 if(!empty( $model->imagesUpload ) && ( ( $images = $model->imagesUpload() ) !== false )) {
common/modules/product/controllers/VariantController.php
@@ -182,6 +182,7 @@ class VariantController extends Controller @@ -182,6 +182,7 @@ class VariantController extends Controller
182 { 182 {
183 $model = $this->findModel($id); 183 $model = $this->findModel($id);
184 if ($model->load(Yii::$app->request->post())) { 184 if ($model->load(Yii::$app->request->post())) {
  185 + $model->unlinkAll('options',true);
185 186
186 if ($model->save()) { 187 if ($model->save()) {
187 188
common/modules/product/helpers/ProductHelper.php
@@ -251,17 +251,21 @@ @@ -251,17 +251,21 @@
251 Product::tableName() . '.product_id IN ( 251 Product::tableName() . '.product_id IN (
252 SELECT DISTINCT products 252 SELECT DISTINCT products
253 FROM ( 253 FROM (
254 - SELECT product_id AS products 254 + SELECT product_id AS products FROM product
  255 + WHERE
  256 + product_id IN (
  257 + SELECT product_id
255 FROM product_option 258 FROM product_option
256 INNER JOIN tax_option ON tax_option.tax_option_id = product_option.option_id 259 INNER JOIN tax_option ON tax_option.tax_option_id = product_option.option_id
257 INNER JOIN tax_group ON tax_group.tax_group_id = tax_option.tax_group_id 260 INNER JOIN tax_group ON tax_group.tax_group_id = tax_option.tax_group_id
258 - WHERE tax_group.alias LIKE \''. $key .'\' AND tax_option.alias IN (\'' . implode('\',\'', $param) . '\') OR product_id IN (  
259 - (SELECT product_id AS products 261 + WHERE tax_group.alias LIKE \''. $key .'\' AND tax_option.alias IN (\'' . implode('\',\'', $param) . '\'))
  262 + OR product_id IN (
  263 + SELECT product_id
260 FROM product_variant_option 264 FROM product_variant_option
261 INNER JOIN product_variant ON product_variant_option.product_variant_id = product_variant.product_variant_id 265 INNER JOIN product_variant ON product_variant_option.product_variant_id = product_variant.product_variant_id
262 INNER JOIN tax_option ON tax_option.tax_option_id = product_variant_option.option_id 266 INNER JOIN tax_option ON tax_option.tax_option_id = product_variant_option.option_id
263 INNER JOIN tax_group ON tax_group.tax_group_id = tax_option.tax_group_id 267 INNER JOIN tax_group ON tax_group.tax_group_id = tax_option.tax_group_id
264 - WHERE tax_group.alias LIKE \''. $key .'\' AND tax_option.alias IN (\'' . implode('\',\'', $param) . '\')) 268 + WHERE tax_group.alias LIKE \''. $key .'\' AND tax_option.alias IN (\'' . implode('\',\'', $param) . '\')
265 ) 269 )
266 ) AS table_name 270 ) AS table_name
267 )' 271 )'
common/modules/product/models/Product.php
@@ -13,7 +13,8 @@ @@ -13,7 +13,8 @@
13 use yii\db\ActiveRecord; 13 use yii\db\ActiveRecord;
14 use yii\helpers\ArrayHelper; 14 use yii\helpers\ArrayHelper;
15 use common\behaviors\DefaultVariantBehavior; 15 use common\behaviors\DefaultVariantBehavior;
16 - 16 + use yii\helpers\VarDumper;
  17 +
17 /** 18 /**
18 * This is the model class for table "{{%product}}". 19 * This is the model class for table "{{%product}}".
19 * @property string $name 20 * @property string $name
@@ -388,51 +389,7 @@ @@ -388,51 +389,7 @@
388 ->sum('quantity'); 389 ->sum('quantity');
389 } 390 }
390 391
391 -// public function afterSave($insert, $changedAttributes)  
392 -// {  
393 -// parent::afterSave($insert, $changedAttributes);  
394 -//  
395 -// $this->unlinkAll('categories', true);  
396 -// $this->unlinkAll('options', true);  
397 -//  
398 -// if($this->_categories) {  
399 -// $categories = Category::findAll($this->_categories);  
400 -// foreach($categories as $category) {  
401 -// $this->link('categories', $category);  
402 -// }  
403 -// }  
404 -// $options = TaxOption::findAll($this->_options);  
405 -//  
406 -// foreach($options as $option) {  
407 -// $this->link('options', $option);  
408 -// }  
409 -//  
410 -//  
411 -// if(!empty( $this->_variants )) {  
412 -// $todel = [];  
413 -// foreach($this->variants ? : [] as $_variant) {  
414 -// $todel[ $_variant->product_variant_id ] = $_variant->product_variant_id;  
415 -// }  
416 -// foreach($this->_variants as $_variant) {  
417 -// if(!is_array($_variant)) {  
418 -// return;  
419 -// }  
420 -// if(!empty( $_variant[ 'product_variant_id' ] )) {  
421 -// unset( $todel[ $_variant[ 'product_variant_id' ] ] );  
422 -// $model = ProductVariant::findOne($_variant[ 'product_variant_id' ]);  
423 -// } else {  
424 -// $model = new ProductVariant();  
425 -// }  
426 -// $_variant[ 'product_id' ] = $this->product_id;  
427 -// $model->load([ 'ProductVariant' => $_variant ]);  
428 -// $model->product_id = $this->product_id;  
429 -// $model->save();  
430 -// }  
431 -// if(!empty( $todel )) {  
432 -// ProductVariant::deleteAll([ 'product_variant_id' => $todel ]);  
433 -// }  
434 -// }  
435 -// } 392 +
436 public function afterSave($insert, $changedAttributes) 393 public function afterSave($insert, $changedAttributes)
437 { 394 {
438 parent::afterSave($insert, $changedAttributes); 395 parent::afterSave($insert, $changedAttributes);
@@ -446,13 +403,18 @@ @@ -446,13 +403,18 @@
446 } 403 }
447 } 404 }
448 405
449 - if(!empty($this->options)){  
450 - $options = TaxOption::findAll($this->options);  
451 - $this->unlinkAll('options',true); 406 +
  407 + $options = TaxOption::findAll($this->options);
  408 +// VarDumper::dump($this->options, 10, true);
  409 +// die();
  410 + $this->unlinkAll('options',true);
  411 + if(is_array($options)){
452 foreach($options as $option){ 412 foreach($options as $option){
453 $this->link('options', $option); 413 $this->link('options', $option);
454 } 414 }
455 } 415 }
  416 +
  417 +
456 418
457 419
458 if (!empty($this->_variants)) { 420 if (!empty($this->_variants)) {
frontend/controllers/CatalogController.php
@@ -111,7 +111,7 @@ class CatalogController extends \yii\web\Controller @@ -111,7 +111,7 @@ class CatalogController extends \yii\web\Controller
111 $productModel = new ProductFrontendSearch(); 111 $productModel = new ProductFrontendSearch();
112 //$productQuery = $productModel->getSearchQuery($category, $params); 112 //$productQuery = $productModel->getSearchQuery($category, $params);
113 $productProvider = $productModel->search($category, $params); 113 $productProvider = $productModel->search($category, $params);
114 - 114 +
115 $brandModel = new BrandSearch(); 115 $brandModel = new BrandSearch();
116 $brands = $brandModel->getBrands($category, $params) 116 $brands = $brandModel->getBrands($category, $params)
117 ->all(); 117 ->all();
frontend/models/ProductFrontendSearch.php
@@ -98,6 +98,7 @@ class ProductFrontendSearch extends Product { @@ -98,6 +98,7 @@ class ProductFrontendSearch extends Product {
98 /** @var ActiveQuery $query */ 98 /** @var ActiveQuery $query */
99 // $query = $category->getRelations('product_categories'); 99 // $query = $category->getRelations('product_categories');
100 $query = $category->getBaccaraProducts(); 100 $query = $category->getBaccaraProducts();
  101 +
101 } else { 102 } else {
102 $query = Product::find(); 103 $query = Product::find();
103 } 104 }