{{-- v4.2.0 §C1 — Les panneaux de saisie de la fiche, EN LIGNE : jamais une seconde page. Même grammaire de champs que partout ailleurs — les composants Filament. --}} @php use App\Enums\EspaceClient\CanalDecision; use App\Enums\EspaceClient\CanalDemande; use App\Enums\EspaceClient\FamilleDocument; use App\Enums\EspaceClient\ModeAcces; use App\Enums\EspaceClient\ModeLettre; use App\Enums\EspaceClient\RoleAcces; use App\Enums\EspaceClient\TypeDecision; use App\Models\EspaceClient\DocumentClient; @endphp @if ($panneau === 'livrable') + Nouveau livrable L'échéance se calcule depuis le poste quand il porte une règle de délai ; elle reste modifiable.
@foreach ($espace->postes as $poste) @endforeach
@foreach ($this->collaborateurs() as $id => $nom) @endforeach
@foreach ($this->acces() as $acces) @endforeach
@foreach (['document' => 'Document', 'video' => 'Vidéo', 'photo' => 'Photo', 'publication' => 'Publication', 'rapport' => 'Rapport', 'autre' => 'Autre'] as $cle => $libelle) @endforeach
Créer Fermer
@endif @if ($panneau === 'remise') Remettre au client Une remise crée une VERSION neuve — jamais un écrasement — et envoie l'e-mail au valideur et au référent, avec la date de réponse souhaitée.
Remettre Fermer
@endif @if ($panneau === 'decision') Reporter une décision reçue La décision est tracée avec SON auteur et SON canal, et la mention de qui l'a reportée : une décision reportée ne se fait jamais passer pour une décision prononcée.
@foreach ([TypeDecision::Valide, TypeDecision::ValideAvecModifications, TypeDecision::Corrections, TypeDecision::Refus] as $decision) @endforeach
@foreach ([CanalDecision::WhatsappReporte, CanalDecision::Email, CanalDecision::Reunion] as $canal) @endforeach
Enregistrer Fermer
@endif @if ($panneau === 'demande') + Saisir une demande reçue Le même formulaire que celui du client, avec le canal et la date de réception.
@foreach (CanalDemande::cases() as $canal) @endforeach
@foreach (ModeLettre::cases() as $mode) @endforeach
Enregistrer Fermer
@endif @if ($panneau === 'lettre') Préparer la lettre de commande Les quantités commandées, poste par poste. Le montant est figé à l'écriture.
@foreach ($espace->postes as $poste)

{{ $poste->numero }} · {{ $poste->libelle }}

{{ $poste->unite ?: 'unité' }} · {{ $poste->pu_ht !== null ? number_format((float) $poste->pu_ht, 2, ',', ' ').' DH' : 'sans prix' }}

@endforeach
Préparer Fermer
@endif {{-- v4.4.2 §3 — Un poste du bordereau, saisi à la main : un marché sans appel d'offres a droit à ses postes, sans quoi tout l'onglet « Commandes » reste mort. --}} @if ($panneau === 'poste') {{ ($saisie['poste'] ?? null) ? 'Modifier le poste' : '+ Poste du bordereau' }} Le montant du poste est quantité prévue × prix unitaire HT. Un poste sans prix ni quantité est un poste de pilotage : il se suit, il ne se facture pas.
Enregistrer Fermer
@endif @if ($panneau === 'creneau') Proposer un créneau Le client confirme, ou en propose un autre, depuis son espace.
@foreach (['hebdo' => 'Hebdomadaire', 'comite' => 'Comité de suivi', 'cadrage' => 'Cadrage', 'autre' => 'Autre'] as $cle => $libelle) @endforeach
Proposer Fermer
@endif @if ($panneau === 'compte-rendu') Compte rendu de la réunion Envoyé, il apparaît chez le client dans « À valider ». Sans remarque dans le délai convenu, il sera réputé approuvé. La réunion suivante est créée si vous en fixez la date.
Envoyer au client Fermer
@endif @if ($panneau === 'document') + Ajouter un document Un lien ou un fichier : au choix, document par document. Le client ne voit que les pièces partagées.
@foreach (FamilleDocument::cases() as $famille) @endforeach
Ajouter Fermer
@endif @if ($panneau === 'message') Message de la semaine Cinq lignes, relues et modifiables. Rien ne part vers une messagerie extérieure : on copie, ou on envoie par courriel au référent.
Enregistrer le brouillon Envoyer par e-mail au référent Fermer
@endif @if ($panneau === 'invitation') Inviter une personne du client Un compte nominatif, un mot de passe temporaire envoyé par courriel, changé à la première connexion. Le mot de passe n'apparaît jamais ici.
@foreach (RoleAcces::cases() as $role) @endforeach
Inviter Fermer
@endif @if ($panneau === 'reglages') Réglages de l'espace Identité du client, mode d'accès, règles de délai, canaux et adresses d'envoi. Vides, les adresses retombent sur celles de l'installation.
@foreach (ModeAcces::cases() as $mode) @endforeach
Enregistrer Fermer
@endif {{-- ═══════════════════════════════════════════════════════════════════════════════════════ v4.3.0 — LES PANNEAUX DU LOT 2 : publications, événements, indicateurs, décomptes. Même grammaire que ceux du lot 1 : en ligne, jamais une seconde page. ═══════════════════════════════════════════════════════════════════════════════════════ --}} @if ($panneau === 'publication') {{ filled($saisie['publication'] ?? null) ? 'Publication' : '+ Nouvelle publication' }} Une publication validée par le client est FIGÉE : pour la changer, on l'annule et on la recrée.
@foreach (\App\Enums\EspaceClient\TypePublication::cases() as $type) @endforeach
@foreach ($this->livrables() as $livrable) @endforeach
@foreach ($espace->reseauxConfigures() as $reseau) @endforeach
Enregistrer @if (filled($saisie['publication'] ?? null)) Envoyer au client @endif Fermer
@endif @if ($panneau === 'publication-lien') Marquer publiée Le lien est obligatoire : sans lui, « publié » est une affirmation ; avec lui, c'est une pièce.
Enregistrer Fermer
@endif @if ($panneau === 'publication-annulation') Annuler la publication Le motif est obligatoire et journalisé. Si le client l'avait vue passer, il est prévenu.
Annuler la publication Fermer
@endif @if ($panneau === 'publication-decision') Décision reçue sur une publication Une décision REPORTÉE : la trace dira qui l'a prononcée, par quel canal, et qui l'a saisie.
@foreach ([TypeDecision::Valide, TypeDecision::ValideAvecModifications, TypeDecision::Corrections] as $decision) @endforeach
@foreach (CanalDecision::cases() as $canal) @endforeach
Enregistrer Fermer
@endif @if ($panneau === 'evenement' || $panneau === 'evenement-qualification') {{ $panneau === 'evenement-qualification' ? 'Qualifier l\'événement signalé' : '+ Planifier un événement' }} La chronologie du tableau de bord est recopiée avec ses échéances, calculées depuis la date et l'heure de début. Sans heure : 09:00.
@foreach ($espace->zonesConfigurees() as $zone) @endforeach
@foreach ($this->affectations() as $id => $nom) @endforeach
@foreach ($this->lettres() as $lettre) @endforeach
@if ($saisie['voie_express'] ?? false)
@endif
{{ $panneau === 'evenement-qualification' ? 'Qualifier' : 'Planifier' }} Fermer
@endif @if ($panneau === 'evenement-etape') Marquer l'étape faite L'heure est enregistrée, et l'e-mail part aux deux parties avec le lien. C'est ce message-là qui tient la promesse, pas la case cochée.
Marquer faite Fermer
@endif @if ($panneau === 'evenement-galerie') Lien de la galerie Le client le lit avec son QR code, depuis la vue « Événements ».
Enregistrer Fermer
@endif @if ($panneau === 'indicateurs') Saisir les indicateurs digitaux du mois Ces chiffres viennent du rapport de performance : ils ne se recalculent pas, et le calcul ne les efface jamais.
@foreach ($espace->reseauxConfigures() as $reseau) @foreach (['abonnes', 'publications', 'portee', 'engagement', 'delai_moderation_h'] as $champ) @endforeach @endforeach
Réseau Abonnés Publications Portée Engagement Modération (h)
{{ $reseau['libelle'] }}
Enregistrer Fermer
@endif @if ($panneau === 'recalcul') Recalculer les indicateurs Si le mois est clôturé, le rouvrir exige un motif — il a peut-être déjà été présenté en comité. La saisie digitale, elle, n'est jamais touchée.
Recalculer Fermer
@endif @if ($panneau === 'decompte') Préparer le décompte Les lignes sont calculées depuis les livrables VALIDÉS de la période, non déjà comptés ailleurs. Les pénalités sont reprises du simulateur et restent modifiables.
Préparer Fermer
@endif @if ($panneau === 'pv') PV signé La pièce est archivée dans les documents du client, famille « Commandes et réceptions », et partagée : c'est une pièce qui l'engage.
Enregistrer Fermer
@endif @if ($panneau === 'facture') Créer la facture La facture est celle du socle, créée en BROUILLON : elle attend d'être relue et émise depuis le module de facturation. « Réglée » se lira ensuite de la facture, jamais d'ici.
@foreach ($this->jalons() as $id => $libelle) @endforeach
Créer la facture Fermer
@endif @if ($panneau === 'parametres-avances') Zones, réseaux, chronologie, pénalités et réceptions Les listes se collent depuis un document du marché : une ligne par entrée, plutôt que huit formulaires à remplir un par un.
@foreach ([ ['cible_delais', 'Cible — délais tenus (%)', 'number'], ['cible_premier_passage', 'Cible — premier passage (%)', 'number'], ['cible_retour', 'Cible — délai de retour (j ouvrés)', 'number'], ['cible_moderation', 'Cible — modération (h)', 'number'], ['penalite_taux', 'Pénalité — taux ‰ par jour', 'number'], ['penalite_plafond', 'Pénalité — plafond (%)', 'number'], ['montant_ht', 'Montant du marché HT', 'number'], ['montant_ttc', 'Montant du marché TTC', 'number'], ['taux_tva', 'Taux de TVA (%)', 'number'], ['nb_periodes', 'Nombre de périodes de réception', 'number'], ['prochaine_reception', 'Prochaine réception (repli saisi)', 'date'], ] as [$champ, $libelle, $type])
@endforeach
Enregistrer Fermer
@endif