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 }