Commit d48d8bc0ba7c3135780371616275c602541a3236

Authored by Karnovsky A
1 parent 1e55b4b8

-

common/modules/product/helpers/ProductHelper.php
... ... @@ -5,6 +5,7 @@ namespace common\modules\product\helpers;
5 5 use common\modules\product\models\Brand;
6 6 use common\modules\product\models\Category;
7 7 use common\modules\product\models\Product;
  8 +use common\modules\product\models\ProductVariant;
8 9 use yii\base\Object;
9 10 use Yii;
10 11  
... ... @@ -69,7 +70,8 @@ class ProductHelper extends Object {
69 70 public static function getLastProducts($as_object = false) {
70 71 $last_products = Yii::$app->session->get('last_products', []);
71 72 if ($as_object) {
72   - $last_products = array_reverse(Product::find()->where(['product_id' => $last_products])->all());
  73 + $last_products = array_reverse(Product::find()->where([Product::tableName() .'.product_id' => $last_products])->all());
  74 +// $last_products = array_reverse(Product::find()->joinWith('variants')->where([Product::tableName() .'.product_id' => $last_products])->andWhere(['!=', ProductVariant::tableName() .'.stock', 0])->all());
73 75 }
74 76 return $last_products;
75 77 }
... ... @@ -86,6 +88,6 @@ class ProductHelper extends Object {
86 88 $data = ['akciya' => true];
87 89 break;
88 90 }
89   - return Product::find()->where($data)->limit($count)/*->orderBy($sort)*/->all();
  91 + return Product::find()->joinWith('variants')->where($data)->andWhere(['!=', ProductVariant::tableName() .'.stock', 0])->limit($count)/*->orderBy($sort)*/->all();
90 92 }
91 93 }
92 94 \ No newline at end of file
... ...
common/modules/product/models/Category.php
... ... @@ -134,8 +134,11 @@ class Category extends \yii\db\ActiveRecord
134 134 }
135 135  
136 136 public function getProducts() {
137   -// return $this->hasMany(Product::className(), ['product_id' => 'product_id'])->viaTable('product_category', ['category_id' => 'category_id']);
138   - return $this->getRelations('product_categories');
  137 + return $this->hasMany(Product::className(), ['product_id' => 'product_id'])
  138 + ->viaTable('product_category', ['category_id' => 'category_id'])
  139 + ->with(['variants'])
  140 + ->andOnCondition(['!=', ProductVariant::tableName() .'.stock', 0]);
  141 +// return $this->getRelations('product_categories');
139 142 }
140 143  
141 144 /**
... ...
common/modules/product/models/Product.php
... ... @@ -144,14 +144,24 @@ class Product extends \yii\db\ActiveRecord
144 144 */
145 145 public function getVariant()
146 146 {
147   -// return ProductVariant::find()->filterWhere([ProductVariant::tableName() .'.product_id' => Product::tableName() .'.product_id'])->where('>', ProductVariant::tableName() .'.stock', 0);
148 147 return $this->hasOne(ProductVariant::className(), ['product_id' => 'product_id']);
149 148 }
150 149  
  150 + /**
  151 + * @return \yii\db\ActiveQuery
  152 + */
  153 + public function getEnabledVariant()
  154 + {
  155 + return $this->hasOne(ProductVariant::className(), ['product_id' => 'product_id'])->andOnCondition(['!=', ProductVariant::tableName() .'.stock', 0]);
  156 + }
151 157 public function getVariantPrice() {
152 158 return $this->variant->price;
153 159 }
154 160  
  161 + public function getEnabledVariantPrice() {
  162 + return $this->enabledVariant->price;
  163 + }
  164 +
155 165 /**
156 166 * @return \yii\db\ActiveQuery
157 167 */
... ... @@ -162,14 +172,7 @@ class Product extends \yii\db\ActiveRecord
162 172  
163 173 public function getEnabledVariants()
164 174 {
165   - /*$result = [];
166   - foreach ($this->variants as $variant) {
167   - if (is_null($variant->stock) || $variant->stock > 0) {
168   - $result[] = $variant;
169   - }
170   - }
171   - return $result;*/
172   - return $this->hasMany(ProductVariant::className(), ['product_id' => 'product_id'])->where(['!=', ProductVariant::tableName() .'.stock', 0]);
  175 + return $this->hasMany(ProductVariant::className(), ['product_id' => 'product_id'])->andOnCondition(['!=', ProductVariant::tableName() .'.stock', 0]);
173 176 }
174 177  
175 178 public function setVariants($variants) {
... ...
console/controllers/ImportController.php
... ... @@ -416,7 +416,7 @@ class ImportController extends Controller {
416 416  
417 417 while (($data = fgetcsv ($handle, 10000, ";")) !== FALSE) {
418 418 $j++;
419   -// if ($j > 10) {
  419 +// if ($j > 1) {
420 420 // return TRUE;
421 421 // }
422 422  
... ... @@ -429,14 +429,20 @@ class ImportController extends Controller {
429 429  
430 430 // данные строк
431 431 $modification_code = @$data[0];
432   - $price = floatval(@$data[1]);
433   - $price_promo = floatval(@$data[2]);
  432 + $_price = floatval(@$data[1]);
  433 + $_price_promo = floatval(@$data[2]);
434 434 $count = intval(@$data[3]);
435 435 $city_name = @$data[4];
436 436 $product_title = @$data[5];
437 437  
  438 + // @todo refactory this code
  439 + $price = $_price_promo > 0 ? $_price_promo : $_price;
  440 + $price_promo = $_price_promo > 0 ? $_price : $_price_promo;
  441 +
  442 + $modification_code = trim($modification_code);
  443 +
438 444 if (empty ($modification_code)) {
439   - CONTINUE;
  445 + continue;
440 446 }
441 447 // товары в пути
442 448 if (empty ($city_name))
... ... @@ -446,28 +452,28 @@ class ImportController extends Controller {
446 452 Yii::getAlias('@uploadFilePricesAway')
447 453 );
448 454  
449   -// $this->stdout("Товар $product_title в пути\n");
  455 + $this->stdout("~ Товар $product_title в пути\n");
450 456  
451   - CONTINUE;
  457 + continue;
452 458 }
453 459  
454   - if ( ($productVariant = ProductVariant::find()->filterWhere(['ilike', 'sku', trim($modification_code)])->one()) === null ) {
  460 + if ( ($productVariant = ProductVariant::find()->filterWhere(['sku' => $modification_code])->one()) === null ) {
455 461 // 'Нет даной модификации в базе';
456 462 $this->saveNotFoundRecord (
457 463 [$modification_code, $product_title],
458 464 Yii::getAlias('@uploadFilePricesNoVariant')
459 465 );
460 466  
461   -// $this->stdout("Для товара $product_title (#$modification_code) не найдено соотвествия\n");
  467 + $this->stdout("- Для товара $product_title (#$modification_code) не найдено соотвествия\n");
462 468  
463   - CONTINUE;
  469 + continue;
464 470 }
465 471  
466 472 $quantity = 0;
467 473  
468 474 // ===== Set stock ====
469 475 if ( $city_name ) {
470   - if ( ($stock = Stock::find()->filterWhere(['ilike', 'name', trim($city_name)])->one()) === null ) {
  476 + if ( ($stock = Stock::find()->filterWhere(['name' => trim($city_name)])->one()) === null ) {
471 477 // Create stock
472 478 $stock = new Stock();
473 479 $stock->name = trim($city_name);
... ... @@ -484,7 +490,7 @@ class ImportController extends Controller {
484 490  
485 491 $productVariant->save();
486 492  
487   -// $this->stdout("Товар $product_title успешно сохранен\n");
  493 + $this->stdout("+ Товар $product_title успешно сохранен\n");
488 494 }
489 495 fclose ($handle);
490 496  
... ...
frontend/controllers/CatalogController.php
... ... @@ -108,20 +108,6 @@ class CatalogController extends \yii\web\Controller
108 108  
109 109 if ( !empty($filter['options']) ) {
110 110 $params['options'] = $filter['options'];
111   - /*$optionQuery = TaxOption::find();
112   - $optionQuery->select('tax_option_id');
113   - $optionQuery->innerJoinWith('group');
114   - foreach ($filter['options'] as $option_key => $option_values) {
115   - $optionQuery->orWhere([
116   - 'tax_group_id' => $option_key,
117   - 'alias' => $filter['options']
118   - ]);
119   - }
120   - $options = ->where(['in', 'alias', $filter['options']])->all();
121   - $params['options'] = [];
122   - foreach ($options as $option) {
123   - $params['options'][] = $option->tax_option_id;
124   - }*/
125 111 }
126 112  
127 113 if ( !empty($filter['prices']) ) {
... ...
frontend/models/ProductFrontendSearch.php
... ... @@ -54,14 +54,10 @@ class ProductFrontendSearch extends Product {
54 54 } else {
55 55 $query = Product::find();
56 56 }
57   - $query->joinWith(['variant', 'brand', 'brand.brandName', 'category', 'category.categoryName']);
  57 + $query->joinWith(['variant', 'image', 'brand', 'brand.brandName', 'category', 'category.categoryName']);
58 58  
59 59 $query->groupBy('product.product_id');
60 60  
61   -// if (empty($_GET['sort']) || ($_GET['sort'] != 'price' && $_GET['sort'] != '-price')) {
62   -// $query->groupBy('product.product_id');
63   -// }
64   -
65 61 $dataProvider = new ActiveDataProvider([
66 62 'query' => $query,
67 63 'pagination' => [
... ...
frontend/views/catalog/product.php
... ... @@ -13,7 +13,7 @@ $this->title = $product->fullname;
13 13 //}
14 14 $this->params['breadcrumbs'][] = ['label' => 'Каталог', 'url' => ['catalog/category']];
15 15 $this->params['breadcrumbs'][] = ['label' => $product->category->categoryName->value, 'url' => ['catalog/category', 'category' => $product->category]];
16   -$this->params['breadcrumbs'][] = $product->fullname .' #'. $product->variant->sku;
  16 +$this->params['breadcrumbs'][] = $product->fullname .' #'. $product->enabledVariant->sku;
17 17  
18 18 $this->registerJs ('
19 19  
... ... @@ -96,8 +96,7 @@ $this->registerJs ("
96 96 <h1><?= $product->fullname ?></h1>
97 97 <div class="begin">Цветовые решения</div>
98 98 <ul class="product_mod">
99   - <?php foreach ($product->variants as $variant): ?>
100   - <?php if ($variant->quantity == 0) continue;?>
  99 + <?php foreach ($product->enabledVariants as $variant): ?>
101 100 <li>
102 101 <a id='m<?= $variant->product_variant_id ?>' href="#<?=$variant->product_variant_id ?>"
103 102 data-cost="<?= $variant->price ?>"
... ... @@ -166,7 +165,7 @@ $this-&gt;registerJs (&quot;
166 165 <div class="content">
167 166 <div class="pic">
168 167 <center>
169   - <a href="#" rel="shadowbox[gal]" id="picoriginal"><?= \common\components\artboximage\ArtboxImageHelper::getImage($product->variant->imageUrl, 'product_view',['id'=>'pic'])?></a>
  168 + <a href="#" rel="shadowbox[gal]" id="picoriginal"><?= \common\components\artboximage\ArtboxImageHelper::getImage($product->enabledVariant->imageUrl, 'product_view',['id'=>'pic'])?></a>
170 169 </center>
171 170 </div>
172 171 <ul class="product_colors">
... ...
frontend/views/catalog/product_item.php
... ... @@ -5,8 +5,8 @@ use yii\helpers\Url;
5 5 <li class="item">
6 6 <div class="boxitem">
7 7 <div class="pixbox">
8   - <a href="<?= Url::to(['catalog/product', 'product' => $product,'#' => 'm' .$product->variant->product_variant_id]) ?>">
9   - <?= \common\components\artboximage\ArtboxImageHelper::getImage($product->variant->imageUrl, 'list')?>
  8 + <a href="<?= Url::to(['catalog/product', 'product' => $product,'#' => 'm' .$product->enabledVariant->product_variant_id]) ?>">
  9 + <?= \common\components\artboximage\ArtboxImageHelper::getImage($product->enabledVariant->imageUrl, 'list')?>
10 10 </a>
11 11 </div>
12 12 <?php if(!empty($product->is_top) || !empty($product->is_new) || !empty($product->akciya)) :?>
... ... @@ -25,7 +25,7 @@ use yii\helpers\Url;
25 25 <a href="<?= Url::to([
26 26 'catalog/product',
27 27 'product' => $product,
28   - '#' => 'm' .$product->variant->product_variant_id])
  28 + '#' => 'm' .$product->enabledVariant->product_variant_id])
29 29 ?>"
30 30 class="name"><?= $product->fullname ?>
31 31 </a>
... ... @@ -35,12 +35,12 @@ use yii\helpers\Url;
35 35 echo '<div class="cost-block">';
36 36 echo '<p class="cost">';
37 37 // есть скидка
38   - if ($product->variant->price_old != 0 && $product->variant->price_old != $product->variant->price)
  38 + if ($product->enabledVariant->price_old != 0 && $product->enabledVariant->price_old != $product->enabledVariant->price)
39 39 {
40   - echo '<strike><span id=\'old_cost\'>'.$product->variant->price_old.'</span> грн.</strike>&nbsp;';
  40 + echo '<strike><span id=\'old_cost\'>'.$product->enabledVariant->price_old.'</span> грн.</strike>&nbsp;';
41 41 }
42 42  
43   - echo $product->variant->price.' <span>грн.</span></p>';
  43 + echo $product->enabledVariant->price.' <span>грн.</span></p>';
44 44  
45 45 echo '</div>';
46 46  
... ... @@ -49,13 +49,12 @@ use yii\helpers\Url;
49 49 <a href="<?= Url::to([
50 50 'catalog/product',
51 51 'product' => $product,
52   - '#' => 'm' .$product->variant->product_variant_id])
  52 + '#' => 'm' .$product->enabledVariant->product_variant_id])
53 53 ?>" class="link_buy">Купить</a>
54 54  
55 55 <div class="mycarousel">
56 56 <ul class="jcarousel jcarousel-skin-tango">
57 57 <?php foreach ($product->enabledVariants as $variant) : ?>
58   - <?php if ($variant->quantity == 0) continue;?>
59 58 <?php if (!empty($variant->image)) :?>
60 59 <li>
61 60 <a href="<?= Url::to([
... ...
frontend/views/site/index.php
... ... @@ -30,7 +30,7 @@ echo &#39;&lt;div class=&quot;home_banner_up&quot;&gt;&#39;;
30 30 echo '</div>'
31 31 ?>
32 32  
33   -<?= \frontend\widgets\Rubrics::widget(['wrapper' => 'rubrics', 'includes' => [136,137,138,139,140]])?>
  33 +<?= \frontend\widgets\Rubrics::widget(['wrapper' => 'rubrics', 'includes' => [130,131,132,133,134]])?>
34 34  
35 35 <?= \common\modules\product\widgets\specialProducts::widget(['type' => 'promo'])?>
36 36 <?= \common\modules\product\widgets\specialProducts::widget(['type' => 'new'])?>
... ...