/ app / Models / Evaluator.php
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  }