Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
36 / 36
100.00% covered (success)
100.00%
1 / 1
CRAP
100.00% covered (success)
100.00%
1 / 1
FlyMsgUserDailyUsage
100.00% covered (success)
100.00%
36 / 36
100.00% covered (success)
100.00%
1 / 1
3
100.00% covered (success)
100.00%
1 / 1
 GenerateNewRecord
100.00% covered (success)
100.00%
36 / 36
100.00% covered (success)
100.00%
1 / 1
3
1<?php
2
3namespace App\Http\Models;
4
5use App\Http\Models\Admin\CompanyGroup;
6use App\Http\Models\Auth\User;
7use App\Observers\FlyMsgUserDailyUsageObserver;
8use Carbon\Carbon;
9use Illuminate\Database\Eloquent\Attributes\ObservedBy;
10use Illuminate\Notifications\Notifiable;
11
12/**
13 * @property string $user_id
14 * @property string|null $hubspot_id
15 * @property int|null $year
16 * @property int|null $month
17 * @property int|null $day
18 * @property string|null $date
19 * @property string|null $company_id
20 * @property string|null $email_domain
21 * @property string|null $user_status
22 * @property string|null $group_id
23 * @property string|null $subgroup_id
24 * @property string|null $category
25 * @property float|null $time_saved
26 * @property float|null $cost_savings
27 * @property int|null $characters_typed
28 * @property int|null $flycuts_created
29 * @property int|null $flyplates_added
30 * @property int|null $flyengage_count
31 * @property int|null $sentence_rewrite_count
32 * @property int|null $paragraph_rewrite_count
33 * @property int|null $flypost_count
34 * @property int|null $flycut_count
35 * @property int|null $fly_grammar_actions
36 * @property int|null $fly_grammar_accepted
37 * @property int|null $fly_grammar_autocorrect
38 * @property int|null $fly_grammar_autocomplete
39 * @property int|null $roleplay_personas_created
40 * @property int|null $roleplay_sessions_practiced
41 * @property int|null $roleplay_time_practiced
42 * @property float|null $roleplay_daily_avg_score
43 */
44#[ObservedBy([FlyMsgUserDailyUsageObserver::class])]
45class FlyMsgUserDailyUsage extends Moloquent
46{
47    use Notifiable;
48
49    protected $table = 'fly_msg_user_daily_usage';
50
51    protected $fillable = [
52        'user_id',
53        'hubspot_id',
54        'year',
55        'month',
56        'day',
57        'date',
58        'company_id',
59        'email_domain',
60        'user_status',
61        'group_id',
62        'subgroup_id',
63        'category',
64        'time_saved',
65        'cost_savings',
66        'characters_typed',
67        'flycuts_created',
68        'flyplates_added',
69        'flyengage_count',
70        'sentence_rewrite_count',
71        'paragraph_rewrite_count',
72        'flypost_count',
73        'flycut_count',
74        'fly_grammar_actions',
75        'fly_grammar_accepted',
76        'fly_grammar_autocorrect',
77        'fly_grammar_autocomplete',
78        'roleplay_personas_created',
79        'roleplay_sessions_practiced',
80        'roleplay_time_practiced',
81        'roleplay_daily_avg_score',
82        'updated_at',
83        'created_at',
84    ];
85
86    public static function GenerateNewRecord(
87        int $year,
88        int $month,
89        int $day,
90        string $user_id,
91        float $time_saved,
92        float $cost_savings,
93        int $characters_typed,
94        int $flycuts_created,
95        int $flyplates_added,
96        int $flyengage_count,
97        int $sentence_rewrite_count,
98        int $paragraph_rewrite_count,
99        int $flypost_count,
100        int $flycut_count,
101        int $fly_grammar_actions,
102        int $fly_grammar_accepted,
103        int $fly_grammar_autocorrect,
104        int $fly_grammar_autocomplete,
105        int $roleplay_personas_created = 0,
106        int $roleplay_sessions_practiced = 0,
107        int $roleplay_time_practiced = 0,
108        float $roleplay_daily_avg_score = 0.0,
109    ) {
110        $user = User::find($user_id);
111        $findByDate = new FlyMsgUserDailyUsage;
112        $findByDate->user_id = $user_id;
113        $findByDate->hubspot_id = $user->hubspot_id;
114        $findByDate->year = $year;
115        $findByDate->month = $month;
116        $findByDate->day = $day;
117        $findByDate->date = new \MongoDB\BSON\UTCDateTime(Carbon::create($year, $month, $day)->timestamp * 1000);
118        $findByDate->email_domain = strrchr($user->email, '@');
119        $findByDate->user_status = $user->status ?? 'Active';
120        $findByDate->company_id = $user->company_id;
121
122        $group = CompanyGroup::find($user->company_group_id);
123        if (! empty($group?->parent_id)) {
124            $findByDate->subgroup_id = $user->company_group_id;
125            $findByDate->group_id = $group->parent_id;
126        } else {
127            $findByDate->group_id = $user->company_group_id;
128        }
129
130        $findByDate->category = $user->company_id ? 'corporate' : 'individual';
131        $findByDate->time_saved = $time_saved;
132        $findByDate->cost_savings = $cost_savings;
133        $findByDate->characters_typed = $characters_typed;
134        $findByDate->flycuts_created = $flycuts_created;
135        $findByDate->flyplates_added = $flyplates_added;
136        $findByDate->flyengage_count = $flyengage_count;
137        $findByDate->sentence_rewrite_count = $sentence_rewrite_count;
138        $findByDate->paragraph_rewrite_count = $paragraph_rewrite_count;
139        $findByDate->flypost_count = $flypost_count;
140        $findByDate->flycut_count = $flycut_count;
141        $findByDate->fly_grammar_actions = $fly_grammar_actions;
142        $findByDate->fly_grammar_accepted = $fly_grammar_accepted;
143        $findByDate->fly_grammar_autocorrect = $fly_grammar_autocorrect;
144        $findByDate->fly_grammar_autocomplete = $fly_grammar_autocomplete;
145        $findByDate->roleplay_personas_created = $roleplay_personas_created;
146        $findByDate->roleplay_sessions_practiced = $roleplay_sessions_practiced;
147        $findByDate->roleplay_time_practiced = $roleplay_time_practiced;
148        $findByDate->roleplay_daily_avg_score = $roleplay_daily_avg_score;
149        $findByDate->save();
150    }
151}