/ app / Http / Services / EtrService.php
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  }