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 }