/ resources / views / livewire / inbox-files / view.blade.php
view.blade.php
  1  <div>
  2      <x-card title="{{ $this->inboxFile->dossier->code ?? __('inbox-files.other.title') }}"
  3              headerClasses="bg-primary-600 rounded-t text-white">
  4  
  5          @can('viewAny', App\Models\Validation::class)
  6              <x-slot name="action">
  7                  <x-dropdown>
  8                      <x-slot name="trigger">
  9                          <button class="rounded-full focus:outline-none focus:ring-2 focus:ring-white">
 10                              <x-icon name="dots-vertical" class="w-4 h-4 text-white"/>
 11                          </button>
 12                      </x-slot>
 13                      <x-dropdown.item wire:click="openEditSidebar()" icon="pencil"
 14                                       label="{{ __('inbox-files.panel.buttons.edit') }}"/>
 15                      @if ($this->inboxFile->validation)
 16                          <x-dropdown.item wire:click="modalDescription()" icon="archive"
 17                                           label="{{ __('inbox-files.panel.buttons.process') }}"/>
 18                      @endif
 19                      <x-dropdown.item wire:click="downloadZIP()" icon="download"
 20                                       label="{{ __('inbox-files.panel.buttons.download_zip') }}"/>
 21  
 22                      @can('can_assign_validations')
 23                          @if ($inboxFile->dossier_id)
 24                              <x-dropdown.item
 25                                  x-on:click="Livewire.emit('openPanel', '{{ __('inbox-files.panel.title.assign_reviewer') }}', 'inbox-files.assign', {{ $this->inboxFile->id }})"
 26                                  icon="user" label="{{ __('inbox-files.panel.title.assign_reviewer') }}"/>
 27                          @endif
 28                      @endcan
 29                  </x-dropdown>
 30              </x-slot>
 31          @endcan
 32  
 33          <div class="flex flex-row space-x-4">
 34              <x-card title="{{ __('inbox-files.cards.information') }}" headerClasses=" rounded-t text-white"
 35                      cardClasses="mb-4 w-1/4">
 36  
 37                  <div class="grid gap-4">
 38                      <div class="flex flex-col">
 39                          <div class="text-sm font-medium text-gray-400">{{ __('inbox-files.dossier.document') }}
 40                          </div>
 41                          <div class="text-sm font-medium text-secondary-700">
 42                              {{ $this->zipName }}</div>
 43                      </div>
 44  
 45                      <div class="flex flex-col">
 46                          <div class="text-sm font-medium text-gray-400">{{ __('inbox-files.status.status') }}</div>
 47                          <x-select 
 48                              wire:model="inboxFileStatusId"
 49                              placeholder="{{ __('inbox-files.status.status') }}"
 50                              :options="App\Enums\InboxFileStatusEnum::cases()"
 51                              option-label="label"
 52                              option-value="value"
 53                              :clearable="false"
 54                          />
 55                      </div>
 56                      
 57                      @if ($this->inboxFile->dossier)
 58                          <div class="flex flex-col">
 59                              <div class="text-sm font-medium text-gray-400">{{ __('inbox-files.dossier.code') }}
 60                              </div>
 61                              <div class="text-sm font-medium text-secondary-700">
 62                                  {{ $this->inboxFile->dossier->code }}</div>
 63                          </div>
 64                          <div class="flex flex-col">
 65                              <div class="text-sm font-medium text-gray-400">{{ __('inbox-files.dossier.mode') }}
 66                              </div>
 67                              <div class="text-sm font-medium text-secondary-700">
 68                                  {{ $this->inboxFile->dossier->subtype->name }}</div>
 69                          </div>
 70                          <div class="flex flex-col">
 71                              <div class="text-sm font-medium text-gray-400">{{ __('inbox-files.dossier.norm') }}
 72                              </div>
 73                              <div class="text-sm font-medium text-secondary-700">
 74                                  {{ $this->inboxFile->dossier->norm->name }}
 75                              </div>
 76                          </div>
 77                          <div class="flex flex-col">
 78                              <div class="text-sm font-medium text-gray-400">{{ __('inbox-files.dossier.toe') }}
 79                              </div>
 80                              <div class="text-sm font-medium text-secondary-700">
 81                                  {{ $this->inboxFile->dossier->toe->name }}
 82                              </div>
 83                          </div>
 84                          <div class="flex flex-col">
 85                              <div class="text-sm font-medium text-gray-400">{{ __('inbox-files.dossier.applicant') }}
 86                              </div>
 87                              <div class="text-sm font-medium text-secondary-700">
 88                                  {{ $this->inboxFile->dossier->applicant->name ?? __('app.n/a') }}</div>
 89                          </div>
 90                          <div class="flex flex-col">
 91                              <div class="text-sm font-medium text-gray-400">{{ __('inbox-files.dossier.sponsor') }}
 92                              </div>
 93                              <div class="text-sm font-medium text-secondary-700">
 94                                  {{ $this->inboxFile->dossier->sponsor->name ?? __('app.n/a') }}</div>
 95                          </div>
 96                          <div class="flex flex-col">
 97                              <div class="text-sm font-medium text-gray-400">{{ __('inbox-files.dossier.manufacturer') }}
 98                              </div>
 99                              <div class="text-sm font-medium text-secondary-700">
100                                  {{ $this->inboxFile->dossier->manufacturer->name ?? __('app.n/a') }}</div>
101                          </div>
102                          <div class="flex flex-col">
103                              <div class="text-sm font-medium text-gray-400">{{ __('inbox-files.table.updated_at') }}
104                              </div>
105                              <div class="text-sm font-medium text-secondary-700">{{ $this->inboxFile->updated_at }}
106                              </div>
107                          </div>
108                      @else
109                          <div class="flex flex-col items-center w-full h-full m-auto">
110                              <span>{{ __('inbox-files.other.dossier') }}</span>
111                          </div>
112                      @endif
113                  </div>
114  
115  
116              </x-card>
117  
118              @if ($this->inboxFile->validation)
119                  <x-card title="{{ __('inbox-files.cards.requirements') }}" headerClasses=" rounded-t text-white"
120                          cardClasses="mb-4 w-3/4">
121  
122                      <div class="flex justify-end gap-2">
123                          <div class="font-medium">{{ __('inbox-files.validations.inf_verdict') }}</div>
124                          <x-validation-status statusId="{{ $this->inboxFile->validation->validation_status_id}}" />
125                      </div>
126  
127                      <div class="mt-3">
128  
129                      <x-table.table>
130                          <x-slot name="head">
131                              <x-table.heading sortable class="text-center">
132                                  {{ __('inbox-files.requirement.table.title') }}</x-table.heading>
133                              <x-table.heading sortable class="text-center">
134                                  {{ __('inbox-files.requirement.table.nonconformities') }}</x-table.heading>
135                              <x-table.heading sortable class="text-center">
136                                  {{ __('inbox-files.requirement.table.observations') }}</x-table.heading>
137                              <x-table.heading sortable class="text-center">
138                                  {{ __('inbox-files.requirement.table.comments') }}</x-table.heading>
139                              <x-table.heading sortable class="text-center">
140                                  {{ __('inbox-files.requirement.table.status') }}</x-table.heading>
141                          </x-slot>
142                          <x-slot name="body">
143                              @forelse($this->requirements ?? [] as $req)
144                                  <x-table.row wire:loading.class.delay="opacity-50" wire:ignore.self>
145                                      <x-table.cell wire:click="viewRow({{ $req->id }})"
146                                                    class="text-xs text-center text-gray-500">
147                                          {{ $req->title }}
148                                      </x-table.cell>
149  
150                                      <x-table.cell wire:click="viewRow({{ $req->id }})"
151                                                    class="text-xs text-center text-gray-500">
152                                          {{ $req->nonconformities()->count() }}
153                                      </x-table.cell>
154  
155                                      <x-table.cell wire:click="viewRow({{ $req->id }})"
156                                                    class="text-xs text-center text-gray-500">
157                                          {{ $req->observations()->count() }}
158                                      </x-table.cell>
159  
160                                      <x-table.cell wire:click="viewRow({{ $req->id }})"
161                                                    class="text-xs text-center text-gray-500">
162                                          {{ $req->comments()->count() }}
163                                      </x-table.cell>
164  
165  
166                                      <x-table.cell wire:click="viewRow({{ $req->id }})"
167                                                    class="text-xs text-center text-gray-500">
168                                          @if ($req->status->name == 'Pass')
169                                              <x-badge flat rounded positive
170                                                       label="{{ __('inbox-files.requirement.status.' . $req->status->name) }}"/>
171                                          @elseif($req->status->name == 'No pass')
172                                              <x-badge flat rounded negative
173                                                       label="{{ __('inbox-files.requirement.status.' . $req->status->name) }}"/>
174                                          @else
175                                              <x-badge flat rounded warning
176                                                       label="{{ __('inbox-files.requirement.status.' . $req->status->name) }}"/>
177                                          @endif
178                                      </x-table.cell>
179                                  </x-table.row>
180                              @empty
181                                  <x-table.empty-row message="{{ __('inbox-files.requirement.table.empty') }}"
182                                                     colspan="7"/>
183                              @endforelse
184                          </x-slot>
185                      </x-table.table>
186  
187                      </div>
188                  </x-card>
189              @else
190                  <div class="flex flex-col items-center w-full h-full m-auto">
191                      <span>{{ __('inbox-files.other.validation') }}</span>
192                  </div>
193              @endif
194          </div>
195  
196      </x-card>
197      @if ($requirementId)
198          <div class="flex space-x-2">
199              <x-card title="{{ __('inbox-files.cards.content') }}" headerClasses=" rounded-t text-white"
200                      cardClasses="mt-4 w-3/4">
201                  @if (!is_null($requirementId))
202                      @can('update', $this->inboxFile)
203                          <x-slot name="action">
204                              <x-dropdown>
205                                  <x-slot name="trigger">
206                                      <button class="rounded-full focus:outline-none focus:ring-2 focus:ring-white">
207                                          <x-icon name="dots-vertical" class="w-4 h-4 text-white"/>
208                                      </button>
209                                  </x-slot>
210                                  <x-dropdown.item wire:click="loadExpertTips()" icon="information-circle"
211                                                   label="{{ __('expert-tips.panel.buttons.list') }}" class="px-2"/>
212                              </x-dropdown>
213                          </x-slot>
214                      @endcan
215                  @endif
216                  @livewire('inbox-files.validate')
217                  @livewire('expert-tip.view')
218              </x-card>
219              <x-card title="{{ __('internal-notes.title') }}" headerClasses=" rounded-t text-white"
220                      cardClasses="mt-4 w-1/4 h-auto">
221                  <x-slot name="action">
222                      <x-icon
223                          onclick="Livewire.emit('openPanel', '{{ __('internal-notes.side-panel.title') }}', 'internal-notes.create', {{ $requirementId }})"
224                          name="plus" class="w-4 h-4 text-white hover:cursor-pointer"/>
225                  </x-slot>
226                  <div class="overflow-auto">
227                      @forelse($this->internal_notes as $note)
228                          <div class="p-4 mb-4 bg-white border-2 rounded dark:bg-gray-900">
229                              <div class="flex justify-between mb-4">
230                                  <div class="flex flex-col space-y-2">
231                                      <p class="-mb-2 text-sm font-medium text-primary-600">{{ $note->user->full_name }}
232                                      </p>
233                                      <div class="flex flex-row space-x-2">
234                                          @forelse ($note->user->getRolesInDossier($note->internal_noteable_id) as $role)
235                                              <span
236                                                  class="text-xs tracking-wide text-gray-600 dark:text-gray-400">{{ $role }}</span>
237                                          @empty
238                                              <span
239                                                  class="text-xs tracking-wide text-gray-600 dark:text-gray-400">{{ __('roles.unassigned') }}</span>
240                                          @endforelse
241                                      </div>
242                                  </div>
243                                  <div>
244                                      @can('update', $note)
245                                          <x-button flat sm icon="pencil"
246                                                    onclick="Livewire.emit('openPanel', '{{ __('internal-notes.side-panel.update.title') }}', 'internal-notes.update', {{ $note->id }})"/>
247                                      @endcan
248                                      @can('delete', $note)
249                                          <x-button flat sm icon="trash"
250                                                    onclick="Livewire.emit('openPanel', '{{ __('internal-notes.side-panel.delete.title') }}', 'internal-notes.delete', {{ $note->id }})"/>
251                                      @endcan
252                                  </div>
253                              </div>
254                              <p class="text-gray-700">{{ $note->text }}</p>
255  
256                              <div class="flex items-center gap-4 mt-4">
257                                  <p class="text-xs text-gray-500 dark:text-gray-400">
258                                      <x-show-date :date="$note->created_at"/>
259                                  </p>
260                              </div>
261                          </div>
262                      @empty
263                          <x-table.empty-row message="{{ __('internal-notes.empty') }}" colspan="8"/>
264                      @endforelse
265                  </div>
266              </x-card>
267          </div>
268      @endif
269  
270      <x-modal.description/>
271  </div>