@php use App\Enums\Formation\DocumentProjet; use App\Support\Formation\TexteArabePdf; $rtl = $langue === 'ar'; // dompdf ne sait ni lier les lettres arabes ni inverser l'ordre bidirectionnel : mesuré, il // sort des glyphes isolés et illisibles. On façonne donc AVANT de lui donner le texte (§7). // ⚠️ $t ne fait QUE façonner : il n'échappe pas. C'est `{{ }}` qui échappe, et il échappe une // fois. Une double protection écrivait « qu'est-ce que tu vends » en toutes lettres sur // le dossier remis à la commission — mesuré sur les huit PDF avant correction. Aux rares // endroits où l'on assemble du HTML à la main ($case du canvas), on échappe explicitement. $t = static fn (?string $texte, int $largeur = 90): string => TexteArabePdf::pdf($texte, $langue, $largeur); $dh = static fn ($v): string => number_format((float) $v, 2, ',', ' ').' DH'; $manque = $rtl ? 'لم يُجب بعد' : 'pas encore répondu'; // Le canvas est le seul document en paysage, et il DOIT tenir sur une page — un Business // Model Canvas coupé en deux n'est plus un canvas. Mesuré : avec les marges de portrait il // dépassait d'une poignée de points. On lui donne donc une page plus serrée, et le pied // remonte d'autant pour ne pas tomber hors de la feuille. $paysage = $document === DocumentProjet::BusinessModelCanvas; $margeBas = $paysage ? '1.5cm' : '2.4cm'; $piedSous = $paysage ? '-1.0cm' : '-1.5cm'; @endphp {{-- Les quatre documents du dossier (v2.1 §7). « Le PDF doit être présentable tel quel à une commission de financement » : mise en page sobre, identité du bénéficiaire, nom du programme, logo, date. Prêt à joindre au dossier R8, sans reprise sous Word. Un champ sans réponse écrit « pas encore répondu », jamais un zéro et jamais un blanc : sur un dossier de financement, un blanc se lit comme un oubli de l'organisme, un zéro comme une réponse du porteur. Ni l'un ni l'autre n'est vrai. --}}
@php $logo = \App\Support\Identite::cheminLogo(); @endphp @if ($logo !== null && ! $rtl) @endif @if ($logo !== null && $rtl) @endif
{{ $companyName }}
{{ $t($titre) }}
{{ $t($apprenant->nomComplet) }} @if (filled($apprenant->projet_intitule)) — {{ $t($apprenant->projet_intitule) }} @endif @if (filled($apprenant->village)) · {{ $t($apprenant->village) }} @endif
{{ $t($rtl ? ($programme?->titre_ar ?: $programme?->titre_fr ?? '') : ($programme?->titre_fr ?? '')) }} @if ($programme?->referenceMarche()) · {{ $programme->referenceMarche() }} @endif
{{ $genere_le->format('d/m/Y') }}
@unless ($complet)
{{ $rtl ? $t('هذه الوثيقة غير مكتملة') : 'Ce document est incomplet.' }} {{ $rtl ? '' : 'Il manque : ' }}{{ $t(implode(' · ', array_slice($manquants, 0, 12))) }} @if (count($manquants) > 12) … @endif
@endunless @switch($document) @case(DocumentProjet::BusinessModelCanvas) @include('pdf.formation.dossier-canvas') @break @case(DocumentProjet::ProgrammeInvestissement) @include('pdf.formation.dossier-investissement') @break @case(DocumentProjet::PlanningRealisation) @include('pdf.formation.dossier-planning') @break @default @include('pdf.formation.dossier-business-plan') @endswitch @if (! empty($anomalies))
{{ $rtl ? $t('نقاط تستحق المراجعة') : 'Points à revoir avec le formateur' }}
@endif
{{ $companyName }} — {{ $t($titre) }} · {{ $t($apprenant->nomComplet) }} · {{ $genere_le->format('d/m/Y à H:i') }}