@php use App\Enums\TaskStatut; use App\Services\Pilotage\CockpitService; use App\Services\Timesheets\TimesheetService; $origine = app(CockpitService::class); @endphp {{-- v1.4 §5.1 — Écran pensé pour le téléphone d'abord : une ligne par marché, un champ large, le total toujours visible, et l'enregistrement immédiat. v4.1.0 §C1 — « Ma journée » v2 : les TÂCHES au-dessus, les heures en dessous, sur la même page. Colonne unique, ordre verrouillé par la maquette, aucune section vide affichée. Cibles tactiles ≥ 48 px (h-12 = 3rem). --}} {{-- ═══ 1. La navigation du jour ═══════════════════════════════════════════════════════ --}}

{{ $this->date()->translatedFormat('l j F Y') }}

@if ($estAujourdhui)

aujourd'hui

@else @endif
{{-- v4.30.0 §B4 — Pilotage éteint : ni en-tête de motivation, ni ligne « Ma prime ». --}} @if ($pilotageActif) {{-- ═══ 1 bis. L'en-tête de motivation (v4.8.0 §F) — au-dessus de « Maintenant » ═══════ Points du jour, série avec ses quatorze cases, prime projetée, puis « Encore à prendre avant HH h » avec, pour chaque geste, l'action concrète qui le prend. Une seule carte sur mobile. RIEN pour qui est hors dispositif ou n'a jamais eu de point — pas une carte vide. Réorganisation du bloc existant : aucune mécanique nouvelle, l'aperçu ne s'écrit pas. --}} @if ($enTete)
{{ $enTete['points'] }}/{{ $enTete['max'] }} points du jour
{{ $enTete['serie'] > 0 ? '🔥 '.$enTete['serie'].' j' : 'rompue' }} ma série
{{ $enTete['projete_lisible'] ?? $enTete['niveau']->label() }} {{ $enTete['projete_lisible'] !== null ? 'prime projetée' : 'niveau projeté' }}
@foreach ($enTete['serie_cases'] as $case) $case === 'on', 'bg-warning-400' => $case === 'joker', 'bg-gray-200 dark:bg-white/10' => $case === 'off', ])> @endforeach
@if (! $enTete['ouvre'])

{{ $enTete['raison_non_ouvre'] }}

@elseif ($enTete['close'])

Journée calculée à {{ $enTete['heure_calcul'] }} — {{ $enTete['points'] }}/{{ $enTete['max'] }} pts{{ $enTete['perdus'] > 0 ? ', '.$enTete['perdus'].' non pris' : ', journée pleine' }}. Un « Terminé » posé demain matin pour aujourd'hui compte encore.

@elseif ($enTete['a_prendre'] === [])
✓ Tout est pris pour aujourd'hui{{ $enTete['perdus'] > 0 ? ' — '.$enTete['perdus'].' pt(s) déjà perdus, le reste tient' : ' : la journée est pleine' }}.
@else

⏳ Encore à prendre avant {{ $enTete['heure_calcul'] }} :

    @foreach ($enTete['a_prendre'] as $geste)
  • « {{ $geste['libelle'] }} » (+{{ $geste['points'] }}) — {{ $geste['action'] }}
  • @endforeach
@endif
@elseif ($lignePrime) {{-- Points calculés mais prime désactivée depuis : la ligne d'avant, sans promesse. --}} @endif @endif @if ($verrou)
🔒 {{ $verrou }}
@endif {{-- v3.10.0 §4 — Jour férié validé : un simple avis, jamais un verrou. La saisie reste ouverte pour qui a exceptionnellement travaillé. --}} @if ($ferie)
🎌 Jour férié — {{ $ferie }}. Aucune heure n'est attendue ; vous pouvez tout de même en saisir si vous avez travaillé.
@endif {{-- v4.30.0 §B4 — Pilotage éteint : ni tâches (Maintenant, Aujourd'hui, Ma semaine, Mon équipe), ni missions renfort, ni bloc espaces clients — seules restent la navigation du jour et « Mes heures ». --}} @if ($pilotageActif) {{-- ═══ 2. Maintenant — la SEULE tâche en cours. Absente s'il n'y en a pas. ══════════════ --}} @if ($maintenant) Maintenant

{{ $maintenant->titre }}

{{ $maintenant->libelleDuMarche() }} depuis {{ $maintenant->commence_le?->format('H:i') }} · {{ $maintenant->dureeLisible() }} · échéance {{ $maintenant->echeance->translatedFormat('D j M') }}@if ($maintenant->echeance_heure) {{ substr((string) $maintenant->echeance_heure, 0, 5) }}@endif @if ($par = $origine->origineLisible($maintenant)) · par {{ $par }} @endif
{{-- Deux boutons PLEINE LARGEUR : c'est tout ce que le collaborateur a à faire. --}}
Terminé Bloqué
@endif {{-- ═══ 3. Aujourd'hui — les tâches dues, les retards, et ce qui est déjà fait ══════════ --}} Aujourd'hui {{ $compteur['a_faire'] }} à faire · {{ $compteur['terminees'] }} terminée{{ $compteur['terminees'] > 1 ? 's' : '' }}@if ($compteur['nouvelles'] > 0) · {{ $compteur['nouvelles'] }} nouvelle{{ $compteur['nouvelles'] > 1 ? 's' : '' }}@endif @if ($aujourdhui->isEmpty())

@if ($maintenant) Rien d'autre aujourd'hui. @else Aucune tâche aujourd'hui — ajoutez-en une ci-dessous, ou planifiez votre semaine. @endif

@else
@foreach ($aujourdhui as $tache) @php $faite = $tache->statut === TaskStatut::Termine; $bloquee = $tache->statut === TaskStatut::Bloque; $retard = $tache->estEnRetard(); @endphp
! $tache->estNouvelle(), 'border-primary-300 bg-primary-50/50 dark:border-primary-500/40 dark:bg-primary-500/5' => $tache->estNouvelle(), ])>

$faite, ])>{{ $tache->titre }}

{{ $tache->libelleDuMarche() }} @if ($faite) terminée {{ $tache->termine_le?->format('H:i') }}@php $pointees = $tache->updates->firstWhere('geste', \App\Enums\TaskGeste::Heures); @endphp@if ($pointees) · {{ $pointees->heuresLisibles() }} pointées @endif @elseif ($bloquee) bloquée — {{ $tache->motif_blocage?->court() }} @else $retard])> {{ $retard ? 'en retard · ' : '' }}{{ $tache->echeance->translatedFormat('D j M') }} @endif @if ($par = $origine->origineLisible($tache)) par {{ $par }} @endif @if ($tache->estNouvelle()) nouvelle @endif
@unless ($faite)
▶ {{ $bloquee || $tache->statut === TaskStatut::AReprendre ? 'Reprendre' : 'Commencer' }} @if ($tache->estNouvelle()) @endif
@endunless
@endforeach
@endif
{{-- ═══ 3 bis. Mes espaces clients (v4.7.0 §C2) ═══════════════════════════════════════ Pour qui gère au moins un espace client, et pour lui seul : par espace, ce qui attend le client, les échéances sous dix jours ouvrés, les demandes sans réponse. Chaque ligne mène à l'onglet concerné de la fiche. Rien pour les autres — comme « Espaces à gérer ». --}} @if ($espacesClients->isNotEmpty()) Mes espaces clients Ce qui attend le client, ce qui vient à échéance, ce qui n'a pas eu de réponse.
@foreach ($espacesClients as $bloc) @php $espaceClient = $bloc['espace']; $lignes = $bloc['en_attente']->count() + $bloc['echeances']->count() + $bloc['demandes']->count(); @endphp @endforeach
@endif {{-- ═══ 4. Ma semaine — cinq colonnes lundi → vendredi. Un jour vide se VOIT. ═══════════ --}} Ma semaine {{ $semaine[0]['date']->translatedFormat('j M') }} → {{ $semaine[4]['date']->translatedFormat('j M') }}
@foreach ($semaine as $jour)
! $jour['aujourdhui'], 'border-primary-400 bg-primary-50/50 dark:border-primary-500/50 dark:bg-primary-500/10' => $jour['aujourdhui'], ])>

{{ $jour['date']->translatedFormat('D') }}

{{ $jour['date']->format('d') }}

    @forelse ($jour['taches'] as $tache)
  • $tache->statut === TaskStatut::Termine, 'text-gray-700 dark:text-gray-300' => $tache->statut !== TaskStatut::Termine, ]) title="{{ $tache->titre }}"> {{ $tache->estNouvelle() ? '● ' : '' }}{{ $tache->titre }}
  • @empty
  • rien de prévu
  • @endforelse
@endforeach
{{-- ═══ 4 bis. Mission renfort (v4.4.0 §C1 b) ════════════════════════════════════════ Entre « Ma semaine » et « Mon équipe », et SEULEMENT s'il y a quelque chose : une quête ouverte pour son équipe, ou une mission à lui. La récompense est affichée AVANT d'accepter — c'est la règle « la récompense avant l'effort ». --}} @if ($missions->isNotEmpty()) @foreach ($missions as $mission) @php $gain = $recompenses[$mission->id] ?? null; @endphp 🌙 Mission de renfort {{ $mission->type->label() }}

{{ $mission->motif }}

{{ $mission->quand() }} · {{ $mission->libelleDuMarche() }}

{{-- Ce que ça rapporte, AVANT de dire oui. --}} @if ($gain && $gain['lignes'] !== []) @endif
@if ($mission->statut === \App\Enums\StatutRenfort::Publiee) Je prends @elseif ($mission->statut === \App\Enums\StatutRenfort::Prise)

✓ Prise, en attente du chef — vous recevrez un message.

@else

✓ Confirmée — pointez vos heures le jour J.

@if ($mission->attendSonPointage($this->date()))
Pointer mes heures de renfort
@endif @endif
@if ($mission->repos_compensateur_propose_le)

Repos compensateur proposé le {{ $mission->repos_compensateur_propose_le->translatedFormat('l j F') }} — votre chef confirme.

@endif
@endforeach @endif {{-- ═══ 5. Mon équipe — chefs de marché et managers SEULEMENT. Absent pour les autres. ══ --}} @if ($estEncadrant) Mon équipe
@foreach ($equipe as $membre)

{{ $membre['employee']->full_name }} {{ $membre['employee']->job_title }}

$membre['maintenant']?->statut === TaskStatut::Bloque, 'text-gray-500 dark:text-gray-400' => $membre['maintenant']?->statut !== TaskStatut::Bloque, ])> @if ($membre['maintenant']) {{ $membre['maintenant']->statut === TaskStatut::Bloque ? '⛔ bloqué · ' : '▶ ' }}{{ $membre['maintenant']->titre }} @else rien en cours · dernier geste : {{ $membre['dernier_geste']?->diffForHumans() ?? 'aucun' }} @endif

{{ $membre['a_venir'] }} à venir
@endforeach
{{-- v4.4.0 §C1 — L'objectif de la semaine : la part collective. Un marché sans objectif se VOIT, et c'est ce vide qui invite à en poser un. --}} @if ($objectifsDuChef->isNotEmpty())

Objectif de la semaine

    @foreach ($objectifsDuChef as $ligneObjectif)
  • {{ $ligneObjectif['marche'] }}

    @if ($ligneObjectif['objectif'])

    {{ $ligneObjectif['objectif']->libelle }}

    @if ($ligneObjectif['objectif']->atteint === null)
    Atteint Non atteint
    @else {{ $ligneObjectif['objectif']->etat() }} @endif @else

    aucun objectif cette semaine

    @endif
  • @endforeach
@endif
Assigner une tâche Objectif de la semaine Mission de renfort
@endif @endif {{-- ═══ 6. Mes heures — le bloc existant, inchangé ═════════════════════════════════════ --}} Mes heures {{-- Total du jour, affiché en permanence --}}

{{ number_format($this->total, 2, ',', ' ') }} h

total de la journée

@if (count($marches) === 0)

Aucun marché disponible pour cette journée. Passez par « Ma semaine » pour en ajouter un.

@else
@foreach ($marches as $projectId => $nom) @php $estInterne = (string) $projectId === TimesheetService::SANS_MARCHE; @endphp
! $estInterne, 'border-gray-300 bg-gray-50 dark:border-white/20 dark:bg-white/5' => $estInterne, ])> h
@endforeach
@if ($marchesMasques > 0 || $this->tousLesMarches) @endif @unless ($verrou) {{-- Saisie en un tap : demi-journée / journée complète sur un seul marché --}} {{-- Au-delà de trois marchés, la rangée de raccourcis devient plus encombrante qu'utile : on la réserve au cas qu'elle vise, le collaborateur mono-marché. --}} @if (count($marches) >= 1 && count($marches) <= 3)

Une seule journée sur un marché ?

@foreach ($marches as $projectId => $nom) ½ j — {{ \Illuminate\Support\Str::limit($nom, 16) }} 1 j — {{ \Illuminate\Support\Str::limit($nom, 16) }} @endforeach
@endif
Enregistrer Reprendre la journée d'hier @if ($this->aUneJourneeType()) Appliquer ma journée type @endif Enregistrer comme journée type
@endunless @endif

« Ma semaine » reste disponible pour relire et corriger toute une semaine d'un coup.

Ouvrir Ma semaine
{{-- v4.30.0 §B4 — Pilotage éteint : ni bloc « Ma prime », ni « Nouvelle tâche pour moi », ni fêtes, ni feuilles. --}} @if ($pilotageActif) {{-- ═══ 6 bis. Ma prime (v4.4.0 §C1 c) — après « Mes heures », avant le bouton ════════ Absent tant qu'aucun point n'a jamais été calculé : ni jauge à zéro, ni promesse vide. --}} @if ($blocPrime) @include('filament.employee.ma-prime', ['bloc' => $blocPrime, 'equipePrimes' => $equipePrimes]) @endif {{-- ═══ 7. + Nouvelle tâche pour moi — centré, sans notification pour personne ═════════ --}}
Nouvelle tâche pour moi
{{-- ═══ Les cinq moments (v4.4.0 §C1) ══════════════════════════════════════════════════ Une carte plein écran, moins d'une seconde, en CSS SEULEMENT : aucune bibliothèque, aucun son, aucun confetti JS lourd sur un téléphone de terrain. L'animation est coupée par `prefers-reduced-motion` — la carte, elle, reste : mêmes informations, sans le mouvement. Et chaque fête ne se joue QU'UNE FOIS (`celebre_le`, `details.revele_le`). --}} @if ($feteEnAttente)
{{ $feteEnAttente['type'] === 'revelation' ? '🎉' : '★' }}

{{ $feteEnAttente['titre'] }}

{{ $feteEnAttente['phrase'] }}

@if ($feteEnAttente['montant'])

{{ $feteEnAttente['montant'] }}

@endif
Continuer
@endif {{-- ═══ Les feuilles ═══════════════════════════════════════════════════════════════════ Un panneau qui monte du bas, comme sur la maquette : une seule à la fois, fermée au pouce. Ni modale Filament, ni seconde page. --}} @if ($feuille)
@include('filament.employee.ma-journee-feuille', [ 'feuille' => $feuille, 'tache' => $tacheDeLaFeuille, 'marchesProposes' => $marchesProposes, 'equipeProposee' => $equipeProposee, 'motifsDeBlocage' => $motifsDeBlocage, ])
@endif @endif