Commit 2f4b4e77e39ddbce17dfbe6cc7f85a2f54255ac4
1 parent
f2a0c7a1
-Statistics export almost ready
Showing
3 changed files
with
106 additions
and
8 deletions
Show diff stats
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