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,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 | } |
models/Order.php
| @@ -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 | { |