{{-- Historique de la commande, geste par geste (Annulation::historiqueCommande). Un geste = une requete : l'envoi au laquage y apparait d'un bloc, passage cree et commande modifiee ensemble, et « Annuler » les defait ensemble. Depuis la fiche, seule la part qui touche cette commande se defait : un scan de trente commandes ne revient pas en arriere pour une seule ligne. Les trois derniers gestes sont affiches, les autres se deroulent. Pas de carte ni de titre : la fiche le range dans son onglet « Historique ». Variables : $historique, $commandeId. --}} @php $moi = auth()->user(); $peutModifier = $moi?->can('commandes.edit'); $valeur = function ($v) { if ($v === null || $v === '') { return '—'; } if (is_bool($v)) { return $v ? __('Oui') : __('Non'); } if (is_array($v)) { return json_encode($v, JSON_UNESCAPED_UNICODE); } // Dates brutes de la base : 2026-09-20 ou 2026-09-20 00:00:00. if (is_string($v) && preg_match('/^(\d{4})-(\d{2})-(\d{2})(?: 00:00:00)?$/', $v, $m)) { return "$m[3]/$m[2]/$m[1]"; } return (string) $v; }; $actions = [ 'created' => __('ajout'), 'deleted' => __('suppression'), 'restored' => __('restauration'), ]; @endphp
@forelse ($historique as $geste) @php $auteur = $geste['auteur'] ? trim(($geste['auteur']->prenom ?? '') . ' ' . ($geste['auteur']->nom ?? '')) : null; $peutAnnuler = $geste['annulable'] && ($peutModifier || ($geste['auteur'] && $moi && $geste['auteur']->id === $moi->id)); // Le resume de ce que l'annulation remettra, pour la confirmation. $aRemettre = collect($geste['lignes']) ->where('action', 'updated') ->flatMap(fn ($l) => collect($l['champs'])->map(fn ($av, $champ) => $champ . ' ' . $valeur($av[0]))) ->take(6) ->implode(', '); @endphp @if ($loop->index === 3)
@endif
{{ $geste['date']?->format('d/m/Y H:i') }} @if ($auteur) · {{ $auteur }} @endif @if ($geste['annulation']) {{ __('Annulation') }} @elseif ($geste['annule']) {{ __('Annulé') }} @endif
@foreach ($geste['lignes'] as $ligne) @if ($ligne['action'] === 'updated')
@if ($ligne['quoi'] !== __('commande')) {{ ucfirst($ligne['quoi']) }} : @endif @foreach ($ligne['champs'] as $champ => [$avant, $apres]) {{ $champ }} {{ $valeur($avant) }} {{ $valeur($apres) }} @if (!$loop->last) · @endif @endforeach
@else {{-- Lesquels : les ajouts d'un meme geste tiennent en une ligne qui les nomme (Annulation::regrouper). --}} @php $nombre = $ligne['nombre'] ?? 1; $noms = $ligne['noms'] ?? []; $quoi = $nombre > 1 ? $nombre . ' ' . preg_replace('/^(\S+)/u', '$1s', $ligne['quoi']) : $ligne['quoi']; @endphp
{{ ucfirst($actions[$ligne['action']] ?? $ligne['action']) }} : {{ $quoi }}@if ($noms) {{ $nombre > 1 ? '—' : '' }} {{ implode(', ', $noms) }} @endif
@endif @endforeach
@if ($peutAnnuler)
@csrf
@endif
@if ($loop->last && $loop->count > 3)
@endif @empty

{{ __('Aucune modification enregistrée.') }}

@endforelse