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