Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 75
0.00% covered (danger)
0.00%
0 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
AllUsersReportUsageExport
0.00% covered (danger)
0.00%
0 / 75
0.00% covered (danger)
0.00%
0 / 3
110
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
2
 array
0.00% covered (danger)
0.00%
0 / 46
0.00% covered (danger)
0.00%
0 / 1
56
 headings
0.00% covered (danger)
0.00%
0 / 23
0.00% covered (danger)
0.00%
0 / 1
6
1<?php
2
3namespace App\Exports;
4
5use App\Http\Models\Auth\User;
6use App\Http\Models\Chart;
7use App\Http\Models\HubspotProperties;
8use Carbon\CarbonPeriod;
9use Vitorccs\LaravelCsv\Concerns\Exportable;
10use Vitorccs\LaravelCsv\Concerns\FromArray;
11use Vitorccs\LaravelCsv\Concerns\WithHeadings;
12
13class AllUsersReportUsageExport implements FromArray, WithHeadings
14{
15    use Exportable;
16
17    public $admin;
18
19    public $from_date;
20
21    public $to_date;
22
23    public $user_ids;
24
25    public $group_ids;
26
27    public $subgroup_ids;
28
29    public function __construct($admin, $from_date, $to_date, $user_ids, $group_ids, $subgroup_ids)
30    {
31        $this->admin = $admin;
32        $this->from_date = $from_date;
33        $this->to_date = $to_date;
34        $this->user_ids = $user_ids;
35        $this->group_ids = $group_ids;
36        $this->subgroup_ids = $subgroup_ids;
37    }
38
39    public function array(): array
40    {
41        $users = User::select([
42            'id',
43            'first_name',
44            'last_name',
45            'company_group_id',
46            'company_id',
47            'deleted_at',
48            'avatar',
49        ]);
50
51        if (! empty($this->user_ids)) {
52            $users = $users->whereIn('id', $this->user_ids);
53        }
54
55        if (! empty($this->group_ids)) {
56            $users = $users->whereIn('company_group_id', $this->group_ids);
57        }
58
59        $users = $users->get();
60        $ids = $users->pluck('id')->toArray();
61
62        $properties = HubspotProperties::whereIn('flymsg_id', $ids)
63            ->get();
64
65        $period = CarbonPeriod::create($this->from_date, $this->to_date);
66        $data = [];
67
68        foreach ($properties as $property) {
69            $row = [
70                'first_name' => $property->firstname ?? '',
71                'last_name' => $property->lastname ?? '',
72                'email' => $property->email ?? '',
73                'license_type' => $property->subscription_type ?? '',
74                'flymsg_account_creation_date' => $property->account_creation_date ?? '',
75                'extension_installed_on_any_browser' => ($property->flymsg_chrome_extension_installed == 'Yes' || $property->flymsg_edge_extension_installed == 'Yes') ? 'Yes' : 'No',
76                'last_login_to_flymsg' => $property->last_login ?? '',
77                'sentence_rewrite_ai_used' => $property->total___of_times_sentence_rewrite_used__count_ ?? 0,
78                'paragraph_rewrite_ai_used' => $property->total___of_times_paragraph_rewrite_used__count_ ?? 0,
79                'flyengage_ai_used' => $property->total___of_times_flyengage_used__count_ ?? 0,
80                'flyposts_ai_used' => $property->total___of_times_flyposts_used__count_ ?? 0,
81                'no_of_flycuts_created' => $property->number_of_flycuts_created_count ?? 0,
82                'no_of_flyplates_added_to_flycuts' => $property->number_of_flyplates_in_flycuts_count ?? 0,
83                'characters_typed_by_flymsg' => round($property->total___of_characters_typed_by_flymsg_by_user, 0) ?? 0,
84                'time_saved_by_flymsg' => round($property->total_time_saved_by_flymsg_by_user, 2) ?? 0,
85                'cost_saved_by_flymsg' => round($property->total_cost_savings_by_flymsg_by_user, 2) ?? 0,
86            ];
87
88            foreach ($period as $date) {
89                $month_year = $date->format('M Y');
90                $flychart = Chart::where('user_id', $property->flymsg_id)->where('month_year', $month_year)->first();
91                $row["characters_typed_by_flymsg___$month_year"] = $flychart->characters_typed ?? 0;
92                $row["time_saved_by_flymsg___$month_year"] = $flychart->time_saved ?? 0;
93                $row["cost_saved_by_flymsg___$month_year"] = $flychart->cost_saved ?? 0;
94            }
95
96            $data[] = $row;
97        }
98
99        return $data;
100    }
101
102    public function headings(): array
103    {
104        $headers = [
105            'Firstname',
106            'Lastname',
107            'Email',
108            'License Type',
109            'FlyMSG Account Creation Date',
110            'Extension Installed on Any Browser',
111            'Last Login to FlyMSG',
112            'Total # of Times FlyEngage AI Used (Count)',
113            'Total # of Times FlyPosts AI Used (Count)',
114            '# of FlyCuts Created (Count)',
115            '# of FlyPlates Added to FlyCuts (Count)',
116            'Total # of Characters Typed by FlyMSG by User',
117            'Total Time Saved by FlyMSG by User',
118            'Total Cost Savings by FlyMSG by User',
119        ];
120
121        $period = CarbonPeriod::create($this->from_date, '1 month', $this->to_date);
122
123        foreach ($period as $date) {
124            $month_year = $date->format('M Y');
125            $headers[] = "Total # of Characters Typed by FlyMSG by User $month_year";
126            $headers[] = "Total Time Saved by FlyMSG by User $month_year";
127            $headers[] = "Total Cost Savings by FlyMSG by User $month_year";
128        }
129
130        return $headers;
131    }
132}