Evaluator.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 Evaluator extends Model 12 { 13 use HasFactory, LogsActivity, SoftDeletes; 14 15 protected $fillable = ['name', 'laboratory_id', 'identification_number', 'email']; 16 17 public function skills() 18 { 19 return $this->hasMany(EvaluatorSkill::class); 20 } 21 22 public function laboratory() 23 { 24 return $this->belongsTo(Laboratory::class); 25 } 26 27 public function isInDossier(Dossier $dossier) 28 { 29 $evaluators = $dossier->evaluators->toArray(); 30 31 return in_array($this->id, array_column($evaluators, 'id')); 32 } 33 34 public function dossier() 35 { 36 return $this->belongsToMany(Dossier::class, 'evaluator_dossier', 'evaluator_id', 'dossier_id'); 37 } 38 39 public function laboratoryHistory() 40 { 41 return $this->hasMany(EvaluatorLaboratoryHistory::class); 42 } 43 44 public function dossierHistory() 45 { 46 return $this->hasMany(EvaluatorDossierHistory::class); 47 } 48 49 public function meetAssistants() 50 { 51 return $this->hasMany(MeetAssistant::class); 52 } 53 54 public function meets() 55 { 56 $assistants = $this->meetAssistants; 57 58 $meetIds = []; 59 60 foreach ($assistants as $assistant) { 61 $meetIds[$assistant->meet_id] = true; 62 } 63 64 return Meet::whereIn('id', array_keys($meetIds))->get(); 65 } 66 67 public function isInMeet(Meet $meet) 68 { 69 $evaluators = $meet->assistants->where('meet_assistant_type_id', MeetAssistantType::EVALUATOR)->toArray(); 70 71 return in_array($this->id, array_column($evaluators, 'id')); 72 } 73 74 public function getActivitylogOptions(): LogOptions 75 { 76 return LogOptions::defaults() 77 ->logOnly([ 78 'name', 79 'laboratory_id', 80 'laboratory.name', 81 'identification_number', 82 'email', 83 ])->logOnlyDirty() 84 ->dontSubmitEmptyLogs(); 85 } 86 }