/ app / Models / Company.php
Company.php
 1  <?php
 2  
 3  namespace App\Models;
 4  
 5  use Illuminate\Database\Eloquent\Factories\HasFactory;
 6  use Illuminate\Database\Eloquent\Model;
 7  use Illuminate\Database\Eloquent\SoftDeletes;
 8  use Spatie\Activitylog\LogOptions;
 9  use Spatie\Activitylog\Traits\LogsActivity;
10  
11  class Company extends Model
12  {
13      use HasFactory, LogsActivity, SoftDeletes;
14  
15      protected $fillable = ['name', 'cif', 'reason', 'juri', 'country_id'];
16  
17      public static function create(array $data = [])
18      {
19          $company = static::query()->create([
20              'name' => $data['name'],
21              'reason' => $data['reason'],
22              'juri' => $data['juri'],
23              'cif' => $data['cif'],
24              'country_id' => $data['country_id'],
25          ]);
26  
27          PointOfContact::create([
28              'address' => array_key_exists('address', $data) ? $data['address'] : null,
29              'phone' => array_key_exists('phone', $data) ? $data['phone'] : null,
30              'email' => array_key_exists('email', $data) ? $data['email'] : null,
31              'gpg' => array_key_exists('gpg', $data) ? $data['gpg'] : null,
32              'principal' => true,
33              'point_of_contact_type_id' => PointOfContactType::COMPANY,
34              'company_id' => $company->id,
35          ]);
36  
37          return $company;
38      }
39  
40      public function toes()
41      {
42          return $this->hasMany(TOE::class);
43      }
44  
45      public function country()
46      {
47          return $this->belongsTo(Country::class);
48      }
49  
50      public function pointsOfContact()
51      {
52          return $this->hasMany(PointOfContact::class);
53      }
54  
55      public function principalPointOfContact()
56      {
57          return $this->hasOne(PointOfContact::class)->where('principal', true);
58      }
59  
60      public function dossiersAsApplicant()
61      {
62          return $this->hasMany(Dossier::class, 'applicant_id');
63      }
64  
65      public function dossiersAsSponsor()
66      {
67          return $this->hasMany(Dossier::class, 'sponsor_id');
68      }
69  
70      public function dossiersAsManufacturer()
71      {
72          return $this->hasMany(Dossier::class, 'manufacturer_id');
73      }
74  
75      public function representatives()
76      {
77          return $this->hasMany(CompanyRepresentative::class);
78      }
79  
80      public function getActivitylogOptions(): LogOptions
81      {
82          return LogOptions::defaults()
83              ->logOnly(['name', 'cif', 'reason', 'juri', 'country_id', 'country.name'])
84              ->logOnlyDirty()
85              ->dontSubmitEmptyLogs();
86      }
87  }