{{-- Le crayon (suivi), le trombone (piece jointe) et la poubelle d'une ligne de decoupe, sous une commande de la liste et dans l'onglet de la fiche. Crayon et trombone ouvrent les fenetres _modale-suivi et _modale-joindre, posees une fois dans la page. La poubelle retire une ligne posee par erreur, tant qu'elle est vierge (CommandeController::retirerDecoupe, la regle de l'edition) ; le toast « Annuler » la remet. Attendus : `$decoupe` (tableau de la forme servie par l'api, avec `commande_decoupe_id`), `$commandeId`, `$documents` (pieces jointes par ligne), `$vue` (`liste` ou `fiche`, le bloc que le serveur rend). --}} @php $ligneId = (int) ($decoupe['commande_decoupe_id'] ?? 0); $nomLigne = $decoupe['nom'] ?? null; $titreLigne = __('Commande') . ' #' . $commandeId . ($nomLigne ? ' · ' . \App\Helpers\CommandeHelper::nomTraduit(mb_strtoupper($nomLigne, 'UTF-8')) : ''); $jour = fn ($d) => $d ? \Illuminate\Support\Carbon::parse($d)->format('Y-m-d') : ''; // Le serveur relit la regle sous verrou ; ici, seulement ne pas proposer // ce qu'il refuserait. $vierge = !\App\Models\CommandeDecoupe::suiviCommence( $decoupe, ($documents[$ligneId] ?? collect())->isNotEmpty(), !empty($decoupe['observations']) ); @endphp @if ($ligneId > 0) @can('commande_decoupes.edit') @endcan @can('commande_decoupes.joindre') @endcan @if ($vierge) @can('commandes.decoupes') {{-- La confirmation nomme la decoupe et sa commande. Refusee, l'envoi n'a pas lieu : decoupes.js et sur-place.js laissent passer un envoi deja empeche. --}}
@endcan @endif @endif