Commit d733149067386d4baa75e51a9a1a9b4b1c1cf9c1
1 parent
60fa8910
-Export ready
Showing
2 changed files
with
48 additions
and
25 deletions
Show diff stats
controllers/StatisticsController.php
@@ -7,6 +7,7 @@ | @@ -7,6 +7,7 @@ | ||
7 | use common\models\User; | 7 | use common\models\User; |
8 | use yii\data\ActiveDataProvider; | 8 | use yii\data\ActiveDataProvider; |
9 | use yii\helpers\ArrayHelper; | 9 | use yii\helpers\ArrayHelper; |
10 | + use yii\helpers\Html; | ||
10 | use yii\helpers\VarDumper; | 11 | use yii\helpers\VarDumper; |
11 | use yii\web\Controller; | 12 | use yii\web\Controller; |
12 | use yii\web\Response; | 13 | use yii\web\Response; |
@@ -186,7 +187,8 @@ | @@ -186,7 +187,8 @@ | ||
186 | 187 | ||
187 | public function actionExport($date_range = NULL, $label = NULL, $manager = NULL) | 188 | public function actionExport($date_range = NULL, $label = NULL, $manager = NULL) |
188 | { | 189 | { |
189 | - \Yii::$app->response = Response::FORMAT_JSON; | 190 | + \Yii::$app->response->format = Response::FORMAT_JSON; |
191 | + | ||
190 | $formatter = \Yii::$app->formatter; | 192 | $formatter = \Yii::$app->formatter; |
191 | /** | 193 | /** |
192 | * Get export options | 194 | * Get export options |
@@ -203,19 +205,19 @@ | @@ -203,19 +205,19 @@ | ||
203 | } else { | 205 | } else { |
204 | $dateFilter = []; | 206 | $dateFilter = []; |
205 | } | 207 | } |
206 | - | 208 | + |
207 | if (!empty($label)) { | 209 | if (!empty($label)) { |
208 | $labelFilter = [ 'label' => $label ]; | 210 | $labelFilter = [ 'label' => $label ]; |
209 | } else { | 211 | } else { |
210 | $labelFilter = []; | 212 | $labelFilter = []; |
211 | } | 213 | } |
212 | - | 214 | + |
213 | if (!empty($manager)) { | 215 | if (!empty($manager)) { |
214 | $managerFilter = [ 'manager_id' => $manager ]; | 216 | $managerFilter = [ 'manager_id' => $manager ]; |
215 | } else { | 217 | } else { |
216 | $managerFilter = []; | 218 | $managerFilter = []; |
217 | } | 219 | } |
218 | - | 220 | + |
219 | $orders = Order::find() | 221 | $orders = Order::find() |
220 | ->with( | 222 | ->with( |
221 | [ | 223 | [ |
@@ -227,10 +229,9 @@ | @@ -227,10 +229,9 @@ | ||
227 | ->filterWhere($dateFilter) | 229 | ->filterWhere($dateFilter) |
228 | ->andFilterWhere($labelFilter) | 230 | ->andFilterWhere($labelFilter) |
229 | ->andFilterWhere($managerFilter) | 231 | ->andFilterWhere($managerFilter) |
230 | - ->limit(10) | ||
231 | ->all(); | 232 | ->all(); |
232 | 233 | ||
233 | - $file = fopen(\Yii::getAlias('@backend') . '/web/export/' . time() . '_export.csv', 'a'); | 234 | + $file = fopen(\Yii::getAlias('@frontend/web/') . 'statistics_export.csv', 'w'); |
234 | foreach ($orders as $order) { | 235 | foreach ($orders as $order) { |
235 | $line = []; | 236 | $line = []; |
236 | /** | 237 | /** |
@@ -238,35 +239,40 @@ | @@ -238,35 +239,40 @@ | ||
238 | */ | 239 | */ |
239 | $line[] = $formatter->asDecimal($order->id); | 240 | $line[] = $formatter->asDecimal($order->id); |
240 | $line[] = $formatter->asDatetime($order->created_at); | 241 | $line[] = $formatter->asDatetime($order->created_at); |
241 | - $line[] = $formatter->asText($order->name); | 242 | + $line[] = (string) $order->name; |
242 | if (empty($order->products)) { | 243 | if (empty($order->products)) { |
243 | $line[] = ''; | 244 | $line[] = ''; |
244 | } else { | 245 | } else { |
245 | $i = 0; | 246 | $i = 0; |
246 | $products = ''; | 247 | $products = ''; |
247 | foreach ($order->products as $product) { | 248 | foreach ($order->products as $product) { |
249 | + $i ++; | ||
248 | $products .= $product->sku; | 250 | $products .= $product->sku; |
249 | if (count($order->products) != $i) { | 251 | if (count($order->products) != $i) { |
250 | - $products .= ' ;'; | 252 | + $products .= ' ,'; |
251 | } | 253 | } |
252 | } | 254 | } |
253 | $line[] = $products; | 255 | $line[] = $products; |
254 | } | 256 | } |
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]); | 257 | + $line[] = (string) $order->city; |
258 | + $line[] = (string) $order->orderLabel->label; | ||
259 | + $line[] = (string) $order->total; | ||
260 | + $line[] = empty($order->reason) ? '' : $formatter->asText(Order::REASONS[ $order->reason ]); | ||
259 | $line[] = empty($order->manager) ? '' : $formatter->asText($order->manager->username); | 261 | $line[] = empty($order->manager) ? '' : $formatter->asText($order->manager->username); |
260 | - $line[] = $formatter->asText($order->body); | 262 | + $line[] = (string) $order->body; |
261 | 263 | ||
262 | fputcsv($file, $line); | 264 | fputcsv($file, $line); |
263 | } | 265 | } |
264 | fclose($file); | 266 | fclose($file); |
265 | - | ||
266 | - /** | ||
267 | - * Start here | ||
268 | - * @todo Ajax download button generation | ||
269 | - * change ->asText - it generates html | ||
270 | - */ | 267 | + |
268 | + return [ | ||
269 | + 'message' => 'Файл успешно сгенерирован', | ||
270 | + 'button' => Html::a( | ||
271 | + Html::tag('i', '', [ | ||
272 | + 'class' => 'glyphicon glyphicon-download-alt' | ||
273 | + ]) . ' Скачать', '/statistics_export.csv', [ | ||
274 | + 'class' => 'btn bg-olive', | ||
275 | + ]) | ||
276 | + ]; | ||
271 | } | 277 | } |
272 | } | 278 | } |
views/statistics/index.php
@@ -10,6 +10,7 @@ | @@ -10,6 +10,7 @@ | ||
10 | use yii\helpers\ArrayHelper; | 10 | use yii\helpers\ArrayHelper; |
11 | use yii\helpers\Html; | 11 | use yii\helpers\Html; |
12 | use yii\helpers\StringHelper; | 12 | use yii\helpers\StringHelper; |
13 | + use yii\helpers\Url; | ||
13 | use yii\web\View; | 14 | use yii\web\View; |
14 | use yiier\chartjs\ChartJs; | 15 | use yiier\chartjs\ChartJs; |
15 | 16 | ||
@@ -29,11 +30,11 @@ | @@ -29,11 +30,11 @@ | ||
29 | * @var int | boolean $dataLabel | 30 | * @var int | boolean $dataLabel |
30 | * @var int | boolean $dataManager | 31 | * @var int | boolean $dataManager |
31 | */ | 32 | */ |
32 | - | ||
33 | - $js = <<< JS | ||
34 | -$('[data-toggle="popover"]').popover(); | ||
35 | -JS; | ||
36 | - $this->registerJs($js, View::POS_READY); | 33 | + |
34 | + $this->registerJsFile('/admin/js/statistics.js', [ | ||
35 | + 'position' => View::POS_END, | ||
36 | + 'depends' => 'yii\web\JqueryAsset' | ||
37 | + ]); | ||
37 | 38 | ||
38 | ?> | 39 | ?> |
39 | 40 | ||
@@ -360,10 +361,26 @@ JS; | @@ -360,10 +361,26 @@ JS; | ||
360 | 361 | ||
361 | </div><!-- /.box --> | 362 | </div><!-- /.box --> |
362 | 363 | ||
363 | - | 364 | +<p> |
365 | +<?php | ||
366 | + echo Html::button(Html::tag('i', '', [ | ||
367 | + 'class' => 'glyphicon glyphicon-cog', | ||
368 | + ]) . ' Создать выгрузку', [ | ||
369 | + 'class' => 'btn bg-navy', | ||
370 | + 'id' => 'generate-button', | ||
371 | + 'data-link' => Url::to([ | ||
372 | + 'export', | ||
373 | + 'date_range' => $dateValue, | ||
374 | + 'label' => $dataLabel, | ||
375 | + 'manager' => $dataManager, | ||
376 | + ]) | ||
377 | + ]) | ||
378 | +?> | ||
379 | +</p> | ||
364 | <div class="box box-default"> | 380 | <div class="box box-default"> |
365 | <div class="box-header with-border"> | 381 | <div class="box-header with-border"> |
366 | <h3 class="box-title">Заказы</h3> | 382 | <h3 class="box-title">Заказы</h3> |
383 | + | ||
367 | <div class="box-tools pull-right"> | 384 | <div class="box-tools pull-right"> |
368 | <button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button> | 385 | <button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button> |
369 | </div><!-- /.box-tools --> | 386 | </div><!-- /.box-tools --> |