Laboratory.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 Laboratory extends Model 12 { 13 use HasFactory, LogsActivity, SoftDeletes; 14 15 protected $fillable = ['code', 'name', 'is_active']; 16 17 public static function create(array $data = []) 18 { 19 $laboratory = static::query()->create([ 20 'code' => $data['code'], 21 'name' => $data['name'], 22 ]); 23 24 PointOfContact::create([ 25 'address' => array_key_exists('address', $data) ? $data['address'] : null, 26 'phone' => array_key_exists('phone', $data) ? $data['phone'] : null, 27 'email' => array_key_exists('email', $data) ? $data['email'] : null, 28 'gpg' => array_key_exists('gpg', $data) ? $data['gpg'] : null, 29 'principal' => true, 30 'point_of_contact_type_id' => PointOfContactType::LABORATORY, 31 'laboratory_id' => $laboratory->id, 32 ]); 33 34 return $laboratory; 35 } 36 37 public function pointsOfContact() 38 { 39 return $this->hasMany(PointOfContact::class); 40 } 41 42 public function principalPointOfContact() 43 { 44 return $this->hasOne(PointOfContact::class)->where('principal', true); 45 } 46 47 public function representatives() 48 { 49 return $this->hasMany(LaboratoryRepresentative::class); 50 } 51 52 public function evaluators() 53 { 54 return $this->hasMany(Evaluator::class); 55 } 56 57 public function dossiers() 58 { 59 return $this->hasMany(Dossier::class); 60 } 61 62 public function laboratoryLogs() 63 { 64 return $this->hasMany(LaboratoryLog::class); 65 } 66 67 public function history() 68 { 69 return $this->hasMany(EvaluatorLaboratoryHistory::class); 70 } 71 72 public function audits() 73 { 74 return $this->hasMany(Audit::class); 75 } 76 77 public function getActivitylogOptions(): LogOptions 78 { 79 return LogOptions::defaults() 80 ->logOnly(['name', 'code']) 81 ->logOnlyDirty() 82 ->dontSubmitEmptyLogs(); 83 } 84 }