{{-- Historique d'une fiche, geste par geste (App\Services\Historique\HistoriqueFiche). Un geste = une requete : ce qu'un meme enregistrement a change tient en un bloc. Les trois derniers sont affiches, les autres se deroulent. Lecture seule : seuls les gestes d'une commande se defont, depuis sa fiche. Variables : $historique ce que rend HistoriqueFiche::de() ou ::actionsDe() ; $cle unique dans la page, pour le bloc qui se deroule ; $avecElement (facultatif) chaque ligne nomme l'element touche et mene a sa fiche — « Ses actions » d'un employe ; $sansAuteur (facultatif) l'auteur est deja dit par la page. --}} @php $avecElement = $avecElement ?? false; $sansAuteur = $sansAuteur ?? false; $valeur = function ($v) { if ($v === null || $v === '' || $v === []) { return '—'; } if (is_bool($v)) { return $v ? __('Oui') : __('Non'); } if (is_array($v)) { return implode(', ', array_map(fn ($x) => is_scalar($x) ? (string) $x : json_encode($x, JSON_UNESCAPED_UNICODE), $v)); } // 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})(?:[ T]00:00:00(?:\.0+Z?)?)?$/', $v, $m)) { return "$m[3]/$m[2]/$m[1]"; } return (string) $v; }; $actions = [ 'created' => __('Création'), 'deleted' => __('Suppression'), 'restored' => __('Restauration'), ]; @endphp
@forelse ($historique as $geste) @php $auteur = $geste['auteur'] ? trim(($geste['auteur']->prenom ?? '') . ' ' . ($geste['auteur']->nom ?? '')) : null; @endphp @if ($loop->index === 3)
@endif
{{ $geste['date']?->format('d/m/Y H:i') }} @if ($auteur && !$sansAuteur) · {{ $auteur }} @endif @if ($geste['annule']) {{ __('Annulé') }} @endif
@foreach ($geste['lignes'] as $ligne) @php // Plusieurs ajouts d'une meme sorte, regroupes // (Annulation::regrouper) : « 16 découpes de la commande 9601 ». $nombre = $ligne['nombre'] ?? 1; $noms = $ligne['noms'] ?? []; $element = $ligne['element'] ? ($nombre > 1 ? $nombre . ' ' . preg_replace('/^(\S+)/u', '$1s', $ligne['element']) : $ligne['element']) : null; @endphp
@if ($avecElement && $element) @if ($ligne['lien']) {{ \Illuminate\Support\Str::ucfirst($element) }} @else {{ \Illuminate\Support\Str::ucfirst($element) }} @endif : @endif @if ($ligne['action'] === 'updated') @foreach ($ligne['champs'] as $champ => [$avant, $apres]) {{ $champ }} {{-- Une liste (permissions, responsables) : ce qui entre et ce qui sort, pas deux listes entieres. --}} @if (is_array($avant) || is_array($apres)) @php $entrees = array_values(array_diff((array) $apres, (array) $avant)); $sorties = array_values(array_diff((array) $avant, (array) $apres)); @endphp @if ($entrees) + {{ implode(', ', $entrees) }} @endif @if ($sorties) − {{ implode(', ', $sorties) }} @endif @else {{ $valeur($avant) }} {{ $valeur($apres) }} @endif @if (!$loop->last) · @endif @endforeach @else {{ $actions[$ligne['action']] ?? $ligne['action'] }}@if (!$avecElement) {{ __('de la fiche') }}@endif @if ($noms) — {{ implode(', ', $noms) }} @endif @endif
@endforeach
@if ($loop->last && $loop->count > 3)
@endif @empty

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

@endforelse