@extends('admin.layout') @section('title', __('Gestion des commandes')) @section('content')
| @endcan {{-- Statut et priorite n'ont plus leur colonne : ORIGINAL et NORMALE couvrent presque toutes les lignes. Ils ne se montrent qu'en exception, a cote de l'id. --}} | {{ __('ID') }} | {{ __('Client') }} | {{ __('Ville') }} | {{-- Options : colonne etroite, icones seules. Fondues dans la cellule du modele, elles ne se voyaient plus ; leur colonne ne coute que la largeur de quelques icones. --}}{{ __('Options') }} | {{-- Plan du bureau d'etude (commandes.url) : une colonne a lui, icone PDF, comme dans l'ancien logiciel. Le nom du modele n'est plus un lien : on confondait le plan avec la fiche de la commande, qui prend l'icone QR code dans les actions. --}}{{ __('Plan') }} | {{ __('Modèle') }} | {{ __('Commande') }} | {{-- Échéance estimée par ACPORTAIL : un sablier et pas une date, pour ne pas la confondre avec la date de réception réelle juste à côté. Le texte masqué sert de libellé aux cartes sur téléphone (responsive-tables.js). --}}{{ __('Échéance') }} | {{-- Réception à l'entrepôt (PROCESS.D_RéceptionEntrepot) --}}{{ __('Réception') }} | {{ __('État') }} | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| @endcan {{-- L'id, et en exception seulement le statut (hors ORIGINAL) et la priorite (hors NORMALE) : les montrer sur chaque ligne ne signalait plus rien. --}} @php $statut = $commande['statut'] ?? null; $statutLibelle = (int) $statut !== 1 ? \App\Helpers\CommandeHelper::statut($statut, '') : ''; $priorite = $commande['priorite'] ?? null; $prioriteLibelle = (int) $priorite !== 1 ? \App\Helpers\CommandeHelper::priorite($priorite, '') : ''; @endphp | {{-- Le numero mene a la fiche, comme le client a la sienne. --}} @can('commandes.view') {{ $commande['id'] }} @else {{ $commande['id'] }} @endcan @if ($prioriteLibelle !== '') {{ ['URGENT' => 'URG'][$prioriteLibelle] ?? $prioriteLibelle }} @endif @if ($statutLibelle !== '') {{-- Abrege : la colonne de l'id se regle sur sa ligne la plus large. Le libelle entier reste au survol. --}} {{ ['REFABRICATION' => 'REFAB', 'RELAQUAGE' => 'RELAQ', 'MODIFICATION' => 'MODIF'][$statutLibelle] ?? $statutLibelle }} @endif @if (!empty($commande['incomplet'])) {{-- Ce qui manque est ecrit dans la note INCOMPLET de la fiche : l'api ne la sert pas a la liste. --}} INC @endif @if (!empty($commande['maj_plan'])) {{-- Plan mis a jour que l'usine n'a pas encore vu. --}} PLAN @endif | {{-- Client : lien vers la fiche Gestan. Sans identifiant ou sans le droit de la consulter, on garde le nom en texte simple plutôt qu'un lien mort. --}}@if (!empty($commande['client_id']) && $peutVoirClient) {{ $nomClient ?: '—' }} @else {{ $nomClient ?: '—' }} @endif | {{-- Ville du chantier, portée par le devis --}}@if (!empty($commande['devis_id']) && $peutVoirDevis) {{ $ville ?: '—' }} @else {{ $ville ?: '—' }} @endif | {{-- Icones seules, le nom au survol --}} | @php /* Le plan du bureau d'etude prime toujours. A defaut, les poteaux 150 ont une fiche generee : G la distingue d'un vrai plan, le temps des tests. */ $lienPlan = $commande['url'] ?? null; $ficheGeneree = empty($lienPlan) && mb_strtoupper((string) ($commande['modele'] ?? '')) === 'POTEAU 150'; if ($ficheGeneree) { $lienPlan = route('commandes.fiche-poteau', $commande['id']); } @endphp@if (!empty($lienPlan)) @if ($ficheGeneree)G@endif @endif | {{-- Le modele, puis en gris la platine (quand elle sort de l'ordinaire : NettoyerPlatineSeeder vide les autres, et « SANS PLATINE », code 1, n'en est pas une) et la couleur, sur une seule ligne. Le type et la finition ne sont pas affiches : le type se devine du modele, la finition se lit sur le plan. La couleur est reduite a son code RAL ; son nom complet reste dans l'infobulle. --}} @php $libelleModele = mb_strtoupper($commande['libelle_modele'] ?? '—', 'UTF-8'); $platineModele = !empty($commande['platine']) && (int) $commande['platine'] !== 1 ? \App\Helpers\CommandeHelper::platine($commande['platine']) : null; $couleurModele = $commande['couleur'] ?? null; $detailsModele = array_filter([ $platineModele, !empty($couleurModele) ? \App\Helpers\CommandeHelper::couleurCourte($couleurModele, '') : null, ]); $titreModele = implode(' · ', array_filter([ $libelleModele, $platineModele, !empty($couleurModele) ? \App\Helpers\CommandeHelper::couleur($couleurModele, '') : null, ])); @endphp {{ $libelleModele }} @if ($detailsModele) · {{ implode(' · ', $detailsModele) }} @endif | @if (!empty($commande['created_at'])) {{ \Carbon\Carbon::parse($commande['created_at'])->format('d/m/y') }} @endif | {{-- Date prévisionnelle : calculée à partir de la date de commande, allongée par la maçonnerie et le cintrage. Elle annonce une urgence à l'usine : une fois le portail fabriqué — en attente de chargement, chargé ou arrivé — l'estimation n'a plus d'objet. Tant qu'il reste à produire, une pastille dit ce qui presse. --}}@php // Un relaquage en cours fait repartir le compteur de // son depart chez le laqueur (CommandeHelper::datePrevue) : // l'api sert la date dans `relaquage_envoi`. // Elle part de la sortie du standby s'il y en a une. $previsionnelle = \App\Helpers\CommandeHelper::datePrevue( \App\Helpers\CommandeHelper::depart($commande['created_at'] ?? null, $commande['lancee_le'] ?? null), $commande['maconnerie'] ?? null, $commande['cintrage'] ?? null, $commande['etat'] ?? null, $commande['date_entrepot'] ?? null, $commande['relaquage_envoi'] ?? null, ); $echeance = \App\Helpers\CommandeHelper::echeance($previsionnelle); @endphp @if ($echeance) {{-- Le compteur seul, sans la date : elle se lisait comme une date de réception. Elle reste au survol. Sablier qui s'écoule tant qu'il reste des jours, vide en retard. --}} {{ $echeance['libelle'] }} @else — @endif | @if (!empty($commande['date_entrepot'])) {{ \Carbon\Carbon::parse($commande['date_entrepot'])->format('d/m/y') }} @else — @endif | {{-- État : étiquette colorée, mêmes couleurs que les pastilles de la barre de filtres. --}}@php $etat = $commande['etat'] ?? null; $etatLibelle = \App\Helpers\CommandeHelper::etat($etat, ''); @endphp @if ($etatLibelle !== '') {{ $etatLibelle }} @endif | {{-- Petits boutons, discrets tant qu'on ne survole pas la ligne (pleins sur un ecran tactile, qui ne survole pas). --}} {{-- `data-resume` : ce que la fenetre de laquage affiche pour qu'on sache quelle commande part (client, modele, couleur). Sur la cellule et non sur le bouton laquage : une commande deja laquee n'a plus ce bouton, mais peut etre cochee. --}} {{-- Ligne allegee pour qui coche et modifie (bureau, administrateurs) : l'etiquette et le laquage d'une seule commande passent par sa case et la barre, qui font le meme geste. Les autres gardent ces boutons : sans la selection, ils n'auraient plus d'autre chemin ; l'usine, qui n'a pas l'edition, laque d'abord ligne par ligne. --}} @php $ligneAllegee ??= auth()->user()?->can('commandes.selection') && auth()->user()?->can('commandes.edit'); @endphp@can('commandes.view') @endcan @if (!$ligneAllegee) @can('commandes.view') {{-- Fiche de la commande, generee a la demande : icone QR code, pour ne pas la confondre avec le PDF de la colonne Plan, qui est le dessin du bureau d'etude. Nouvel onglet : on ne perd pas sa page de resultats pour un PDF. --}} @endcan {{-- Laquage : le premier depart, ou le retour si le portail est encore chez le laqueur. La meme modale que la barre de selection, pour cette seule ligne. Pas de bouton sur une commande deja laquee et revenue : la renvoyer serait un relaquage, qui se decide sur la fiche, ou l'on voit ses passages avant de dire qui est fautif et pourquoi. --}} @can('commandes.laquage') @if (!$dejaLaquee || $chezLeLaqueur) @endif @endcan @endif @can('commandes.edit') @endcan @can('commandes.delete') @endcan |
| {{ __('Aucune commande ne correspond à ces filtres.') }} | |||||||||||