Commit 00731fef3c07a8c765ce6cda1587277881622f1f

Authored by Yarik
1 parent 8940d2f7

Before vitex test

common/modules/product/controllers/ManageController.php
@@ -61,8 +61,17 @@ @@ -61,8 +61,17 @@
61 */ 61 */
62 public function actionView($id) 62 public function actionView($id)
63 { 63 {
  64 + $model = $this->findModel($id);
  65 + $categories = $model->getCategories()
  66 + ->with('lang')
  67 + ->all();
  68 + $variants = $model->getVariants()
  69 + ->with('lang')
  70 + ->all();
64 return $this->render('view', [ 71 return $this->render('view', [
65 - 'model' => $this->findModel($id), 72 + 'model' => $this->findModel($id),
  73 + 'categories' => $categories,
  74 + 'variants' => $variants,
66 ]); 75 ]);
67 } 76 }
68 77
@@ -257,7 +266,6 @@ @@ -257,7 +266,6 @@
257 'method' => $model->type, 266 'method' => $model->type,
258 'target' => $target, 267 'target' => $target,
259 ]); 268 ]);
260 - // $model->$method();  
261 } else { 269 } else {
262 $model->errors[] = 'File can not be upload or other error'; 270 $model->errors[] = 'File can not be upload or other error';
263 } 271 }
@@ -318,12 +326,6 @@ @@ -318,12 +326,6 @@
318 return $this->render('export', [ 326 return $this->render('export', [
319 'model' => $model, 327 'model' => $model,
320 ]); 328 ]);
321 - // $model = new Export();  
322 - // if(( $file = $model->process(Yii::getAlias('@uploadDir')) )) {  
323 - // return Yii::$app->response->sendFile($file)  
324 - // ->send();  
325 - // }  
326 - // throw new NotFoundHttpException('Error');  
327 } 329 }
328 330
329 /** 331 /**
@@ -337,7 +339,11 @@ @@ -337,7 +339,11 @@
337 */ 339 */
338 protected function findModel($id) 340 protected function findModel($id)
339 { 341 {
340 - if(( $model = Product::findOne($id) ) !== NULL) { 342 + if(( $model = Product::find()
  343 + ->where([ 'product_id' => $id ])
  344 + ->with('lang')
  345 + ->one() ) !== NULL
  346 + ) {
341 return $model; 347 return $model;
342 } else { 348 } else {
343 throw new NotFoundHttpException('The requested page does not exist.'); 349 throw new NotFoundHttpException('The requested page does not exist.');
common/modules/product/models/ProductSearch.php
@@ -17,7 +17,9 @@ @@ -17,7 +17,9 @@
17 17
18 public $category_id; 18 public $category_id;
19 19
20 - public $variant_sku; 20 + public $product_name;
  21 +
  22 + public $variant_count;
21 23
22 public function behaviors() 24 public function behaviors()
23 { 25 {
@@ -35,7 +37,9 @@ @@ -35,7 +37,9 @@
35 { 37 {
36 return [ 38 return [
37 [ 39 [
38 - [ 'variant_sku' ], 40 + [
  41 + 'product_name',
  42 + ],
39 'safe', 43 'safe',
40 ], 44 ],
41 [ 45 [
@@ -43,7 +47,6 @@ @@ -43,7 +47,6 @@
43 'brand_id', 47 'brand_id',
44 'product_id', 48 'product_id',
45 'category_id', 49 'category_id',
46 - 'brand_id',  
47 ], 50 ],
48 'integer', 51 'integer',
49 ], 52 ],
@@ -58,6 +61,18 @@ @@ -58,6 +61,18 @@
58 ]; 61 ];
59 } 62 }
60 63
  64 + public function attributeLabels()
  65 + {
  66 + $labels = parent::attributeLabels();
  67 + $new_labels = [
  68 + 'category_id' => 'Category ID',
  69 + 'brand_id' => 'Brand ID',
  70 + 'product_name' => 'Product name',
  71 + 'variant_count' => 'Variant count',
  72 + ];
  73 + return array_merge($labels, $new_labels);
  74 + }
  75 +
61 /** 76 /**
62 * @inheritdoc 77 * @inheritdoc
63 */ 78 */
@@ -79,9 +94,14 @@ @@ -79,9 +94,14 @@
79 94
80 $query = Product::find(); 95 $query = Product::find();
81 96
  97 + $query->select([
  98 + 'product.*',
  99 + 'COUNT(product_variant.product_variant_id) as count',
  100 + ]);
  101 +
82 $query->joinWith([ 102 $query->joinWith([
83 'categories', 103 'categories',
84 - /*'variant'*/ 104 + 'lang',
85 ]) 105 ])
86 ->joinWith([ 106 ->joinWith([
87 'brand' => function($query) { 107 'brand' => function($query) {
@@ -90,9 +110,14 @@ @@ -90,9 +110,14 @@
90 */ 110 */
91 $query->joinWith('lang'); 111 $query->joinWith('lang');
92 }, 112 },
93 - ]); 113 + ])
  114 + ->joinWith('variants');
94 115
95 - $query->groupBy([ 'product.product_id', 'brand_lang.name' ]); 116 + $query->groupBy([
  117 + 'product.product_id',
  118 + 'brand_lang.name',
  119 + 'product_lang.name',
  120 + ]);
96 121
97 $dataProvider = new ActiveDataProvider([ 122 $dataProvider = new ActiveDataProvider([
98 'query' => $query, 123 'query' => $query,
@@ -104,11 +129,19 @@ @@ -104,11 +129,19 @@
104 129
105 $dataProvider->setSort([ 130 $dataProvider->setSort([
106 'attributes' => [ 131 'attributes' => [
107 - 'brand_id' => [ 132 + 'product_id',
  133 + 'product_name' => [
  134 + 'asc' => [ 'product_lang.name' => SORT_ASC ],
  135 + 'desc' => [ 'product_lang.name' => SORT_DESC ],
  136 + ],
  137 + 'brand_id' => [
108 'asc' => [ 'brand_lang.name' => SORT_ASC ], 138 'asc' => [ 'brand_lang.name' => SORT_ASC ],
109 'desc' => [ 'brand_lang.name' => SORT_DESC ], 139 'desc' => [ 'brand_lang.name' => SORT_DESC ],
110 'default' => SORT_DESC, 140 'default' => SORT_DESC,
111 - 'label' => 'Brand name', 141 + ],
  142 + 'variant_count' => [
  143 + 'asc' => [ 'count' => SORT_ASC ],
  144 + 'desc' => [ 'count' => SORT_DESC ],
112 ], 145 ],
113 ], 146 ],
114 ]); 147 ]);
@@ -133,9 +166,11 @@ @@ -133,9 +166,11 @@
133 'product.product_id' => $this->product_id, 166 'product.product_id' => $this->product_id,
134 'product_category.category_id' => $this->category_id, 167 'product_category.category_id' => $this->category_id,
135 ]); 168 ]);
136 -  
137 - // $query->andFilterWhere(['ilike', 'brand.name', $this->brand_name]);  
138 - // $query->andFilterWhere(['ilike', 'product_variant.sku', $this->variant_sku]); 169 + $query->andFilterWhere([
  170 + 'like',
  171 + 'product_lang.name',
  172 + $this->product_name,
  173 + ]);
139 174
140 return $dataProvider; 175 return $dataProvider;
141 } 176 }
common/modules/product/views/manage/index.php
@@ -3,16 +3,20 @@ @@ -3,16 +3,20 @@
3 use common\modules\product\models\Brand; 3 use common\modules\product\models\Brand;
4 use common\modules\product\models\Category; 4 use common\modules\product\models\Category;
5 use common\modules\product\models\Product; 5 use common\modules\product\models\Product;
  6 + use common\modules\product\models\ProductSearch;
  7 + use yii\data\ActiveDataProvider;
6 use yii\helpers\Html; 8 use yii\helpers\Html;
7 use yii\grid\GridView; 9 use yii\grid\GridView;
8 use kartik\select2\Select2; 10 use kartik\select2\Select2;
9 use common\components\artboxtree\ArtboxTreeHelper; 11 use common\components\artboxtree\ArtboxTreeHelper;
10 use common\modules\product\helpers\ProductHelper; 12 use common\modules\product\helpers\ProductHelper;
  13 + use yii\web\View;
11 14
12 - /* @var $this yii\web\View */  
13 - /* @var $searchModel common\modules\product\models\ProductSearch */  
14 - /* @var $dataProvider yii\data\ActiveDataProvider */  
15 - 15 + /**
  16 + * @var View $this
  17 + * @var ProductSearch $searchModel
  18 + * @var ActiveDataProvider $dataProvider
  19 + */
16 $this->title = Yii::t('product', 'Products'); 20 $this->title = Yii::t('product', 'Products');
17 $this->params[ 'breadcrumbs' ][] = $this->title; 21 $this->params[ 'breadcrumbs' ][] = $this->title;
18 ?> 22 ?>
@@ -29,13 +33,25 @@ @@ -29,13 +33,25 @@
29 'columns' => [ 33 'columns' => [
30 'product_id', 34 'product_id',
31 [ 35 [
32 - 'label' => Yii::t('product', 'Brand'), 36 + 'attribute' => 'product_name',
  37 + 'value' => 'lang.name',
  38 + ],
  39 + [
  40 + 'label' => Yii::t('product', 'Brand'),
33 'attribute' => 'brand_id', 41 'attribute' => 'brand_id',
34 - 'value' => 'brand.lang.name',  
35 - 'filter' => Select2::widget([ 42 + 'value' => 'brand.lang.name',
  43 + 'filter' => Select2::widget([
36 'model' => $searchModel, 44 'model' => $searchModel,
37 'attribute' => 'brand_id', 45 'attribute' => 'brand_id',
38 - 'data' => Brand::find()->joinWith('lang')->select(['brand_lang.name', 'brand.brand_id'])->asArray()->indexBy('brand_id')->column(), 46 + 'data' => Brand::find()
  47 + ->joinWith('lang')
  48 + ->select([
  49 + 'brand_lang.name',
  50 + 'brand.brand_id',
  51 + ])
  52 + ->asArray()
  53 + ->indexBy('brand_id')
  54 + ->column(),
39 'language' => 'ru', 55 'language' => 'ru',
40 'options' => [ 56 'options' => [
41 'placeholder' => Yii::t('product', 'Select brand'), 57 'placeholder' => Yii::t('product', 'Select brand'),
@@ -54,7 +70,9 @@ @@ -54,7 +70,9 @@
54 * @var Product $model 70 * @var Product $model
55 */ 71 */
56 $categories = []; 72 $categories = [];
57 - foreach($model->getCategories()->with('lang')->all() as $category) { 73 + foreach($model->getCategories()
  74 + ->with('lang')
  75 + ->all() as $category) {
58 /** 76 /**
59 * @var Category $category 77 * @var Category $category
60 */ 78 */
@@ -76,18 +94,15 @@ @@ -76,18 +94,15 @@
76 ], 94 ],
77 ]), 95 ]),
78 ], 96 ],
79 - // [  
80 - // 'label' => Yii::t('product', 'SKU'),  
81 - // 'attribute' => 'variant_sku',  
82 - // 'value' => 'variant.sku',  
83 - // ],  
84 - // 'variant.price',  
85 - // 'variant.price_old',  
86 - // [  
87 - // 'label' => Yii::t('product', 'Stock'),  
88 - // 'attribute' => 'variant_stock',  
89 - // 'value' => 'variant.stock_caption',  
90 - // ], 97 + [
  98 + 'attribute' => 'variant_count',
  99 + 'value' => function($model) {
  100 + /**
  101 + * @var Product $model
  102 + */
  103 + return count($model->variants);
  104 + },
  105 + ],
91 [ 106 [
92 'class' => 'yii\grid\ActionColumn', 107 'class' => 'yii\grid\ActionColumn',
93 'template' => '{items} {view} |{is_top} {is_new} {akciya} | {update} {delete}', 108 'template' => '{items} {view} |{is_top} {is_new} {akciya} | {update} {delete}',
@@ -158,6 +173,8 @@ @@ -158,6 +173,8 @@
158 'id' => $model->product_id, 173 'id' => $model->product_id,
159 ]); 174 ]);
160 break; 175 break;
  176 + default:
  177 + return '';
161 } 178 }
162 }, 179 },
163 ], 180 ],
common/modules/product/views/manage/view.php
1 <?php 1 <?php
2 -  
3 -use yii\helpers\Html;  
4 -use yii\widgets\DetailView;  
5 -  
6 -/* @var $this yii\web\View */  
7 -/* @var $model common\modules\product\models\Product */  
8 -  
9 -$this->title = $model->product_id;  
10 -$this->params['breadcrumbs'][] = ['label' => Yii::t('product', 'Products'), 'url' => ['index']];  
11 -$this->params['breadcrumbs'][] = $this->title; 2 +
  3 + use common\modules\product\models\Category;
  4 + use common\modules\product\models\Product;
  5 + use yii\helpers\ArrayHelper;
  6 + use yii\helpers\Html;
  7 + use yii\web\View;
  8 + use yii\widgets\DetailView;
  9 +
  10 + /**
  11 + * @var View $this
  12 + * @var Product $model
  13 + * @var Category[] $categories
  14 + */
  15 +
  16 + $this->title = $model->lang->name;
  17 + $this->params[ 'breadcrumbs' ][] = [
  18 + 'label' => Yii::t('product', 'Products'),
  19 + 'url' => [ 'index' ],
  20 + ];
  21 + $this->params[ 'breadcrumbs' ][] = $this->title;
12 ?> 22 ?>
13 <div class="product-view"> 23 <div class="product-view">
14 - 24 +
15 <h1><?= Html::encode($this->title) ?></h1> 25 <h1><?= Html::encode($this->title) ?></h1>
16 - 26 +
17 <p> 27 <p>
18 - <?= Html::a(Yii::t('product', 'Update'), ['update', 'id' => $model->product_id], ['class' => 'btn btn-primary']) ?>  
19 - <?= Html::a(Yii::t('product', 'Delete'), ['delete', 'id' => $model->product_id], [ 28 + <?= Html::a(Yii::t('product', 'Update'), [
  29 + 'update',
  30 + 'id' => $model->product_id,
  31 + ], [ 'class' => 'btn btn-primary' ]) ?>
  32 + <?= Html::a(Yii::t('product', 'Delete'), [
  33 + 'delete',
  34 + 'id' => $model->product_id,
  35 + ], [
20 'class' => 'btn btn-danger', 36 'class' => 'btn btn-danger',
21 - 'data' => [ 37 + 'data' => [
22 'confirm' => Yii::t('product', 'Are you sure you want to delete this item?'), 38 'confirm' => Yii::t('product', 'Are you sure you want to delete this item?'),
23 - 'method' => 'post', 39 + 'method' => 'post',
24 ], 40 ],
25 ]) ?> 41 ]) ?>
26 </p> 42 </p>
27 - 43 +
28 <?= DetailView::widget([ 44 <?= DetailView::widget([
29 - 'model' => $model, 45 + 'model' => $model,
30 'attributes' => [ 46 'attributes' => [
31 'product_id', 47 'product_id',
32 -// 'brand.name',  
33 -// 'category.name',  
34 - 'image.imageUrl:image' 48 + 'brand.lang.name',
  49 + [
  50 + 'label' => \Yii::t('app', 'Categories'),
  51 + 'value' => implode('<br>', ArrayHelper::getColumn($categories, 'lang.name')),
  52 + 'format' => 'html',
  53 + ],
  54 + [
  55 + 'attribute' => 'is_top',
  56 + 'value' => $model->is_top ? Html::tag('span', '', [ 'class' => 'glyphicon glyphicon-ok' ]) : Html::tag('span', '', [ 'class' => 'glyphicon glyphicon-remove' ]),
  57 + 'format' => 'html',
  58 + ],
  59 + [
  60 + 'attribute' => 'is_new',
  61 + 'value' => $model->is_new ? Html::tag('span', '', [ 'class' => 'glyphicon glyphicon-ok' ]) : Html::tag('span', '', [ 'class' => 'glyphicon glyphicon-remove' ]),
  62 + 'format' => 'html',
  63 + ],
  64 + [
  65 + 'attribute' => 'akciya',
  66 + 'value' => $model->akciya ? Html::tag('span', '', [ 'class' => 'glyphicon glyphicon-ok' ]) : Html::tag('span', '', [ 'class' => 'glyphicon glyphicon-remove' ]),
  67 + 'format' => 'html',
  68 + ],
  69 + [
  70 + 'attribute' => 'video',
  71 + 'format' => 'html',
  72 + ],
  73 + 'image.imageUrl:image',
35 ], 74 ],
36 ]) ?> 75 ]) ?>
37 76