Commit d733149067386d4baa75e51a9a1a9b4b1c1cf9c1

Authored by Alexey Boroda
1 parent 60fa8910

-Export ready

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 -->