Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
88.89% covered (warning)
88.89%
8 / 9
88.89% covered (warning)
88.89%
8 / 9
CRAP
0.00% covered (danger)
0.00%
0 / 1
Company
88.89% covered (warning)
88.89%
8 / 9
88.89% covered (warning)
88.89%
8 / 9
11.17
0.00% covered (danger)
0.00%
0 / 1
 getRoleplayAddonAccessAttribute
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
2
 getCompanyRoleplayAddonIdAttribute
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
2
 users
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 invitedUsers
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 pocs
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 active_license
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 licenses
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 groupsAndSubgroups
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 newFactory
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3namespace App\Http\Models\Admin;
4
5use App\Http\Models\Auth\User;
6use App\Http\Models\Moloquent;
7use App\Observers\CompanyObserver;
8use Database\Factories\Http\Models\CompanyFactory;
9use Illuminate\Database\Eloquent\Attributes\ObservedBy;
10use Illuminate\Database\Eloquent\Factories\HasFactory;
11use Illuminate\Notifications\Notifiable;
12use MongoDB\Laravel\Eloquent\SoftDeletes;
13
14/**
15 * @property string $name
16 * @property string|null $address_line_1
17 * @property string|null $address_line_2
18 * @property string|null $city
19 * @property string|null $state
20 * @property string|null $zip
21 * @property string|null $country
22 * @property string|null $slug
23 * @property string|null $instancy_id
24 * @property \Illuminate\Support\Carbon|null $deactivated_at
25 * @property string $roleplay_addon_access
26 * @property string|null $company_roleplay_addon_id
27 * @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Http\Models\Auth\User> $users
28 */
29#[ObservedBy([CompanyObserver::class])]
30class Company extends Moloquent
31{
32    use HasFactory, Notifiable, SoftDeletes;
33
34    public const ROLEPLAY_ACCESS_HIDDEN = 'hidden';
35
36    public const ROLEPLAY_ACCESS_VIEW_ONLY = 'view_only';
37
38    public const ROLEPLAY_ACCESS_CAN_PURCHASE = 'can_purchase';
39
40    public const ROLEPLAY_ACCESS_VALUES = [
41        self::ROLEPLAY_ACCESS_HIDDEN,
42        self::ROLEPLAY_ACCESS_VIEW_ONLY,
43        self::ROLEPLAY_ACCESS_CAN_PURCHASE,
44    ];
45
46    protected $fillable = [
47        'name',
48        'address_line_1',
49        'address_line_2',
50        'city',
51        'state',
52        'zip',
53        'country',
54        'slug',
55        'instancy_id',
56        'deactivated_at',
57        'roleplay_addon_access',
58        'company_roleplay_addon_id',
59    ];
60
61    protected $casts = [
62        'deactivated_at' => 'datetime',
63    ];
64
65    protected $attributes = [
66        'roleplay_addon_access' => self::ROLEPLAY_ACCESS_CAN_PURCHASE,
67        'company_roleplay_addon_id' => null,
68    ];
69
70    public function getRoleplayAddonAccessAttribute($value): string
71    {
72        return $value ?: self::ROLEPLAY_ACCESS_CAN_PURCHASE;
73    }
74
75    public function getCompanyRoleplayAddonIdAttribute($value): ?string
76    {
77        return $value ?: null;
78    }
79
80    public function users()
81    {
82        return $this->hasMany(User::class);
83    }
84
85    public function invitedUsers()
86    {
87        return $this->hasMany(AdminUserInvitation::class, 'company_id');
88    }
89
90    /**
91     * Company point of contact persons
92     *
93     * @return \Illuminate\Database\Eloquent\Relations\HasMany
94     */
95    public function pocs()
96    {
97        return $this->hasMany(CompanyPOC::class);
98    }
99
100    public function active_license()
101    {
102        return $this->licenses()->whereBetween('status', 'active')->first();
103    }
104
105    public function licenses()
106    {
107        return $this->hasMany(CompanyLicenses::class);
108    }
109
110    public function groupsAndSubgroups()
111    {
112        return $this->hasMany(CompanyGroup::class);
113    }
114
115    protected static function newFactory()
116    {
117        return CompanyFactory::new();
118    }
119}