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