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