Validation.php
1 <?php 2 3 namespace App\Models; 4 5 use App\Enums\ValidationRequirementStatusEnum; 6 use App\Enums\ValidationStatusEnum; 7 use Illuminate\Database\Eloquent\Collection; 8 use Illuminate\Database\Eloquent\Factories\HasFactory; 9 use Illuminate\Database\Eloquent\Model; 10 use Illuminate\Database\Eloquent\SoftDeletes; 11 use Spatie\Activitylog\LogOptions; 12 use Spatie\Activitylog\Traits\LogsActivity; 13 14 class Validation extends Model 15 { 16 use HasFactory, LogsActivity, SoftDeletes; 17 18 protected $fillable = ['validation_status_id', 'validated_at', 'validation_type_id', 'name', 'validated_report_id', 'original_dossier_id', 'reference']; 19 20 public function type() 21 { 22 return $this->belongsTo(ValidationType::class, 'validation_type_id'); 23 } 24 25 public function workbooks() 26 { 27 return $this->type->norm ? $this->type->norm->workbooks : null; 28 } 29 30 public function validatedReport() 31 { 32 return $this->belongsTo(Document::class, 'validated_report_id'); 33 } 34 35 public function status() 36 { 37 return $this->belongsTo(ValidationStatus::class, 'validation_status_id'); 38 } 39 40 public function requirements() 41 { 42 return $this->hasMany(ValidationRequirement::class); 43 } 44 45 public function inboxFile() 46 { 47 return $this->hasOne(InboxFile::class); 48 } 49 50 public function jsonDraft() 51 { 52 return $this->hasOne(JsonDraft::class); 53 } 54 55 public function dossier() 56 { 57 return $this->hasOneThrough(Dossier::class, InboxFile::class, 'validation_id', 'dossier_id',); 58 } 59 60 public function checkStatus() 61 { 62 $flag = ValidationRequirement::select('*') 63 ->where([ 64 ['validation_id', $this->id], 65 ['validation_requirement_status_id', '!=', ValidationRequirementStatusEnum::pass()->value], 66 ]) 67 ->exists(); 68 69 $this->update([ 70 'validation_status_id' => !$flag 71 ? ValidationStatusEnum::pass()->value 72 : ValidationStatusEnum::no_pass()->value, 73 ]); 74 75 return $this->status; 76 } 77 78 public function requirementResponses() 79 { 80 $requirements = $this->requirements; 81 $allResponses = new Collection; 82 83 if ($requirements && count($requirements) > 0) { 84 foreach ($requirements as $requirement) { 85 $responses = $requirement->responses; 86 87 if ($responses && count($responses) > 0) { 88 foreach ($responses as $response) { 89 $allResponses->push($response); 90 } 91 } 92 } 93 } 94 95 return $allResponses; 96 } 97 98 public function requirementResponseImages() 99 { 100 $responses = $this->requirementResponses(); 101 $allImages = new Collection; 102 103 if ($responses && count($responses) > 0) { 104 foreach ($responses as $response) { 105 $images = $response->images; 106 107 if ($images && count($images) > 0) { 108 foreach ($images as $image) { 109 $allImages->push($image); 110 } 111 } 112 } 113 } 114 115 return $allImages; 116 } 117 /** 118 * @deprecated 119 * dont use this method, use the relationship instead 120 */ 121 public function originalDossier() 122 { 123 return $this->belongsTo(Dossier::class, 'original_dossier_id'); 124 } 125 126 public function getActivitylogOptions(): LogOptions 127 { 128 return LogOptions::defaults() 129 ->logOnly([ 130 'validation_status_id', 131 'status.name', 132 'original_dossier_id', 133 'validated_report_id', 134 'validated_at', 135 'validation_type_id', 136 'type.name', 137 ])->logOnlyDirty() 138 ->dontSubmitEmptyLogs(); 139 } 140 }