Commit 2f4b4e77e39ddbce17dfbe6cc7f85a2f54255ac4

Authored by Alexey Boroda
1 parent f2a0c7a1

-Statistics export almost ready

controllers/StatisticsController.php
@@ -2,6 +2,7 @@ @@ -2,6 +2,7 @@
2 2
3 namespace artweb\artbox\ecommerce\controllers; 3 namespace artweb\artbox\ecommerce\controllers;
4 4
  5 + use arturoliveira\ExcelView;
5 use artweb\artbox\ecommerce\models\Label; 6 use artweb\artbox\ecommerce\models\Label;
6 use artweb\artbox\ecommerce\models\Order; 7 use artweb\artbox\ecommerce\models\Order;
7 use common\models\User; 8 use common\models\User;
@@ -9,6 +10,7 @@ @@ -9,6 +10,7 @@
9 use yii\helpers\ArrayHelper; 10 use yii\helpers\ArrayHelper;
10 use yii\helpers\VarDumper; 11 use yii\helpers\VarDumper;
11 use yii\web\Controller; 12 use yii\web\Controller;
  13 + use yii\web\Response;
12 14
13 class StatisticsController extends Controller 15 class StatisticsController extends Controller
14 { 16 {
@@ -35,7 +37,7 @@ @@ -35,7 +37,7 @@
35 } else { 37 } else {
36 $labelFilter = []; 38 $labelFilter = [];
37 } 39 }
38 - 40 +
39 if (!empty($manager)) { 41 if (!empty($manager)) {
40 $managerFilter = [ 'manager_id' => $manager ]; 42 $managerFilter = [ 'manager_id' => $manager ];
41 } else { 43 } else {
@@ -48,7 +50,7 @@ @@ -48,7 +50,7 @@
48 $labels = Label::find() 50 $labels = Label::find()
49 ->with('lang') 51 ->with('lang')
50 ->all(); 52 ->all();
51 - 53 +
52 /** 54 /**
53 * Get user 55 * Get user
54 */ 56 */
@@ -67,7 +69,7 @@ @@ -67,7 +69,7 @@
67 return $model->getStatistics($dateFilter, $managerFilter); 69 return $model->getStatistics($dateFilter, $managerFilter);
68 } 70 }
69 ); 71 );
70 - 72 +
71 /** 73 /**
72 * Data provider for table 74 * Data provider for table
73 */ 75 */
@@ -75,11 +77,11 @@ @@ -75,11 +77,11 @@
75 [ 77 [
76 'query' => Order::find() 78 'query' => Order::find()
77 ->filterWhere($dateFilter) 79 ->filterWhere($dateFilter)
78 - ->andFilterWhere($managerFilter) 80 + ->andFilterWhere($managerFilter)
79 ->andFilterWhere($labelFilter), 81 ->andFilterWhere($labelFilter),
80 ] 82 ]
81 ); 83 );
82 - 84 +
83 /** 85 /**
84 * Creating charts data 86 * Creating charts data
85 */ 87 */
@@ -128,12 +130,12 @@ @@ -128,12 +130,12 @@
128 ], 130 ],
129 ], 131 ],
130 ]; 132 ];
131 - 133 +
132 /** 134 /**
133 * Getting rejection statistics 135 * Getting rejection statistics
134 */ 136 */
135 $rejectStatistics = Order::getRejectionStatistics($dateFilter, $managerFilter); 137 $rejectStatistics = Order::getRejectionStatistics($dateFilter, $managerFilter);
136 - 138 +
137 /** 139 /**
138 * Charts data for rejects 140 * Charts data for rejects
139 */ 141 */
@@ -178,8 +180,92 @@ @@ -178,8 +180,92 @@
178 'rejectChartData2' => $rejectChartData2, 180 'rejectChartData2' => $rejectChartData2,
179 'dateValue' => empty($date_range) ? '' : $date_range, 181 'dateValue' => empty($date_range) ? '' : $date_range,
180 'dataLabel' => empty($label) ? false : $label, 182 'dataLabel' => empty($label) ? false : $label,
181 - 'dataManager' => empty($manager) ? false : $manager, 183 + 'dataManager' => empty($manager) ? false : $manager,
182 ] 184 ]
183 ); 185 );
184 } 186 }
  187 +
  188 + public function actionExport($date_range = NULL, $label = NULL, $manager = NULL)
  189 + {
  190 + $formatter = \Yii::$app->formatter;
  191 + /**
  192 + * Get export options
  193 + */
  194 + if (!empty($date_range)) {
  195 + $arr = [];
  196 + preg_match('@(.*)\s:\s(.*)@', $date_range, $arr);
  197 + $dateFilter = [
  198 + 'between',
  199 + 'created_at',
  200 + strtotime($arr[ 1 ]),
  201 + strtotime($arr[ 2 ]),
  202 + ];
  203 + } else {
  204 + $dateFilter = [];
  205 + }
  206 +
  207 + if (!empty($label)) {
  208 + $labelFilter = [ 'label' => $label ];
  209 + } else {
  210 + $labelFilter = [];
  211 + }
  212 +
  213 + if (!empty($manager)) {
  214 + $managerFilter = [ 'manager_id' => $manager ];
  215 + } else {
  216 + $managerFilter = [];
  217 + }
  218 +
  219 + $orders = Order::find()
  220 + ->with(
  221 + [
  222 + 'products',
  223 + 'orderLabel',
  224 + 'manager',
  225 + ]
  226 + )
  227 + ->filterWhere($dateFilter)
  228 + ->andFilterWhere($labelFilter)
  229 + ->andFilterWhere($managerFilter)
  230 + ->limit(10)
  231 + ->all();
  232 +
  233 + $file = fopen(\Yii::getAlias('@backend') . '/web/export/' . time() . '_export.csv', 'a');
  234 + foreach ($orders as $order) {
  235 + $line = [];
  236 + /**
  237 + * @var Order $order
  238 + */
  239 + $line[] = $formatter->asDecimal($order->id);
  240 + $line[] = $formatter->asDatetime($order->created_at);
  241 + $line[] = $formatter->asText($order->name);
  242 + if (empty($order->products)) {
  243 + $line[] = '';
  244 + } else {
  245 + $i = 0;
  246 + $products = '';
  247 + foreach ($order->products as $product) {
  248 + $products .= $product->sku;
  249 + if (count($order->products) != $i) {
  250 + $products .= ' ;';
  251 + }
  252 + }
  253 + $line[] = $products;
  254 + }
  255 + $line[] = $formatter->asText($order->city);
  256 + $line[] = $formatter->asText($order->orderLabel->label);
  257 + $line[] = $formatter->asDecimal($order->total);
  258 + $line[] = empty($order->reason) ? '' : $formatter->asText(Order::REASONS[$order->reason]);
  259 + $line[] = empty($order->manager) ? '' : $formatter->asText($order->manager->username);
  260 + $line[] = $formatter->asText($order->body);
  261 +
  262 + fputcsv($file, $line);
  263 + }
  264 + fclose($file);
  265 +
  266 + /**
  267 + * Start here
  268 + * @todo Ajax download button generation
  269 + */
  270 + }
185 } 271 }
@@ -63,6 +63,7 @@ @@ -63,6 +63,7 @@
63 * @property OrderLog[] $logs 63 * @property OrderLog[] $logs
64 * @property float $credit_sum 64 * @property float $credit_sum
65 * @property int $credit_month 65 * @property int $credit_month
  66 + * @property User $manager
66 */ 67 */
67 class Order extends ActiveRecord 68 class Order extends ActiveRecord
68 { 69 {
views/statistics/export.php 0 → 100644
  1 +<?php
  2 +
  3 + use yii\data\ActiveDataProvider;
  4 + use yii\web\View;
  5 +
  6 + /**
  7 + * @var View $this
  8 + * @var ActiveDataProvider $dataProvider
  9 + */
  10 +
  11 +