/ app / Http / Livewire / Jsons / CAPView.php
CAPView.php
  1  <?php
  2  
  3  namespace App\Http\Livewire\Jsons;
  4  
  5  use App\Models\Json;
  6  use App\Models\JsonDraft;
  7  use Illuminate\Support\Collection;
  8  use Livewire\Component;
  9  use Livewire\WithPagination;
 10  
 11  class CAPView extends BaseJsonView
 12  {
 13      public $isCAPData = true;
 14  
 15      public function getReferencesProperty()
 16      {
 17          $references = collect($this->json->json['references']);
 18          return $this->getPaginate($references, 'references');
 19      }
 20  
 21      public function getObservationsProperty()
 22      {
 23          $observations = collect($this->json->json['observations']);
 24          return $this->getPaginate($observations, 'observations');
 25      }
 26  
 27      public function getValidationReference(Json|JsonDraft $json)
 28      {
 29          return $json->json['information']['validationReference'];
 30      }
 31  
 32      public function diffedReferences()
 33      {
 34          $olds = collect($this->oldJson->json['references']);
 35          $news = collect($this->json->json['references']);
 36          $result = [];
 37          $used = [];
 38  
 39          foreach ($news as $new) {
 40  
 41              $used[] = $new['reference'];
 42              $aux = $olds->where('reference', $new['reference'])->first();
 43  
 44              $result[] = [
 45                  'reference' => $this->applyDiff($new['reference'] ?? '', $aux['reference'] ?? ''),
 46                  'meaning' => $this->applyDiff($new['meaning'] ?? '', $aux['meaning'] ?? ''),
 47              ];
 48          }
 49  
 50          foreach ($olds->whereNotIn('reference', $used) as $old) {
 51              $result[] = [
 52                  'reference' => $this->applyDiff('', $old['reference']),
 53                  'meaning' => $this->applyDiff('', $old['meaning']),
 54              ];
 55          }
 56  
 57          return $this->getPaginate(collect($result), 'comments');
 58      }
 59  
 60      public function diffedIterations($node)
 61      {
 62          $oldsNonconformities  = collect($this->oldJson->json[$node]);
 63          $newsNonconformities = collect($this->json->json[$node]);
 64          $result = [];
 65          $used = [];
 66  
 67          foreach ($newsNonconformities as $newNonconformity) {
 68              $iterations = collect($newNonconformity['iterations']);
 69              $iterationResult = [];
 70              $used[$newNonconformity['id']] = $iterations->count();
 71  
 72              foreach ($iterations as $key => $iteration) {
 73                  $aux = collect(
 74                      $oldsNonconformities
 75                      ->where('id', $newNonconformity['id'])
 76                      ->first()['iterations'] ?? []
 77                  )->values()->get($key);
 78  
 79                  $iterationResult[] = [
 80                      'description' => $this->applyDiff($iteration['description'] ?? '', $aux['description'] ?? ''),
 81                      'causeAnalysis' => $this->applyDiff($iteration['causeAnalysis'] ?? '', $aux['causeAnalysis'] ?? ''),
 82                      'correction' => $this->applyDiff($iteration['correction'] ?? '', $aux['correction'] ?? ''),
 83                      'correctiveAction' => $this->applyDiff($iteration['correctiveAction'] ?? '', $aux['correctiveAction'] ?? ''),
 84                      'evidence' => $this->applyDiff(implode(', ', $iteration['evidence'] ?? []), implode(', ', $aux['evidence'] ?? [])),
 85                  ];
 86              }
 87  
 88              $result[$newNonconformity['id']] = [
 89                  'id' => $newNonconformity['id'],
 90                  'iterations' => $iterationResult,
 91              ];
 92          }
 93  
 94          foreach ($oldsNonconformities as $oldNonconformity) {
 95              $iterations = collect($oldNonconformity['iterations'])->slice(
 96                  $used[$oldNonconformity['id']] ?? 0
 97              )->values([]);
 98              $iterationResult = [];
 99  
100              foreach ($iterations as $iteration) {
101  
102                  $iterationResult[] = [
103                      'description' => $this->applyDiff('', $iteration['description']),
104                      'causeAnalysis' =>  $this->applyDiff('', $iteration['causeAnalysis']),
105                      'correction' =>  $this->applyDiff('', $iteration['correction']),
106                      'correctiveAction' => $this->applyDiff('', $iteration['correctiveAction']),
107                      'evidence' => $this->applyDiff('', implode(', ', $iteration['evidence'])),
108                  ];
109              }
110  
111              $result[$oldNonconformity['id']] = [
112                  'id' => $oldNonconformity['id'],
113                  'iterations' => array_merge(
114                      $result[$oldNonconformity['id']]['iterations'] ?? [],
115                      $iterationResult),
116              ];
117          }
118  
119          return $this->getPaginate(collect($result), 'iterations_' . $node);
120      }
121  
122      public function render()
123      {
124          return view('livewire.jsons.cap-view')
125              ->layoutData([
126                  'title' => $this->json->schema_name,
127                  'entity' => $this->json,
128                  'breadcrumb' => 'jsons.view',
129              ]);
130      }
131  }