{{-- Accordéon des plannings d'un client. Calqué sur admin/membres/users/_plannings_accordion.blade.php, dont il reprend la mise en page : en-tête récapitulatif puis tables détaillées. Le bloc "Client" de l'accordéon utilisateur n'a pas d'équivalent ici : on est déjà sur la fiche du client, le répéter à chaque planning n'apprendrait rien. Variables attendues : - $chantiers : itérable de plannings (tableau ou paginateur), tels que renvoyés par /clients/{id}/chantiers puis enrichis par ClientController (employes_details, devis_details) - $accordionId : identifiant DOM de l'accordéon (défaut accordionPlannings) - $toutReplie : facultatif, tout replié au départ (pages « Voir tout », où le premier planning ouvert repoussait la liste hors de l'écran) ; sinon le premier est ouvert - $interventionCourante : facultatif, n° de l'intervention affichée (fiche intervention) ; les plannings qui la portent sont signalés --}} @php $accordionId = $accordionId ?? 'accordionPlannings'; @endphp
@foreach ($chantiers as $ch) @php $itemId = 'planning_' . $ch['id_rdv']; $isOpen = $loop->first && !($toutReplie ?? false); $debut = !empty($ch['date_debut']) ? \Illuminate\Support\Carbon::parse($ch['date_debut']) : null; $fin = !empty($ch['date_fin']) ? \Illuminate\Support\Carbon::parse($ch['date_fin']) : null; $equipeNom = $ch['equipe']['nom'] ?? null; $duree = $ch['duree'] ?? null; // L'enrichissement du controller rapproche les employés des users Laravel ; // la réponse brute porte déjà nom et prénom, elle sert de repli. $techniciens = !empty($ch['employes_details']) ? $ch['employes_details'] : ($ch['employes'] ?? []); $devisL = $ch['devis_details'] ?? []; $interL = $ch['interventions'] ?? []; $observL = collect($ch['observations'] ?? []) ->map(fn($o) => is_array($o) ? $o['observation'] ?? null : $o) ->filter() ->values(); @endphp

{{-- Infos planning --}}
Équipe {{ $equipeNom ?? '—' }}
Durée {{ $duree ?? '—' }}
Début {{ $debut ? $debut->format('d/m/Y H:i') : '—' }}
Fin {{ $fin ? $fin->format('d/m/Y H:i') : '—' }}
Techniciens @forelse ($techniciens as $t) {{ trim(($t['prenom'] ?? '') . ' ' . ($t['nom'] ?? '')) ?: '—' }} @empty Aucun technicien affecté @endforelse
@include('admin.plannings._nature_ligne', ['travaux' => $ch['travaux'] ?? null]) @include('admin.plannings._adresse_ligne', ['lieu' => $ch['lieu'] ?? null]) {{-- Devis (masqué si vide, ex. plannings d'intervention) --}} @if (!empty($devisL))
Devis
@foreach ($devisL as $dv) @php $adresseChantier = implode( ', ', array_filter([ trim($dv['adresse'] ?? ''), trim(($dv['code_postal'] ?? '') . ' ' . ($dv['ville'] ?? '')), ]), ) ?: '—'; @endphp @endforeach
N° Nature Adresse du devis Responsable
@if (!empty($dv['id'])) {{ $dv['id'] }} @else — @endif {{ $dv['nature'] ?? '—' }} {{ $adresseChantier }} {{ $dv['responsable'] ?? '—' }}
@endif {{-- Interventions (masqué si vide, ex. plannings de pose/maçonnerie) --}} @if (!empty($interL))
Interventions
@foreach ($interL as $i) @endforeach
N° Libellé Secteur
@if (!empty($i['id'])) {{ $i['id'] }} @else — @endif {{ $i['libelle'] ?? '—' }} {{ $i['secteur'] ?? '—' }}
@endif {{-- Observations (masqué si vide) --}} @if ($observL->isNotEmpty())
Observations
    @foreach ($observL as $obs)
  • {{ $obs }}
  • @endforeach
@endif {{-- Lien vers la fiche complète du planning --}} @can('plannings.view') Voir le planning @endcan
@endforeach