@php use App\Support\Money; use App\Support\PdfText; use App\Support\SectionsDeLignes; // $stamp et $showWithholding sont fournis par le service de rendu ; // $density par DensitePdf (rendu direct sans densité → confort). $stamp = $stamp ?? null; $showWithholding = $showWithholding ?? true; $density = $density ?? 'confort'; $aere = $density === 'confort'; $hasVat = $quote->vat_mode?->avecTva() && (float) $quote->total_tva > 0; $retenue = $quote->vat_mode?->avecRetenue() ? round((float) $quote->total_tva * (float) $quote->retenue_source_taux / 100, 2) : 0.0; $objet = PdfText::clean($quote->objet); $hasPaymentBlock = $company['banque'] || $company['rib']; // v1.8.0 §C — mêmes préférences d'affichage et mêmes sections que la // facture (OUI par défaut = rendu historique). $showLineNumbers = (bool) ($quote->show_line_numbers ?? true); $showSectionSubtotals = (bool) ($quote->show_section_subtotals ?? true); $groupes = SectionsDeLignes::grouper($quote->lines); $colCount = $showLineNumbers ? 6 : 5; // Assemblées en PHP plutôt qu'enchaînées en directives collées : voir // l'explication du piège dans pdf/document-footer.blade.php. $mentionsEmetteur = collect([ $company['ice'] ? 'ICE : '.$company['ice'] : null, $company['if'] ? 'IF : '.$company['if'] : null, ])->filter()->implode(' · '); @endphp @include('pdf.document-styles') {{-- Marqueur de la densité retenue (testable sur le HTML rendu). --}} {{-- (A) En-tête : « DEVIS N° X » sur une seule ligne, Date + Validité dessous. --}}
@if ($logo) {{-- Largeur imposée, hauteur libre : logo-pdf.png est un bandeau de 1200 × 376 et non un carré. Le borner par la hauteur le rendait minuscule. --}} @endif
{{ $company['nom'] }}
{{-- Le séparateur ne paraît que si les deux coordonnées existent. --}} {{ collect([$company['telephone'], $company['email']])->filter()->implode(' · ') }} @if ($company['siege'])
{{ $company['siege'] }}@endif
DEVIS N° {{ $quote->numero }}
Date : {{ $quote->date?->format('d/m/Y') }} @if ($quote->date_validite)
Valable jusqu'au : {{ $quote->date_validite->format('d/m/Y') }} @endif
 
{{-- (B) Émetteur / Destinataire --}}
Émetteur
{{ $company['nom'] }}
@if ($company['siege']) {{ $company['siege'] }}
@endif {{ $mentionsEmetteur }}
Devis établi pour
{{ $quote->client_nom }}
@if ($quote->client_adresse) {!! nl2br(e(PdfText::clean($quote->client_adresse))) !!}
@endif @if ($quote->client_ice) ICE : {{ $quote->client_ice }} @endif
{{-- (C) Objet et durée — le bloc références de Mobdie reste le sien. --}} @if ($objet)
Objet : {{ $objet }} @if ($quote->duree_mois)
Durée : {{ $quote->duree_mois }} mois @endif
@endif {{-- (D) Tableau des prestations — mêmes largeurs que la facture : désignation ≥ 58 % (62 % sans numéros). --}} @if ($showLineNumbers) @endif {{-- v1.8.0 §A — même logique de sections que la facture (bandeau + sous-total HT), numérotation continue. Sans section, le rendu est identique à avant. --}} @php $i = 0; @endphp @foreach ($groupes as $groupe) @if ($groupe['title'] !== null) @endif @foreach ($groupe['lines'] as $line) @if ($showLineNumbers) @endif @php $i++; @endphp @endforeach {{-- Sous-total masquable par pièce ; le bandeau de section reste. --}} @if ($groupe['title'] !== null && $showSectionSubtotals) @endif @endforeach
N°Désignation Qté Unité P.U. HT Total HT
{{ PdfText::clean($groupe['title']) }}
{{ $i + 1 }}{!! nl2br(e(PdfText::clean($line->designation))) !!} {{ Money::quantite($line->quantite) }} {{ $line->unite ?: 'U' }} {{ Money::format($line->prix_unitaire_ht, false) }} {{ Money::format($line->total_ht, false) }}
Sous-total HT — {{ PdfText::clean($groupe['title']) }}{{ Money::format($groupe['subtotal'], false) }}
{{-- (E) Totaux --}} @if ($hasVat) @endif @if ($showWithholding && $retenue > 0) @endif
TOTAL HORS TAXE{{ Money::format($quote->total_ht, false) }}
TVA{{ Money::format($quote->total_tva, false) }}
TOTAL TTC EN DIRHAMS{{ Money::format($quote->total_ttc, false) }}
Retenue à la source ({{ Money::taux($quote->retenue_source_taux) }}) − {{ Money::format($retenue, false) }}
NET À PAYER{{ Money::format($quote->total_ttc - $retenue, false) }}
{{-- (F) Montant en toutes lettres --}}
Arrêté le présent devis à la somme de {{ $montantLettres }}.
{{-- (G) Coordonnées bancaires --}} @if ($hasPaymentBlock)
Coordonnées bancaires
@if ($company['banque'])Banque : {{ $company['banque'] }}
@endif @if ($company['rib'])RIB : {{ $company['rib'] }}@endif
@endif {{-- (H) Deux cases distinctes, toutes deux à taille de tampon physique : cachet du prestataire / bon pour accord du client. --}}
Cachet et signature du prestataire
@if ($stamp) Cachet @endif
Bon pour accord
Date et signature du client
{{-- (I) Pied de page légal, 2 lignes, répété au bas de chaque page --}} @include('pdf.document-footer', ['company' => $company])