@extends('admin.layout') @section('title', __('Modifier la commande n° :id', ['id' => $commande->id])) @section('content') {{-- ⚠️ Calque de create.blade.php : meme ordre des champs, memes blocs. Un champ ajoute a la creation s'ajoute ici a la meme place. Ce qui n'existe qu'en modification (le suivi) vient apres le bloc de la commande, sans deplacer le reste. Seule difference : les boutons d'observation, remplaces par le fil de la fiche. --}}

@yield('title')

@php use App\Helpers\CommandeHelper; // Les colonnes de date sortent en chaine ou en Carbon selon la // provenance : l'input date ne veut que Y-m-d. $date = fn ($champ, $colonne = null) => old($champ, filled($commande->{$colonne ?? $champ}) ? \Illuminate\Support\Carbon::parse($commande->{$colonne ?? $champ})->format('Y-m-d') : ''); $ouiNon = fn ($champ, $valeur) => old($champ, $valeur ? 'Oui' : 'Non'); $accessoire = $typeAccessoire !== null && (int) old('type_id', $commande->type_id) === $typeAccessoire; $carport = $typeCarport !== null && (int) old('type_id', $commande->type_id) === $typeCarport; $store = $typeStore !== null && (int) old('type_id', $commande->type_id) === $typeStore; $decoupesPosees = old('decoupes', array_keys($lignesDecoupe)); $decoupeOui = $ouiNon('decoupe_inox', $commande->decoupe || $lignesDecoupe !== []) === 'Oui'; // « Pas de laquage » n'a pas de finition : le select part grise, comme // la saisie assistee le fait quand on choisit cette couleur. $sansLaquage = collect($colors)->contains( fn ($c) => (int) $c['id'] === (int) $couleurId && mb_strtoupper((string) ($c['value'] ?? ''), 'UTF-8') === 'RAL0000' ); @endphp
@if ($errors->any())
    @foreach ($errors->all() as $error)
  • {{ $error }}
  • @endforeach
@endif {{-- « X est en train de modifier cette fiche » (js/presence.js). --}}
@csrf @method('PUT') {{-- La commande telle qu'a l'ouverture : seul ce qu'on change ici s'ecrit, un etat ou un retour du laquage pose entre-temps sur un autre poste reste (CommandeController::update). --}} {{-- Un meme champ change ici et sur un autre poste : rien ne s'est ecrit, on choisit champ par champ. « Reprendre la sienne » remet aussi sa valeur dans le champ quand le formulaire la saisit telle quelle (un etat, une date). Les choix sont obligatoires : sans eux, l'envoi ne part pas. --}} @if ($conflits = session('conflits'))

{{ __('Modifié sur un autre poste pendant votre saisie. Choisissez, champ par champ, la valeur à garder, puis enregistrez.') }}

@foreach ($conflits as $colonne => $conflit)
{{ $conflit['libelle'] }} — @if ($conflit['qui']) {{ __('changé par :qui à :quand', ['qui' => $conflit['qui'], 'quand' => $conflit['quand']]) }} @else {{ __('changé sur un autre poste') }} @endif
@endforeach
@endif
{{-- ==================== EN-TETE ==================== --}}
{{-- Le devis de la commande se charge et se resume a l'ouverture, comme apres une saisie a la creation. --}} @include('admin.commandes._devis', [ 'devisId' => old('devis_id', $commande->devis_id), 'clientId' => old('client_id', $commande->client_id), 'negoce' => (bool) old('negoce', $commande->negoce), ]) @include('admin.commandes._adresse_chantier', [ 'adresseChantier' => $adresseChantier, 'devisId' => $commande->devis_id, 'clientId' => $commande->client_id, ])
{{-- ==================== COMMANDE ==================== --}}
{{-- Le libelle fige s'affiche sans id : le controleur l'enregistre comme une saisie libre. Choisir une entree du catalogue le remplace. --}}
{{-- `data-origine` : le libelle enregistre. Tant que le texte n'a pas bouge, il vaut sans id — cas d'une couleur que l'api ne porte plus sous ce nom. --}}
{{ __('Options') }}
{{-- Une decoupe partie chez le laseriste (envoyee, suivie, avec pieces jointes ou notes) est verrouillee : son etiquette porte un cadenas et pas de croix, la retirer supprimerait tout son suivi. --}} @php $parId = $decoupes->flatten()->keyBy('id'); $verrouillees = array_keys(array_filter($lignesDecoupe, fn ($l) => $l['verrou'])); // Les verrouillees d'abord, et toujours : apres un // enregistrement refuse, old() ne les porte pas, elles // ne sont jamais postees. $choisies = collect(array_unique(array_merge($verrouillees, array_map('intval', $decoupesPosees)))) ->filter(fn ($id) => $parId->has($id)) ->map(fn ($id) => ['decoupe' => $parId[$id], 'verrou' => in_array($id, $verrouillees, true)]) ->values() ->all(); @endphp
{{ __('Découpes') }} @include('admin.commandes._decoupes', ['nom' => 'decoupes[]', 'choisies' => $choisies])
{{-- Meme place qu'a la creation, mais tous les etats : la commande a pu avancer depuis. Sauf pour l'usine portugaise, qui ne pose ni REÇU, ni EN STOCK, ni POSÉ (CommandeHelper::etatsPosables). --}}
{{-- Meme regle qu'a la creation : pas de longueur sur un accessoire, largeur sur un carport ou un store, pas de hauteur sur un store. --}}
{{ __('Long.') }}
{{ __('Haut.') }}
{{ __('Larg.') }}
{{-- Les observations ne se saisissent plus ici : elles s'ajoutent et se corrigent dans le fil de la fiche, un seul endroit a connaitre. Seule exception au calque de la creation, ou la fiche n'existe pas encore. --}}

{{ __('Les observations s’ajoutent et se corrigent sur la fiche de la commande, onglet Observations.') }}

{{-- -------------------- SUIVI (modification seulement) -------------------- Ce que l'atelier et l'usine font avancer. Sous la commande, sans deplacer ce qui vient de la creation. Laissees vides, les dates d'un etat sont posees d'office quand la commande y passe (AU LAQUAGE, REÇU, POSÉ). --}}
{{ __('Suivi') }}
{{-- REFABRICATION (code 2) ne se choisit pas ici : il se pose en refabriquant, avec le lien vers la commande refaite. Une refabrication garde son statut, affiche mais fige ; les autres ne se le voient pas proposer. --}} @if ((int) $commande->statut === 2) @else @endif
{{ __('Envoi') }} toDateString()) max="{{ now()->toDateString() }}" @endif class="form-control" value="{{ $date('date_laq_envoi') }}" aria-label="{{ __('Envoi laquage') }}">
{{ __('Retour') }} toDateString()) max="{{ now()->toDateString() }}" @endif class="form-control @error('date_laq_recep') is-invalid @enderror" value="{{ $date('date_laq_recep') }}" aria-label="{{ __('Retour laquage') }}">
{{-- Ni MAJ plan ni Incomplet ici : ils se signalent depuis la fiche, avec ce qui change ou ce qui manque. Un lien de plan modifie ci-dessus previent l'usine de lui-meme. --}}
@include('admin.gestan.clients._modale_recherche', ['cible' => '#numero_client']) @php $acLang = [ 'tapezModele' => __('Tapez un modèle, ex. C-100'), 'choisirType' => __("Choisir un type d'abord"), 'aucunResultat' => __('Aucun résultat'), 'variation' => __('variation'), ]; $acCouleurs = collect($colors) ->map(fn ($c) => [ 'id' => (int) $c['id'], 'value_display' => $c['value_display'] ?? '', 'name_fr' => $c['name_fr'] ?? '', 'color' => $c['color'] ?? '', 'sans_laquage' => mb_strtoupper((string) ($c['value'] ?? ''), 'UTF-8') === 'RAL0000', ]) ->values(); @endphp @include('admin.commandes._decoupes_catalogue', ['creer' => true]) @endsection