{{-- Detail des decoupes d'une commande, sous sa ligne de l'index. Replie par defaut ; le picto decoupe de la ligne le deroule (script en bas de index.blade.php, animation d'accordeon.js). Tout vient de la ligne que l'api a deja servie (nom, type, etat, laseriste, dates, observations) : ouvrir le detail ne coute aucune requete. Seules les pieces jointes sont locales, chargees une fois pour la page par le controleur. Le suivi d'une ligne (laseriste, dates, etat) et ses pieces jointes se saisissent ici, dans les fenetres de l'ecran des decoupes (crayon et trombone, _decoupe-gestes) ; retirer un fichier se fait la-bas, ou mene le lien du bas. L'ajout d'une decoupe oubliee aussi (_decoupes-ajout), pour qui peut modifier la commande — y compris sur une commande qui n'en a aucune, d'ou le tableau conditionnel. Variables : $commandeId, $decoupes (collection de tableaux de l'api), $documents (pieces jointes par ligne de commande_decoupe). --}} @php $date = fn ($d) => $d ? \Illuminate\Support\Carbon::parse($d)->format('d/m/Y') : '—'; // Le crayon du suivi, le trombone et la poubelle (_decoupe-gestes) : // la colonne n'existe que pour qui peut s'en servir. $gestes = auth()->user()?->hasAnyPermission(['commande_decoupes.edit', 'commande_decoupes.joindre', 'commandes.decoupes']); @endphp
@if ($decoupes->isNotEmpty()) @if ($gestes) @endif @foreach ($decoupes as $decoupe) @php $ligneId = (int) ($decoupe['commande_decoupe_id'] ?? 0); $type = \App\Helpers\CommandeHelper::libelle('decoupe_types', $decoupe['type'] ?? null, ''); $etat = \App\Helpers\CommandeHelper::decoupeEtat($decoupe['etat'] ?? null, ''); $laseriste = \App\Helpers\CommandeHelper::laseriste($decoupe['laseriste'] ?? null, ''); $pieces = $documents[$ligneId] ?? collect(); $notes = collect($decoupe['observations'] ?? []) ->filter(fn ($o) => trim((string) ($o['observation'] ?? '')) !== ''); @endphp @if ($gestes) @endif @endforeach
{{ __('Découpe') }} {{ __('Lasériste') }} {{ __('Envoi') }} {{ __('Réception') }} {{ __('Pièces jointes') }} {{ __('Observations') }} {{ __('État') }}{{ __('Actions') }}
{{-- En majuscules, comme sur l'ecran des decoupes : la base les garde en minuscules. --}} {{ filled($decoupe['nom'] ?? null) ? \App\Helpers\CommandeHelper::nomTraduit(mb_strtoupper($decoupe['nom'], 'UTF-8')) : __('Découpe') . ' #' . $ligneId }} @if ($type !== '') · {{ $type }} @endif {{-- Reprise de l'ancien logiciel sans son nom : on peut le lui donner. --}} @if (empty($decoupe['id']) && $ligneId > 0) @can('commandes.decoupes') @include('admin.commandes._decoupe-definir', ['commandeId' => $commandeId, 'ligneId' => $ligneId]) @endcan @endif {{ $laseriste !== '' ? $laseriste : '—' }} {{ $date($decoupe['date_envoi'] ?? null) }} {{ $date($decoupe['date_reception'] ?? null) }} @if ($pieces->isNotEmpty())
@foreach ($pieces as $piece) {{-- Image en grand sur place (js/visionneuse.js), PDF dans un onglet. --}} estImage()) data-visionneuse="decoupe-{{ $ligneId }}" data-legende="{{ $piece->description ?: __('Pièce jointe') }}" @endif> @if ($piece->estImage()) {{ $piece->description ?? __('Pièce jointe') }} @else PDF @endif @endforeach
@else — @endif
@if ($notes->isNotEmpty()) @include('admin.commandes._decoupe-notes', ['notes' => $notes->all()]) @elsecannot('commandes.decoupes') — @endif @if ($ligneId > 0) @can('commandes.decoupes') @include('admin.commandes._decoupe-noter', ['commandeId' => $commandeId, 'ligneId' => $ligneId, 'vue' => 'liste']) @endcan @endif @if ($etat !== '') {{ $etat }} @else — @endif @include('admin.commande_decoupes._decoupe-gestes', ['decoupe' => $decoupe, 'commandeId' => $commandeId, 'documents' => $documents, 'vue' => 'liste'])
@can('commande_decoupes.view') {{ __('Suivre ces découpes') }} @endcan @endif @can('commandes.decoupes') @include('admin.commandes._decoupes-ajout', [ 'commandeId' => $commandeId, 'dejaPosees' => $decoupes->pluck('id')->filter()->all(), ]) @endcan