Commit 2f4b4e77e39ddbce17dfbe6cc7f85a2f54255ac4

Authored by Alexey Boroda
1 parent f2a0c7a1

-Statistics export almost ready

controllers/StatisticsController.php
... ... @@ -2,6 +2,7 @@
2 2  
3 3 namespace artweb\artbox\ecommerce\controllers;
4 4  
  5 + use arturoliveira\ExcelView;
5 6 use artweb\artbox\ecommerce\models\Label;
6 7 use artweb\artbox\ecommerce\models\Order;
7 8 use common\models\User;
... ... @@ -9,6 +10,7 @@
9 10 use yii\helpers\ArrayHelper;
10 11 use yii\helpers\VarDumper;
11 12 use yii\web\Controller;
  13 + use yii\web\Response;
12 14  
13 15 class StatisticsController extends Controller
14 16 {
... ... @@ -35,7 +37,7 @@
35 37 } else {
36 38 $labelFilter = [];
37 39 }
38   -
  40 +
39 41 if (!empty($manager)) {
40 42 $managerFilter = [ 'manager_id' => $manager ];
41 43 } else {
... ... @@ -48,7 +50,7 @@
48 50 $labels = Label::find()
49 51 ->with('lang')
50 52 ->all();
51   -
  53 +
52 54 /**
53 55 * Get user
54 56 */
... ... @@ -67,7 +69,7 @@
67 69 return $model->getStatistics($dateFilter, $managerFilter);
68 70 }
69 71 );
70   -
  72 +
71 73 /**
72 74 * Data provider for table
73 75 */
... ... @@ -75,11 +77,11 @@
75 77 [
76 78 'query' => Order::find()
77 79 ->filterWhere($dateFilter)
78   - ->andFilterWhere($managerFilter)
  80 + ->andFilterWhere($managerFilter)
79 81 ->andFilterWhere($labelFilter),
80 82 ]
81 83 );
82   -
  84 +
83 85 /**
84 86 * Creating charts data
85 87 */
... ... @@ -128,12 +130,12 @@
128 130 ],
129 131 ],
130 132 ];
131   -
  133 +
132 134 /**
133 135 * Getting rejection statistics
134 136 */
135 137 $rejectStatistics = Order::getRejectionStatistics($dateFilter, $managerFilter);
136   -
  138 +
137 139 /**
138 140 * Charts data for rejects
139 141 */
... ... @@ -178,8 +180,92 @@
178 180 'rejectChartData2' => $rejectChartData2,
179 181 'dateValue' => empty($date_range) ? '' : $date_range,
180 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 }
... ...
models/Order.php
... ... @@ -63,6 +63,7 @@
63 63 * @property OrderLog[] $logs
64 64 * @property float $credit_sum
65 65 * @property int $credit_month
  66 + * @property User $manager
66 67 */
67 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 +
... ...