Commit c130fad8e1f45575ea418e4d9f066af45901d3bd
1 parent
1ac35977
-Yml fix
Showing
3 changed files
with
122 additions
and
6 deletions
Show diff stats
controllers/StatisticsController.php
... | ... | @@ -2,15 +2,51 @@ |
2 | 2 | |
3 | 3 | namespace artweb\artbox\ecommerce\controllers; |
4 | 4 | |
5 | + use artweb\artbox\ecommerce\models\Label; | |
6 | + use artweb\artbox\ecommerce\models\Order; | |
7 | + use yii\db\Query; | |
8 | + use yii\helpers\ArrayHelper; | |
9 | + use yii\helpers\VarDumper; | |
5 | 10 | use yii\web\Controller; |
6 | 11 | |
7 | - /** | |
8 | - * BrandController implements the CRUD actions for Brand model. | |
9 | - */ | |
10 | 12 | class StatisticsController extends Controller |
11 | 13 | { |
12 | - public function actionIndex() | |
14 | + public function actionIndex($date_range = NULL, $label = NULL) | |
13 | 15 | { |
14 | - return $this->render('index'); | |
16 | + /** | |
17 | + * Get a dates range | |
18 | + */ | |
19 | + if (!empty($date_range)) { | |
20 | + $arr = []; | |
21 | + preg_match('@(.*)\s:\s(.*)@', $date_range, $arr); | |
22 | + $date_from = strtotime($arr[1]); | |
23 | + $date_to = strtotime($arr[2]); | |
24 | + } else { | |
25 | + $date_from = 0; | |
26 | + $date_to = 0; | |
27 | + } | |
28 | + | |
29 | + $labels = ArrayHelper::map( | |
30 | + Label::find() | |
31 | + ->joinWith('lang') | |
32 | + ->asArray() | |
33 | + ->all(), | |
34 | + 'id', | |
35 | + 'lang.title' | |
36 | + ); | |
37 | + | |
38 | + if (!empty($label)) { | |
39 | + $label = Label::findOne($label); | |
40 | + /** | |
41 | + * continue here!!! | |
42 | + */ | |
43 | + } | |
44 | + | |
45 | + return $this->render( | |
46 | + 'index', | |
47 | + [ | |
48 | + 'labels' => $labels, | |
49 | + ] | |
50 | + ); | |
15 | 51 | } |
16 | 52 | } | ... | ... |
models/Label.php
... | ... | @@ -5,6 +5,8 @@ |
5 | 5 | use artweb\artbox\language\behaviors\LanguageBehavior; |
6 | 6 | use yii\db\ActiveQuery; |
7 | 7 | use yii\db\ActiveRecord; |
8 | + use yii\db\Query; | |
9 | + use yii\helpers\VarDumper; | |
8 | 10 | use yii\web\Request; |
9 | 11 | |
10 | 12 | /** |
... | ... | @@ -62,4 +64,52 @@ |
62 | 64 | ], |
63 | 65 | ]; |
64 | 66 | } |
67 | + | |
68 | + public function getStatistics(int $dateFrom, int $dateTo) | |
69 | + { | |
70 | + | |
71 | + if ($dateTo != 0) { | |
72 | + $where = [ | |
73 | + 'between', | |
74 | + 'created_at', | |
75 | + $dateFrom, | |
76 | + $dateTo, | |
77 | + ]; | |
78 | + } else { | |
79 | + $where = []; | |
80 | + } | |
81 | + $query = ( new Query() )->select( | |
82 | + [ | |
83 | + 'sum' => 'SUM(total)', | |
84 | + 'count' => 'COUNT(*)', | |
85 | + 'unique' => ( new Query() )->select('COUNT(*)') | |
86 | + ->from('order') | |
87 | + ->leftJoin( | |
88 | + 'order_product', | |
89 | + '"order"."id"="order_product"."order_id"' | |
90 | + ) | |
91 | + ->where([ 'order.label' => $this->id ]) | |
92 | + ->andFilterWhere( | |
93 | + $where | |
94 | + ), | |
95 | + 'products' => ( new Query() )->select('SUM(count)') | |
96 | + ->from('order') | |
97 | + ->leftJoin( | |
98 | + 'order_product', | |
99 | + '"order"."id"="order_product"."order_id"' | |
100 | + ) | |
101 | + ->where([ 'order.label' => $this->id ]) | |
102 | + ->andFilterWhere( | |
103 | + $where | |
104 | + ), | |
105 | + ] | |
106 | + ) | |
107 | + ->from('order') | |
108 | + ->where([ 'label' => $this->id ]) | |
109 | + ->andFilterWhere( | |
110 | + $where | |
111 | + ); | |
112 | + | |
113 | + return $query->one(); | |
114 | + } | |
65 | 115 | } | ... | ... |
views/statistics/index.php
1 | 1 | <?php |
2 | + use kartik\daterange\DateRangePicker; | |
3 | + use kartik\select2\Select2; | |
4 | + use yii\helpers\Html; | |
2 | 5 | use yii\web\View; |
3 | 6 | |
4 | 7 | /** |
5 | 8 | * @var View $this |
9 | + * @var array $labels | |
6 | 10 | */ |
7 | 11 | |
8 | 12 | ?> |
... | ... | @@ -15,6 +19,32 @@ |
15 | 19 | </div><!-- /.box-tools --> |
16 | 20 | </div><!-- /.box-header --> |
17 | 21 | <div class="box-body"> |
18 | - The body of the box | |
22 | + <?= Html::beginForm(['/ecommerce/statistics'], 'get', [ | |
23 | + 'class' => 'form-inline' | |
24 | + ])?> | |
25 | + | |
26 | + <?= DateRangePicker::widget([ | |
27 | + 'name' => 'date_range', | |
28 | + 'pluginOptions' => [ | |
29 | + 'locale' => [ | |
30 | + 'format' => 'DD-MM-Y', | |
31 | + 'separator' => ' : ', | |
32 | + ], | |
33 | + ], | |
34 | + ])?> | |
35 | + | |
36 | + <?= Select2::widget([ | |
37 | + 'name' => 'label', | |
38 | + 'data' => $labels, | |
39 | + 'options' => [ | |
40 | + 'placeholder' => 'Все', | |
41 | + ], | |
42 | + ])?> | |
43 | + | |
44 | + <?= Html::submitButton('Go', [ | |
45 | + 'class' => 'btn btn-success', | |
46 | + ])?> | |
47 | + | |
48 | + <?= Html::endForm() ?> | |
19 | 49 | </div><!-- /.box-body --> |
20 | 50 | </div><!-- /.box --> | ... | ... |