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