Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
7.89% covered (danger)
7.89%
3 / 38
0.00% covered (danger)
0.00%
0 / 1
CRAP
0.00% covered (danger)
0.00%
0 / 1
CompanyAuth
7.89% covered (danger)
7.89%
3 / 38
0.00% covered (danger)
0.00%
0 / 1
105.55
0.00% covered (danger)
0.00%
0 / 1
 handleAdminInvitation
7.89% covered (danger)
7.89%
3 / 38
0.00% covered (danger)
0.00%
0 / 1
105.55
1<?php
2
3namespace App\Traits;
4
5use App\Http\Models\Plans;
6use App\Http\Models\Admin\CompanyLicenses;
7use App\Http\Models\Admin\AdminUserInvitation;
8
9trait CompanyAuth
10{
11    public function handleAdminInvitation($user)
12    {
13        $invitation = AdminUserInvitation::firstWhere('email', $user?->email);
14
15        if (!$invitation) {
16            return;
17        }
18
19        $user->status = "Active";
20        $user->activation_date = now()->toDateTimeString();
21
22        if ($invitation->company_id) {
23            $user->company_id = $invitation->company_id;
24        }
25
26        if ($invitation->company_group_id || $invitation->company_subgroup_id) {
27            $user->company_group_id = $invitation->company_group_id ?? $invitation->company_subgroup_id;
28        }
29
30        $user->save();
31
32        if ($invitation->plan_id) {
33            $plan = Plans::find($invitation->plan_id);
34
35            if ($plan) {
36                // Assign a Plan Only if the current plan is not it.
37                if ($user->subscribed('main')) {
38                    $user->subscription('main')->cancel();
39                } else {
40                    $subscription = $user->subscriptions()->latest()->first();
41                    if ($subscription) {
42                        $subscription->markAsCancelledOnlyInDB();
43                    }
44                }
45
46                $company_license = CompanyLicenses::where('company_id', $user->company_id)
47                    ->active()
48                    ->first();
49
50                $end_date = $company_license->contract_end_date;
51
52                $user->subscriptions()->create([
53                    'name' => 'main',
54                    'stripe_status' => 'active',
55                    'stripe_plan' => $plan->stripe_id,
56                    'quantity' => "1",
57                    'ends_at' => $end_date,
58                    'starts_at' => now()->toDateTimeString(),
59                ]);
60
61                $company_license->reduceCompanyLicenseCountForNewUsers($plan);
62            }
63        }
64
65        if ($invitation->role_name) {
66            $user->assignRole($invitation->role_name, []);
67        }
68
69        $invitation->delete();
70
71        if ($user->company?->pocs()?->where('email', $user->email)?->exists()) {
72            return [
73                'company_poc' => true
74            ];
75        }
76    }
77}