/ database / seeders / RequirementTemplateSeeder.php
RequirementTemplateSeeder.php
 1  <?php
 2  
 3  namespace Database\Seeders;
 4  
 5  use App\Enums\InboxFileTypeEnum;
 6  use App\Models\RequirementTemplate;
 7  use App\Models\ValidationType;
 8  use File;
 9  use Illuminate\Database\Console\Seeds\WithoutModelEvents;
10  use Illuminate\Database\Eloquent\Collection;
11  use Illuminate\Database\Seeder;
12  use Illuminate\Database\Eloquent\Factories\Sequence;
13  
14  
15  class RequirementTemplateSeeder extends Seeder
16  {
17      /**
18       * Run the database seeds.
19       *
20       * @return void
21       */
22      public function run()
23      {
24          $lang = app()->getLocale();
25          $json = File::get('database/data/requirement-templates.json');
26          $data = json_decode($json, true)[$lang];
27          $validationTypes = ValidationType::all();
28  
29          foreach ($validationTypes as $validationType) {
30              if ($validationType->name == InboxFileTypeEnum::id2name(1)) {
31                  // Lista de requerimientos de Revisión de Solicitud de Certificacion (InformeValidacionSolicitudCertificacion)
32                  $this->createRequirementTemplates($validationType->id, 'RequestRequirement-', $data['reviewData']);
33              } else {
34                  // Lista de requerimientos de Validación ETR y Validación de Informe Parcial
35                  $this->createRequirementTemplates($validationType->id, 'Validation/F-', $data['validateData']);
36              }
37          }
38      }
39  
40      /**
41       * Creates requirements based on a set of data for a specific validation type.
42       *
43       * @param int $validationTypeId The ID of the validation type to which the requirements will be assigned.
44       * @param string $titlePrefix The prefix to be used for the title of each requirement.
45       * @param array $data The data of the requirements, in array format.
46       * @return Illuminate\Database\Eloquent\Collection The collection of created requirement templates.
47       */
48      private function createRequirementTemplates(int $validationTypeId, string $titlePrefix, array $data): Collection
49      {
50          return RequirementTemplate::factory()
51              ->count(count($data))
52              ->sequence(fn (Sequence $sequence) => [
53                  'title' => $titlePrefix . ($sequence->index + 1),
54                  'description' => $data[$sequence->index],
55              ])
56              ->create([
57                  'validation_type_id' => $validationTypeId,
58              ]);
59      }
60  }