Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 283
0.00% covered (danger)
0.00%
0 / 42
CRAP
0.00% covered (danger)
0.00%
0 / 1
ClientManagementController
0.00% covered (danger)
0.00%
0 / 283
0.00% covered (danger)
0.00%
0 / 42
6972
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 test
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 1
2
 reporting_licenses
0.00% covered (danger)
0.00%
0 / 12
0.00% covered (danger)
0.00%
0 / 1
6
 reporting_roi_spotlight
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
12
 reporting_characters_typed_spotlight
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
12
 reporting_total_fly_grammar_spotlight
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
12
 reporting_total_fly_grammar_accepted_spotlight
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
12
 reporting_total_fly_grammar_autocorrect_spotlight
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
12
 reporting_total_fly_grammar_autocomplete_spotlight
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
12
 reporting_flymsg_coach_level
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
12
 reporting_flycuts_used
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
12
 reporting_flycuts_created
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
12
 reporting_flycuts_used_top_users
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
2
 reporting_flycuts_created_top_users
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
2
 reporting_flyplates_added
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
12
 reporting_flyplates_added_top_users
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
2
 reporting_extension_usage
0.00% covered (danger)
0.00%
0 / 11
0.00% covered (danger)
0.00%
0 / 1
2
 reporting_characters_typed_saving_top_users
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
2
 getTop5
0.00% covered (danger)
0.00%
0 / 24
0.00% covered (danger)
0.00%
0 / 1
30
 reporting_time_saving_top_users
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
2
 reporting_cost_saving_top_users
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
2
 reporting_fly_grammar_top_users
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
2
 reporting_fly_grammar_accepted_top_users
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
2
 reporting_fly_grammar_autocorrect_top_users
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
2
 reporting_fly_grammar_autocomplete_top_users
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
2
 reporting_productivity_spotlight
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
12
 reporting_get_columns
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
2
 reporting_user_details
0.00% covered (danger)
0.00%
0 / 8
0.00% covered (danger)
0.00%
0 / 1
2
 reporting_active_users
0.00% covered (danger)
0.00%
0 / 11
0.00% covered (danger)
0.00%
0 / 1
2
 reporting_sentence_rewrite_ai
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
12
 reporting_sentence_rewrite_ai_used_top_users
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
2
 reporting_paragraph_rewrite_ai
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
12
 reporting_paragraph_rewrite_ai_used_top_users
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
2
 reporting_flyengage_ai
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
12
 reporting_flyengage_ai_used_top_users
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
2
 reporting_flypost_ai
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
12
 reporting_flypost_ai_used_top_users
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
2
 export_csv_report
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
6
 export_csv_report_overview
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 export_csv_report_usage
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
20
 getFiltersForReporting
0.00% covered (danger)
0.00%
0 / 22
0.00% covered (danger)
0.00%
0 / 1
12
 getPeriod
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3namespace App\Http\Controllers\v1\AdminPortal;
4
5use App\Http\Models\Auth\User;
6use Illuminate\Http\Request;
7use Illuminate\Support\Carbon;
8use App\Http\Controllers\Controller;
9use App\Exports\AllUsersReportExport;
10use App\Exports\AllUsersReportUsageExport;
11use App\Actions\ReportingGetColumnsRequest;
12use App\DTO\ReportingActiveUsersRequestDTO;
13use App\DTO\ReportingUserDetailsRequestDTO;
14use App\Actions\ReportingActiveUsersRequest;
15use App\Actions\ReportingUserDetailsRequest;
16use App\Exports\AllUsersReportOverviewExport;
17use App\DTO\ReportingExtensionUsageRequestDTO;
18use App\Actions\ReportingExtensionUsageRequest;
19use App\Actions\ReportingCostSavedTopUsersRequest;
20use App\Actions\ReportingTimeSavedTopUsersRequest;
21use App\Http\Requests\AdminReportingTopUsersRequest;
22use App\Actions\ReportingFlyCutsCreatedTopUsersRequest;
23use App\Actions\ReportingFlyPlatesAddedTopUsersRequest;
24use App\Actions\ReportingCharactersTypedSavingTopUsersRequest;
25use App\DTO\AccountCenter\Reporting\ReportingRequestDTO;
26use App\Http\Requests\ReportingFormRequest;
27use App\Http\Services\Admin\Reports\AccountCenterReportingService;
28use App\Http\Services\Admin\Reports\FindUsersOverviewFilter;
29use App\Http\Services\Admin\Reports\MgmtCenterReportingService;
30use Illuminate\Support\Facades\Log;
31
32class 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}