{{-- Gabarit PDF des actes de domiciliation : contrat, avenant, acte de résiliation, attestation. Il ressemblait à un export Word — logo de 70 pixels centré, un trait, un titre, le corps, deux cases. Il reprend désormais le vocabulaire graphique du devis et de la facture (resources/views/pdf/document-styles.blade.php) : violet #AD5DEC de la charte, filet orange #F59711 en rappel, encadrés des parties comme les blocs émetteur et client, pied de page légal répété. Deux contraintes de DomPDF gouvernent l'écriture de ce fichier : — les tableaux sont le seul moyen fiable de poser deux blocs côte à côte, « display: flex » et « float » n'y étant pas tenus ; — la pagination « Page X / Y » n'est pas calculable en CSS, elle est écrite après le rendu par DocumentGenerator::numeroterLesPages(). --}} @if ($projet ?? false) {{-- v1.12.0 §C — un projet ne peut pas passer pour le contrat signé. --}}
PROJET
@endif @php $societe = [ 'nom' => setting('societe.raison_sociale'), 'forme' => setting('societe.forme'), 'siege' => setting('societe.siege'), 'ice' => setting('societe.ice'), 'rc' => setting('societe.rc'), 'rc_ville' => setting('societe.rc_ville'), 'tp' => setting('societe.tp'), 'if' => setting('societe.if'), 'telephone' => setting('societe.telephone'), 'email' => setting('societe.email_domiciliation') ?: setting('societe.email'), ]; // Les identités des deux parties pour les encadrés. Celle du domicilié est // déjà rédigée par DocumentGenerator, dans la forme qui convient à son type. $domiciliataire = collect([ ''.e($societe['nom']).'', $societe['forme'] ? e($societe['forme']) : null, $societe['ice'] ? 'ICE : '.e($societe['ice']) : null, $societe['rc'] ? 'RC : '.e($societe['rc']).($societe['rc_ville'] ? ' — '.e($societe['rc_ville']) : '') : null, $societe['siege'] ? e($societe['siege']) : null, setting('gerant.nom') ? 'Représentée par '.e(setting('gerant.nom')).', gérant' : null, ])->filter()->implode('
'); $domicilie = $vars['domicilie_designation'] ?? e($vars['domicilie_raison_sociale'] ?? '—'); // Les mentions légales sont assemblées ici, et non enchaînées en // conditionnels collés bout à bout sur une seule ligne. Blade n'interprète une // directive que lorsque le caractère qui la précède n'est pas un caractère // de mot — sa recherche est ancrée sur \B. Un « @if » collé au « f » du // « @endif » qui le précède n'est donc pas compilé, le conditionnel reste // ouvert, et la vue compilée ne se termine jamais. C'est ce défaut qui a // mis le devis à terre en production ; ces lignes-ci ne tenaient que par le // pré-compilateur de Livewire, qui défaisait l'adjacence par accident. $identiteMaison = collect([$societe['nom'], $societe['forme'], $societe['siege']]) ->filter()->implode(' — '); $immatriculations = collect([ $societe['ice'] ? 'ICE : '.$societe['ice'] : null, $societe['rc'] ? 'RC : '.$societe['rc'].($societe['rc_ville'] ? ' ('.$societe['rc_ville'].')' : '') : null, $societe['if'] ? 'IF : '.$societe['if'] : null, $societe['tp'] ? 'TP : '.$societe['tp'] : null, ])->filter()->implode(' — '); $coordonnees = collect([$societe['telephone'], $societe['email']])->filter()->implode(' · '); @endphp {{-- (A) En-tête --}} @if ($logo) @endif
{{ $societe['nom'] }}
@if ($societe['forme'])
{{ $societe['forme'] }}
@endif
@if ($societe['siege']) {{ $societe['siege'] }}
@endif {{ $immatriculations }} @if ($coordonnees !== '')
{{ $coordonnees }} @endif
 
 
@if ($lettre ?? false) {{-- (G) La lettre : le destinataire à droite, le lieu et la date, l'objet. Les blocs partagés — en-tête, filets, pied, cases — sont ceux des actes, au pixel près. --}}
 
{!! $destinataire ?? '' !!}
{{ $societe['rc_ville'] ?: 'Fès' }}, le {{ $vars['date_signature'] ?? now()->format('d/m/Y') }}
Objet : {{ $titre }}
Réf. {{ $numero }}
@else {{-- (B) Le titre, la référence et la date --}}

{{ $titre }}

Réf. {{ $numero }} — {{ now()->format('d/m/Y') }}
{{-- (C) Les parties, côte à côte --}}
Le domiciliataire
{!! $domiciliataire !!}
Le domicilié
{!! $domicilie !!}
{{ $mention ?? 'Il a été convenu ce qui suit' }}
@endif {{-- (D) Le corps du gabarit, moins sa chute --}}
{!! $body !!}
{{-- (E) Le bloc final : la chute du corps, le lieu, la date et les cases. Insécable, et solidaire : les signatures ne se retrouvent jamais seules sur une page. --}}
@if (filled($chute ?? null))
{!! $chute !!}
@endif @unless ($lettre ?? false)
Fait à {{ $societe['rc_ville'] ?: 'Fès' }}, le {{ $vars['date_signature'] ?? now()->format('d/m/Y') }}{{ ($domicilieSigne ?? true) ? ', en deux (02) exemplaires originaux' : '' }}.
@endunless {{-- Rangée A — les signatures, une case par partie. L'attestation, que le domicilié ne signe pas, ne porte que la colonne du domiciliataire. --}} @if ($domicilieSigne ?? true) @else {{-- Cellule vide : sans elle, DomPDF étire la colonne unique sur toute la largeur et l'attestation perd la géométrie en demi-page des autres actes. --}} @endif
Le domiciliataire
{{ $societe['nom'] }}
{{-- Le nom et le titre du gérant, DANS la case : ils étaient imprimés sous le cadre, donc à côté de la signature qu'ils qualifient. La fonction se lit dans les réglages — « gérant » n'est plus écrit en dur, la société peut être présidée. --}}
{{ setting('gerant.nom') ?: 'Le gérant' }}
{{ setting('gerant.fonction') ?: 'Gérant' }}
@if ($cachet && $cachetImg) Cachet {{ $societe['nom'] }} @endif
Agissant pour le domiciliataire
Le domicilié
{{ $vars['domicilie_raison_sociale'] ?? '' }}
{{-- Le nom et le titre du signataire, dans la case, comme du côté du domiciliataire. Une personne physique signe pour elle-même : répéter son nom sous son propre nom n'apprendrait rien. --}} @if (($vars['rep_nom'] ?? '') !== ($vars['domicilie_raison_sociale'] ?? '') && filled($vars['rep_nom'] ?? null))
{{ $vars['rep_nom'] }} @if (filled($vars['rep_qualite'] ?? null))
{{ $vars['rep_qualite'] }} @endif
@endif
Signature précédée de la mention « lu et approuvé »
 
{{-- Rangée B — la légalisation réelle : un cadre par signature, aligné sous la case qu'il légalise, où la commune tamponne et écrit. Vide : les amorces « N° » et « Date » ont été retirées en v1.7.3, l'officier écrit où il veut. --}} @if (($cadreBas ?? 'legalisation') === 'legalisation') @if ($domicilieSigne ?? true) @else @endif
Cadre réservé à la légalisation de la signature
(commune / autorité compétente)
Cadre réservé à la légalisation de la signature
(commune / autorité compétente)
 
@elseif (($cadreBas ?? null) === 'decharge') {{-- Rangée B des lettres : le cadre où l'administration accuse réception. Même taille et même place que le cadre de légalisation. --}}
Cadre réservé à l'administration — reçu le …
(cachet)
 
@endif
{{-- L'annexe de l'avenant 2026-10 : les conditions du contrat en service, articles 2 à 15, rendues avec les mêmes variables. --}} @if (filled($annexe ?? null))

Annexe — Conditions de la domiciliation

Réf. {{ $numero }}
{!! $annexe !!}
@endif {{-- (F) Le pied de page, sur chaque page --}}
{{ $identiteMaison }} @if ($immatriculations !== '' || $societe['email'])
{{ collect([$immatriculations, $societe['email']])->filter()->implode(' — ') }} @endif