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>