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 9 use Yii;
10 10 use common\modules\product\models\Product;
11 11 use common\modules\product\models\ProductSearch;
  12 + use yii\helpers\VarDumper;
12 13 use yii\web\Controller;
13 14 use yii\web\NotFoundHttpException;
14 15 use yii\filters\VerbFilter;
... ... @@ -125,7 +126,9 @@
125 126 public function actionUpdate($id)
126 127 {
127 128 $model = $this->findModel($id);
  129 +
128 130 if($model->load(Yii::$app->request->post())) {
  131 + $model->unlinkAll('options',true);
129 132 $model->imagesUpload = UploadedFile::getInstances($model, 'imagesUpload');
130 133 if($model->save()) {
131 134 if(!empty( $model->imagesUpload ) && ( ( $images = $model->imagesUpload() ) !== false )) {
... ...
common/modules/product/controllers/VariantController.php
... ... @@ -182,6 +182,7 @@ class VariantController extends Controller
182 182 {
183 183 $model = $this->findModel($id);
184 184 if ($model->load(Yii::$app->request->post())) {
  185 + $model->unlinkAll('options',true);
185 186  
186 187 if ($model->save()) {
187 188  
... ...
common/modules/product/helpers/ProductHelper.php
... ... @@ -251,17 +251,21 @@
251 251 Product::tableName() . '.product_id IN (
252 252 SELECT DISTINCT products
253 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 258 FROM product_option
256 259 INNER JOIN tax_option ON tax_option.tax_option_id = product_option.option_id
257 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 264 FROM product_variant_option
261 265 INNER JOIN product_variant ON product_variant_option.product_variant_id = product_variant.product_variant_id
262 266 INNER JOIN tax_option ON tax_option.tax_option_id = product_variant_option.option_id
263 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 270 ) AS table_name
267 271 )'
... ...
common/modules/product/models/Product.php
... ... @@ -13,7 +13,8 @@
13 13 use yii\db\ActiveRecord;
14 14 use yii\helpers\ArrayHelper;
15 15 use common\behaviors\DefaultVariantBehavior;
16   -
  16 + use yii\helpers\VarDumper;
  17 +
17 18 /**
18 19 * This is the model class for table "{{%product}}".
19 20 * @property string $name
... ... @@ -388,51 +389,7 @@
388 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 393 public function afterSave($insert, $changedAttributes)
437 394 {
438 395 parent::afterSave($insert, $changedAttributes);
... ... @@ -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 412 foreach($options as $option){
453 413 $this->link('options', $option);
454 414 }
455 415 }
  416 +
  417 +
456 418  
457 419  
458 420 if (!empty($this->_variants)) {
... ...
frontend/controllers/CatalogController.php
... ... @@ -111,7 +111,7 @@ class CatalogController extends \yii\web\Controller
111 111 $productModel = new ProductFrontendSearch();
112 112 //$productQuery = $productModel->getSearchQuery($category, $params);
113 113 $productProvider = $productModel->search($category, $params);
114   -
  114 +
115 115 $brandModel = new BrandSearch();
116 116 $brands = $brandModel->getBrands($category, $params)
117 117 ->all();
... ...
frontend/models/ProductFrontendSearch.php
... ... @@ -98,6 +98,7 @@ class ProductFrontendSearch extends Product {
98 98 /** @var ActiveQuery $query */
99 99 // $query = $category->getRelations('product_categories');
100 100 $query = $category->getBaccaraProducts();
  101 +
101 102 } else {
102 103 $query = Product::find();
103 104 }
... ...