EtrService.php
1 <?php 2 3 namespace App\Http\Services; 4 5 use App\Enums\ValidationStatusEnum; 6 use App\Enums\InboxFileStatusEnum; 7 use App\Enums\InboxFileTypeEnum; 8 use App\Models\Document; 9 use App\Models\DocumentType; 10 use App\Models\Dossier; 11 use App\Models\Validation; 12 use Illuminate\Contracts\Database\Query\Builder; 13 use Illuminate\Support\Str; 14 15 class EtrService 16 { 17 /** 18 * @param Dossier $dossier 19 * @return array|bool of missing ETRps 20 */ 21 public static function checkETRps(Dossier $dossier): array|bool 22 { 23 return collect(self::getETRpStrings($dossier))->filter(function ($etrp) use ($dossier){ 24 return self::shouldAcceptEtrp($etrp, $dossier); 25 })->toArray(); 26 } 27 28 public static function shouldAcceptEtrp(string $class, Dossier $dossier): bool 29 { 30 $validEtrps = self::getETRpStrings($dossier); 31 if (!in_array($class, $validEtrps)) { 32 return false; // No es una clase válida para este dossier 33 } 34 35 // Encuentra si existe un inboxfile de tipo parcial que esté revisado, 36 // que tenga un informe y que el informe esté a falla. 37 $hasPassedEtrp = $dossier 38 ->inboxFiles() 39 ->whereNot('status_id', InboxFileStatusEnum::pending()->value) 40 ->whereType(InboxFileTypeEnum::partial_report()->value) 41 ->where('name', 'like', '%' . $class . '%') 42 ->whereHas('validation', function ($query) { 43 $query 44 ->whereHas('validatedReport') 45 ->whereValidationStatusId(ValidationStatusEnum::pass()->value); 46 }) 47 ->exists(); 48 49 return !$hasPassedEtrp; 50 } 51 52 53 public static function getETRpStrings(Dossier $dossier): array 54 { 55 $data = $dossier->norm->normGroup->mandatory_etrp; 56 if (empty($data)) 57 return []; 58 59 return explode(',', $data); 60 } 61 }