Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 283 |
|
0.00% |
0 / 42 |
CRAP | |
0.00% |
0 / 1 |
ClientManagementController | |
0.00% |
0 / 283 |
|
0.00% |
0 / 42 |
6972 | |
0.00% |
0 / 1 |
__construct | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
test | |
0.00% |
0 / 9 |
|
0.00% |
0 / 1 |
2 | |||
reporting_licenses | |
0.00% |
0 / 12 |
|
0.00% |
0 / 1 |
6 | |||
reporting_roi_spotlight | |
0.00% |
0 / 7 |
|
0.00% |
0 / 1 |
12 | |||
reporting_characters_typed_spotlight | |
0.00% |
0 / 7 |
|
0.00% |
0 / 1 |
12 | |||
reporting_total_fly_grammar_spotlight | |
0.00% |
0 / 7 |
|
0.00% |
0 / 1 |
12 | |||
reporting_total_fly_grammar_accepted_spotlight | |
0.00% |
0 / 7 |
|
0.00% |
0 / 1 |
12 | |||
reporting_total_fly_grammar_autocorrect_spotlight | |
0.00% |
0 / 7 |
|
0.00% |
0 / 1 |
12 | |||
reporting_total_fly_grammar_autocomplete_spotlight | |
0.00% |
0 / 7 |
|
0.00% |
0 / 1 |
12 | |||
reporting_flymsg_coach_level | |
0.00% |
0 / 7 |
|
0.00% |
0 / 1 |
12 | |||
reporting_flycuts_used | |
0.00% |
0 / 7 |
|
0.00% |
0 / 1 |
12 | |||
reporting_flycuts_created | |
0.00% |
0 / 7 |
|
0.00% |
0 / 1 |
12 | |||
reporting_flycuts_used_top_users | |
0.00% |
0 / 4 |
|
0.00% |
0 / 1 |
2 | |||
reporting_flycuts_created_top_users | |
0.00% |
0 / 4 |
|
0.00% |
0 / 1 |
2 | |||
reporting_flyplates_added | |
0.00% |
0 / 7 |
|
0.00% |
0 / 1 |
12 | |||
reporting_flyplates_added_top_users | |
0.00% |
0 / 4 |
|
0.00% |
0 / 1 |
2 | |||
reporting_extension_usage | |
0.00% |
0 / 11 |
|
0.00% |
0 / 1 |
2 | |||
reporting_characters_typed_saving_top_users | |
0.00% |
0 / 4 |
|
0.00% |
0 / 1 |
2 | |||
getTop5 | |
0.00% |
0 / 24 |
|
0.00% |
0 / 1 |
30 | |||
reporting_time_saving_top_users | |
0.00% |
0 / 4 |
|
0.00% |
0 / 1 |
2 | |||
reporting_cost_saving_top_users | |
0.00% |
0 / 4 |
|
0.00% |
0 / 1 |
2 | |||
reporting_fly_grammar_top_users | |
0.00% |
0 / 4 |
|
0.00% |
0 / 1 |
2 | |||
reporting_fly_grammar_accepted_top_users | |
0.00% |
0 / 4 |
|
0.00% |
0 / 1 |
2 | |||
reporting_fly_grammar_autocorrect_top_users | |
0.00% |
0 / 4 |
|
0.00% |
0 / 1 |
2 | |||
reporting_fly_grammar_autocomplete_top_users | |
0.00% |
0 / 4 |
|
0.00% |
0 / 1 |
2 | |||
reporting_productivity_spotlight | |
0.00% |
0 / 7 |
|
0.00% |
0 / 1 |
12 | |||
reporting_get_columns | |
0.00% |
0 / 5 |
|
0.00% |
0 / 1 |
2 | |||
reporting_user_details | |
0.00% |
0 / 8 |
|
0.00% |
0 / 1 |
2 | |||
reporting_active_users | |
0.00% |
0 / 11 |
|
0.00% |
0 / 1 |
2 | |||
reporting_sentence_rewrite_ai | |
0.00% |
0 / 7 |
|
0.00% |
0 / 1 |
12 | |||
reporting_sentence_rewrite_ai_used_top_users | |
0.00% |
0 / 4 |
|
0.00% |
0 / 1 |
2 | |||
reporting_paragraph_rewrite_ai | |
0.00% |
0 / 7 |
|
0.00% |
0 / 1 |
12 | |||
reporting_paragraph_rewrite_ai_used_top_users | |
0.00% |
0 / 4 |
|
0.00% |
0 / 1 |
2 | |||
reporting_flyengage_ai | |
0.00% |
0 / 7 |
|
0.00% |
0 / 1 |
12 | |||
reporting_flyengage_ai_used_top_users | |
0.00% |
0 / 4 |
|
0.00% |
0 / 1 |
2 | |||
reporting_flypost_ai | |
0.00% |
0 / 7 |
|
0.00% |
0 / 1 |
12 | |||
reporting_flypost_ai_used_top_users | |
0.00% |
0 / 4 |
|
0.00% |
0 / 1 |
2 | |||
export_csv_report | |
0.00% |
0 / 3 |
|
0.00% |
0 / 1 |
6 | |||
export_csv_report_overview | |
0.00% |
0 / 2 |
|
0.00% |
0 / 1 |
2 | |||
export_csv_report_usage | |
0.00% |
0 / 7 |
|
0.00% |
0 / 1 |
20 | |||
getFiltersForReporting | |
0.00% |
0 / 22 |
|
0.00% |
0 / 1 |
12 | |||
getPeriod | |
0.00% |
0 / 7 |
|
0.00% |
0 / 1 |
2 |
1 | <?php |
2 | |
3 | namespace App\Http\Controllers\v1\AdminPortal; |
4 | |
5 | use App\Http\Models\Auth\User; |
6 | use Illuminate\Http\Request; |
7 | use Illuminate\Support\Carbon; |
8 | use App\Http\Controllers\Controller; |
9 | use App\Exports\AllUsersReportExport; |
10 | use App\Exports\AllUsersReportUsageExport; |
11 | use App\Actions\ReportingGetColumnsRequest; |
12 | use App\DTO\ReportingActiveUsersRequestDTO; |
13 | use App\DTO\ReportingUserDetailsRequestDTO; |
14 | use App\Actions\ReportingActiveUsersRequest; |
15 | use App\Actions\ReportingUserDetailsRequest; |
16 | use App\Exports\AllUsersReportOverviewExport; |
17 | use App\DTO\ReportingExtensionUsageRequestDTO; |
18 | use App\Actions\ReportingExtensionUsageRequest; |
19 | use App\Actions\ReportingCostSavedTopUsersRequest; |
20 | use App\Actions\ReportingTimeSavedTopUsersRequest; |
21 | use App\Http\Requests\AdminReportingTopUsersRequest; |
22 | use App\Actions\ReportingFlyCutsCreatedTopUsersRequest; |
23 | use App\Actions\ReportingFlyPlatesAddedTopUsersRequest; |
24 | use App\Actions\ReportingCharactersTypedSavingTopUsersRequest; |
25 | use App\DTO\AccountCenter\Reporting\ReportingRequestDTO; |
26 | use App\Http\Requests\ReportingFormRequest; |
27 | use App\Http\Services\Admin\Reports\AccountCenterReportingService; |
28 | use App\Http\Services\Admin\Reports\FindUsersOverviewFilter; |
29 | use App\Http\Services\Admin\Reports\MgmtCenterReportingService; |
30 | use Illuminate\Support\Facades\Log; |
31 | |
32 | class ClientManagementController extends Controller |
33 | { |
34 | public function __construct( |
35 | private AccountCenterReportingService $accountCenterReportingService, |
36 | private MgmtCenterReportingService $mgmtCenterReportingService, |
37 | ) {} |
38 | |
39 | public function test() |
40 | { |
41 | return response()->json(data: [ |
42 | 'success' => true, |
43 | 'licenses' => [ |
44 | "inactive_users" => 123, |
45 | "activated" => 123, |
46 | "extensions_installed" => 123, |
47 | "extensions_uninstalled" => 123, |
48 | ], |
49 | ], status: 200); |
50 | } |
51 | public function reporting_licenses(ReportingFormRequest $request) |
52 | { |
53 | try { |
54 | $filters = $this->getFiltersForReporting($request); |
55 | |
56 | $licenses = $this->mgmtCenterReportingService->findLicenseOverview($filters); |
57 | |
58 | return response()->json(data: [ |
59 | 'success' => true, |
60 | 'licenses' => $licenses, |
61 | ], status: 200); |
62 | } catch (\Exception $e) { |
63 | Log::error($e->getMessage()); |
64 | return response()->json(data: [ |
65 | 'success' => false, |
66 | 'message' => 'An error occurred while fetching licenses', |
67 | ], status: 500); |
68 | } |
69 | } |
70 | |
71 | public function reporting_roi_spotlight(Request $request) |
72 | { |
73 | $from = $request->fromDate ? Carbon::parse($request->fromDate)->startOfDay() : null; |
74 | $to = $request->toDate ? Carbon::parse($request->toDate)->endOfDay() : null; |
75 | |
76 | $data = $this->mgmtCenterReportingService->spotlight('cost_saved', $from, $to); |
77 | |
78 | return response()->json(data: [ |
79 | 'success' => true, |
80 | 'data' => $data, |
81 | ], status: 200); |
82 | } |
83 | |
84 | public function reporting_characters_typed_spotlight(Request $request) |
85 | { |
86 | $from = $request->fromDate ? Carbon::parse($request->fromDate)->startOfDay() : null; |
87 | $to = $request->toDate ? Carbon::parse($request->toDate)->endOfDay() : null; |
88 | |
89 | $data = $this->mgmtCenterReportingService->spotlight('characters_typed', $from, $to); |
90 | |
91 | return response()->json(data: [ |
92 | 'success' => true, |
93 | 'data' => $data, |
94 | ], status: 200); |
95 | } |
96 | |
97 | public function reporting_total_fly_grammar_spotlight(Request $request) |
98 | { |
99 | $from = $request->fromDate ? Carbon::parse($request->fromDate)->startOfDay() : null; |
100 | $to = $request->toDate ? Carbon::parse($request->toDate)->endOfDay() : null; |
101 | |
102 | $data = $this->mgmtCenterReportingService->spotlight('fly_grammar_actions', $from, $to); |
103 | |
104 | return response()->json(data: [ |
105 | 'success' => true, |
106 | 'data' => $data, |
107 | ], status: 200); |
108 | } |
109 | |
110 | public function reporting_total_fly_grammar_accepted_spotlight(Request $request) |
111 | { |
112 | $from = $request->fromDate ? Carbon::parse($request->fromDate)->startOfDay() : null; |
113 | $to = $request->toDate ? Carbon::parse($request->toDate)->endOfDay() : null; |
114 | |
115 | $data = $this->mgmtCenterReportingService->spotlight('fly_grammar_accepted', $from, $to); |
116 | |
117 | return response()->json(data: [ |
118 | 'success' => true, |
119 | 'data' => $data, |
120 | ], status: 200); |
121 | } |
122 | |
123 | public function reporting_total_fly_grammar_autocorrect_spotlight(Request $request) |
124 | { |
125 | $from = $request->fromDate ? Carbon::parse($request->fromDate)->startOfDay() : null; |
126 | $to = $request->toDate ? Carbon::parse($request->toDate)->endOfDay() : null; |
127 | |
128 | $data = $this->mgmtCenterReportingService->spotlight('fly_grammar_autocorrect', $from, $to); |
129 | |
130 | return response()->json(data: [ |
131 | 'success' => true, |
132 | 'data' => $data, |
133 | ], status: 200); |
134 | } |
135 | |
136 | public function reporting_total_fly_grammar_autocomplete_spotlight(Request $request) |
137 | { |
138 | $from = $request->fromDate ? Carbon::parse($request->fromDate)->startOfDay() : null; |
139 | $to = $request->toDate ? Carbon::parse($request->toDate)->endOfDay() : null; |
140 | |
141 | $data = $this->mgmtCenterReportingService->spotlight('fly_grammar_autocomplete', $from, $to); |
142 | |
143 | return response()->json(data: [ |
144 | 'success' => true, |
145 | 'data' => $data, |
146 | ], status: 200); |
147 | } |
148 | |
149 | public function reporting_flymsg_coach_level(Request $request) |
150 | { |
151 | $from = $request->fromDate ? Carbon::parse($request->fromDate)->startOfDay() : null; |
152 | $to = $request->toDate ? Carbon::parse($request->toDate)->endOfDay() : null; |
153 | |
154 | $data = $this->mgmtCenterReportingService->getFlyCutCoachLevels($from, $to); |
155 | |
156 | return response()->json([ |
157 | 'success' => true, |
158 | 'data' => $data, |
159 | ], 200); |
160 | } |
161 | |
162 | public function reporting_flycuts_used(Request $request) |
163 | { |
164 | $from = $request->fromDate ? Carbon::parse($request->fromDate)->startOfDay() : null; |
165 | $to = $request->toDate ? Carbon::parse($request->toDate)->endOfDay() : null; |
166 | |
167 | $data = $this->mgmtCenterReportingService->spotlight('flycut_count', $from, $to, true); |
168 | |
169 | return response()->json(data: [ |
170 | 'success' => true, |
171 | 'data' => $data, |
172 | ]); |
173 | } |
174 | |
175 | public function reporting_flycuts_created(Request $request) |
176 | { |
177 | $from = $request->fromDate ? Carbon::parse($request->fromDate)->startOfDay() : null; |
178 | $to = $request->toDate ? Carbon::parse($request->toDate)->endOfDay() : null; |
179 | |
180 | $data = $this->mgmtCenterReportingService->spotlight('flycuts_created', $from, $to, true); |
181 | |
182 | return response()->json(data: [ |
183 | 'success' => true, |
184 | 'data' => $data, |
185 | ]); |
186 | } |
187 | |
188 | public function reporting_flycuts_used_top_users(Request $request) |
189 | { |
190 | return response()->json(data: [ |
191 | 'success' => true, |
192 | 'users' => $this->getTop5($request, 'flycut_count'), |
193 | ]); |
194 | } |
195 | |
196 | public function reporting_flycuts_created_top_users(Request $request) |
197 | { |
198 | return response()->json(data: [ |
199 | 'success' => true, |
200 | 'users' => $this->getTop5($request, 'flycuts_created'), |
201 | ]); |
202 | } |
203 | |
204 | public function reporting_flyplates_added(Request $request) |
205 | { |
206 | $from = $request->fromDate ? Carbon::parse($request->fromDate)->startOfDay() : null; |
207 | $to = $request->toDate ? Carbon::parse($request->toDate)->endOfDay() : null; |
208 | |
209 | $data = $this->mgmtCenterReportingService->spotlight('flyplates_added', $from, $to, true); |
210 | |
211 | return response()->json(data: [ |
212 | 'success' => true, |
213 | 'data' => $data, |
214 | ]); |
215 | } |
216 | |
217 | public function reporting_flyplates_added_top_users(Request $request, ReportingFlyPlatesAddedTopUsersRequest $reportingFlyPlatesAddedTopUsersService) |
218 | { |
219 | return response()->json(data: [ |
220 | 'success' => true, |
221 | 'users' => $this->getTop5($request, 'flyplates_added'), |
222 | ]); |
223 | } |
224 | |
225 | public function reporting_extension_usage(Request $request, ReportingExtensionUsageRequest $reportingExtensionUsageService) |
226 | { |
227 | $usersData = $reportingExtensionUsageService->execute(new ReportingExtensionUsageRequestDTO( |
228 | $request->fromDate, |
229 | $request->toDate, |
230 | $request->user_ids, |
231 | $request->group_ids, |
232 | $request->subgroup_ids |
233 | )); |
234 | |
235 | return response()->json([ |
236 | 'success' => true, |
237 | 'data' => $usersData, |
238 | ], 200); |
239 | } |
240 | |
241 | public function reporting_characters_typed_saving_top_users(AdminReportingTopUsersRequest $request, ReportingCharactersTypedSavingTopUsersRequest $reportingCharactersTypedSavingTopUsersAction) |
242 | { |
243 | return response()->json(data: [ |
244 | 'success' => true, |
245 | 'users' => $this->getTop5($request, 'characters_typed'), |
246 | ]); |
247 | } |
248 | |
249 | private function getTop5(Request $request, string $property) |
250 | { |
251 | $filter = new ReportingRequestDTO( |
252 | fromDate: !empty($request->fromDate) ? \Carbon\Carbon::parse($request->fromDate)->startOfDay() : null, |
253 | toDate: !empty($request->toDate) ? Carbon::parse($request->toDate)->endOfDay() : null, |
254 | companyId: $request->company_id, |
255 | adminGroupIds: $request->admin_group_ids, |
256 | userIds: $request->user_ids, |
257 | groupIds: $request->group_ids, |
258 | subgroupIds: $request->subgroup_ids, |
259 | role: $request->current_role, |
260 | companyIds: $request->company_ids ? explode(",", $request->company_ids) : null, |
261 | ); |
262 | |
263 | $top5 = $this->accountCenterReportingService->getTop5Users($filter, $property); |
264 | |
265 | // Get the top 5 users |
266 | $top_5_users = $top5->map(function ($top) use ($property) { |
267 | $user = User::firstWhere('_id', $top['user_id']); |
268 | |
269 | if ($user) { |
270 | $full_name = $user->first_name . ' ' . $user->last_name; |
271 | |
272 | return ['name' => $full_name, 'count' => number_format($top[$property], 0, ".", ","), 'image' => $user->avatar]; |
273 | } |
274 | |
275 | return [ |
276 | 'name' => 'Deleted User', |
277 | 'count' => number_format($top[$property], 0, ".", ","), |
278 | 'image' => '' |
279 | ]; |
280 | }); |
281 | |
282 | return $top_5_users; |
283 | } |
284 | |
285 | public function reporting_time_saving_top_users(AdminReportingTopUsersRequest $request, ReportingTimeSavedTopUsersRequest $reportingTimeSavedTopUsersRequestAction) |
286 | { |
287 | return response()->json(data: [ |
288 | 'success' => true, |
289 | 'users' => $this->getTop5($request, 'time_saved'), |
290 | ]); |
291 | } |
292 | |
293 | public function reporting_cost_saving_top_users(AdminReportingTopUsersRequest $request, ReportingCostSavedTopUsersRequest $reportingCostSavedTopUsersRequestAction) |
294 | { |
295 | return response()->json(data: [ |
296 | 'success' => true, |
297 | 'users' => $this->getTop5($request, 'cost_savings'), |
298 | ]); |
299 | } |
300 | |
301 | public function reporting_fly_grammar_top_users(AdminReportingTopUsersRequest $request, ReportingCostSavedTopUsersRequest $reportingCostSavedTopUsersRequestAction) |
302 | { |
303 | return response()->json(data: [ |
304 | 'success' => true, |
305 | 'users' => $this->getTop5($request, 'fly_grammar_actions'), |
306 | ]); |
307 | } |
308 | |
309 | public function reporting_fly_grammar_accepted_top_users(AdminReportingTopUsersRequest $request) |
310 | { |
311 | return response()->json(data: [ |
312 | 'success' => true, |
313 | 'users' => $this->getTop5($request, 'fly_grammar_accepted'), |
314 | ]); |
315 | } |
316 | |
317 | public function reporting_fly_grammar_autocorrect_top_users(AdminReportingTopUsersRequest $request) |
318 | { |
319 | return response()->json(data: [ |
320 | 'success' => true, |
321 | 'users' => $this->getTop5($request, 'fly_grammar_autocorrect'), |
322 | ]); |
323 | } |
324 | |
325 | public function reporting_fly_grammar_autocomplete_top_users(AdminReportingTopUsersRequest $request) |
326 | { |
327 | return response()->json(data: [ |
328 | 'success' => true, |
329 | 'users' => $this->getTop5($request, 'fly_grammar_autocomplete'), |
330 | ]); |
331 | } |
332 | |
333 | public function reporting_productivity_spotlight(Request $request) |
334 | { |
335 | $from = $request->fromDate ? Carbon::parse($request->fromDate)->startOfDay() : null; |
336 | $to = $request->toDate ? Carbon::parse($request->toDate)->endOfDay() : null; |
337 | |
338 | $data = $this->mgmtCenterReportingService->spotlight('time_saved', $from, $to); |
339 | |
340 | return response()->json(data: [ |
341 | 'success' => true, |
342 | 'data' => $data, |
343 | ], status: 200); |
344 | } |
345 | |
346 | public function reporting_get_columns(Request $request, ReportingGetColumnsRequest $reportingGetColumnsRequest) |
347 | { |
348 | $columns = $reportingGetColumnsRequest->execute($request); |
349 | |
350 | return response()->json([ |
351 | 'success' => true, |
352 | 'columns' => $columns, |
353 | ], 200); |
354 | } |
355 | |
356 | public function reporting_user_details(Request $request, ReportingUserDetailsRequest $reportingUserDetailsRequest) |
357 | { |
358 | $usersData = $reportingUserDetailsRequest->execute(new ReportingUserDetailsRequestDTO( |
359 | $request->fromDate, |
360 | $request->toDate |
361 | )); |
362 | |
363 | return response()->json([ |
364 | 'success' => true, |
365 | 'users' => $usersData, |
366 | ], 200); |
367 | } |
368 | |
369 | public function reporting_active_users(Request $request, ReportingActiveUsersRequest $reportingActiveUsersService) |
370 | { |
371 | $data = $reportingActiveUsersService->execute(new ReportingActiveUsersRequestDTO( |
372 | $request->fromDate, |
373 | $request->toDate, |
374 | $request->user_ids, |
375 | $request->group_ids, |
376 | $request->subgroup_ids |
377 | )); |
378 | |
379 | return response()->json([ |
380 | 'success' => true, |
381 | 'data' => $data, |
382 | ], 200); |
383 | } |
384 | |
385 | public function reporting_sentence_rewrite_ai(Request $request) |
386 | { |
387 | $from = $request->fromDate ? Carbon::parse($request->fromDate)->startOfDay() : null; |
388 | $to = $request->toDate ? Carbon::parse($request->toDate)->endOfDay() : null; |
389 | |
390 | $data = $this->mgmtCenterReportingService->spotlight('sentence_rewrite_count', $from, $to, true); |
391 | |
392 | return response()->json(data: [ |
393 | 'success' => true, |
394 | 'data' => $data, |
395 | ]); |
396 | } |
397 | |
398 | public function reporting_sentence_rewrite_ai_used_top_users(Request $request) |
399 | { |
400 | return response()->json(data: [ |
401 | 'success' => true, |
402 | 'users' => $this->getTop5($request, 'sentence_rewrite_count'), |
403 | ]); |
404 | } |
405 | |
406 | public function reporting_paragraph_rewrite_ai(Request $request) |
407 | { |
408 | $from = $request->fromDate ? Carbon::parse($request->fromDate)->startOfDay() : null; |
409 | $to = $request->toDate ? Carbon::parse($request->toDate)->endOfDay() : null; |
410 | |
411 | $data = $this->mgmtCenterReportingService->spotlight('paragraph_rewrite_count', $from, $to, true); |
412 | |
413 | return response()->json(data: [ |
414 | 'success' => true, |
415 | 'data' => $data, |
416 | ]); |
417 | } |
418 | |
419 | public function reporting_paragraph_rewrite_ai_used_top_users(Request $request) |
420 | { |
421 | return response()->json(data: [ |
422 | 'success' => true, |
423 | 'users' => $this->getTop5($request, 'paragraph_rewrite_count'), |
424 | ]); |
425 | } |
426 | |
427 | public function reporting_flyengage_ai(Request $request) |
428 | { |
429 | $from = $request->fromDate ? Carbon::parse($request->fromDate)->startOfDay() : null; |
430 | $to = $request->toDate ? Carbon::parse($request->toDate)->endOfDay() : null; |
431 | |
432 | $data = $this->mgmtCenterReportingService->spotlight('flyengage_count', $from, $to, true); |
433 | |
434 | return response()->json(data: [ |
435 | 'success' => true, |
436 | 'data' => $data, |
437 | ]); |
438 | } |
439 | |
440 | public function reporting_flyengage_ai_used_top_users(Request $request) |
441 | { |
442 | return response()->json(data: [ |
443 | 'success' => true, |
444 | 'users' => $this->getTop5($request, 'flyengage_count'), |
445 | ]); |
446 | } |
447 | |
448 | public function reporting_flypost_ai(Request $request) |
449 | { |
450 | $from = $request->fromDate ? Carbon::parse($request->fromDate)->startOfDay() : null; |
451 | $to = $request->toDate ? Carbon::parse($request->toDate)->endOfDay() : null; |
452 | |
453 | $data = $this->mgmtCenterReportingService->spotlight('flypost_count', $from, $to, true); |
454 | |
455 | return response()->json(data: [ |
456 | 'success' => true, |
457 | 'data' => $data, |
458 | ]); |
459 | } |
460 | |
461 | public function reporting_flypost_ai_used_top_users(Request $request) |
462 | { |
463 | return response()->json(data: [ |
464 | 'success' => true, |
465 | 'users' => $this->getTop5($request, 'flypost_count'), |
466 | ]); |
467 | } |
468 | |
469 | public function export_csv_report(Request $request) |
470 | { |
471 | $filters = $request->filters; |
472 | $users_ids = $request->users ? explode(',', $request->users) : []; |
473 | return (new AllUsersReportExport($filters, $users_ids))->download('reporting-details-export.csv'); |
474 | } |
475 | |
476 | public function export_csv_report_overview() |
477 | { |
478 | $admin = auth()->user(); |
479 | return (new AllUsersReportOverviewExport($admin))->download('reporting-overview-export.csv'); |
480 | } |
481 | |
482 | public function export_csv_report_usage(Request $request) |
483 | { |
484 | $admin = auth()->user(); |
485 | $from_date = $request->fromDate; |
486 | $to_date = $request->toDate; |
487 | $user_ids = $request->user_ids ? explode(',', $request->user_ids) : []; |
488 | $group_ids = $request->group_ids ? explode(',', $request->group_ids) : []; |
489 | $subgroup_ids = $request->subgroup_ids ? explode(',', $request->subgroup_ids) : []; |
490 | |
491 | return (new AllUsersReportUsageExport($admin, $from_date, $to_date, $user_ids, $group_ids, $subgroup_ids))->download('reporting-usage-export.csv'); |
492 | } |
493 | |
494 | private function getFiltersForReporting(ReportingFormRequest $request) |
495 | { |
496 | $validated = $request->validated(); |
497 | $period = $this->getPeriod($validated['month_period'] ?? 12); |
498 | return new FindUsersOverviewFilter( |
499 | fromDate: ($validated['fromDate'] ?? null) ? Carbon::parse($validated['fromDate']) : $period['startDate'], |
500 | toDate: ($validated['toDate'] ?? null) ? Carbon::parse($validated['toDate']) : $period['endDate'], |
501 | userIds: array_filter(explode(",", $request->users), function ($value) { |
502 | return $value !== ""; |
503 | }), |
504 | groupIds: array_filter(explode(",", $request->groups), function ($value) { |
505 | return $value !== ""; |
506 | }), |
507 | subgroupIds: array_filter(explode(",", $request->subgroups), function ($value) { |
508 | return $value !== ""; |
509 | }), |
510 | companyIds: array_filter(explode(",", $request->companies), function ($value) { |
511 | return $value !== ""; |
512 | }), |
513 | currentRole: $request->current_role, |
514 | companyId: null, |
515 | adminGroupIds: null, |
516 | monthPeriod: ($validated['month_period'] ?? null), |
517 | ); |
518 | } |
519 | |
520 | private function getPeriod($period) |
521 | { |
522 | $endDate = Carbon::now(); |
523 | |
524 | return match ($period) { |
525 | 1 => ['startDate' => Carbon::now()->subMonths(1), 'endDate' => $endDate], |
526 | 3 => ['startDate' => Carbon::now()->subMonths(3), 'endDate' => $endDate], |
527 | 6 => ['startDate' => Carbon::now()->subMonths(6), 'endDate' => $endDate], |
528 | default => ['startDate' => Carbon::now()->subMonths(12), 'endDate' => $endDate], |
529 | }; |
530 | } |
531 | } |