@php $netto = $offer->positions->where('is_optional', 0)->sum('calculated_total'); $vatFactor = (float)($offer->vat_rate ?? 19) / 100; $mwst = $netto * $vatFactor; $brutto = $netto + $mwst; // Kundenadresse splitten $custAddress = $offer->customer?->address ?? ''; if (str_contains($custAddress, ',')) { [$custStreet, $custCity] = array_map('trim', explode(',', $custAddress, 2)); } else { $custStreet = $custAddress; $custCity = ''; } @endphp Angebot {{ $offer->offer_nr }} {{-- Footer (wird auf jeder Seite gedruckt) --}} {{-- Seiteninhalt --}}
{{-- Kopfbereich DIN 5008: Adressfeld links (45mm ab Oberkante), Firmeninfo rechts --}}
{{-- DIN-Abstand: @page margin-top = 2.5cm, Adressfeld bei 4.5cm → 2cm Puffer --}}
{{-- Absenderzeile (DIN: 8pt, grau, mit Trennlinie) --}}
{{ $company->name }} · {{ $company->str }} {{ $company->hn }}, {{ $company->plz }} {{ $company->ort }}
{{-- Empfängeradresse --}}
{{ $offer->customer?->name ?? '' }}
{{ $custStreet }}
{{ $custCity }}
{{-- Logo --}}
{{-- Firmeninfo als sauberer Block --}} @if($company->tel) @endif @if($company->fax) @endif @if($company->email) @endif @if($company->webseite) @endif
{{ $company->str }} {{ $company->hn }}
{{ $company->plz }} {{ $company->ort }}
Tel.: {{ $company->tel }}
Fax: {{ $company->fax }}
{{ $company->email }}
{{ $company->webseite }}
{{-- Angebots-Referenz als zweispaltiger Block --}}
Datum {{ $offer->offer_date ? \Carbon\Carbon::parse($offer->offer_date)->format('d.m.Y') : \Carbon\Carbon::now()->format('d.m.Y') }}
Angebot Nr. {{ $offer->offer_nr }}
Gültig bis {{ $offer->valid_until ? \Carbon\Carbon::parse($offer->valid_until)->format('d.m.Y') : \Carbon\Carbon::parse($offer->offer_date ?? now())->addWeeks(4)->format('d.m.Y') }}
{{-- Angebot-Überschrift --}} {{--
Angebot {{ $offer->offer_nr }}
--}} {{-- Bauvorhaben --}} @if($offer->project_location)
BV: {{ $offer->project_location->name }}
@endif {{-- Anschreiben --}}

Sehr geehrte Damen und Herren,

vielen Dank für Ihr Interesse an einem Angebot und dem damit verbundenem Vertrauen. Wir erlauben uns folgende Leistungen anzubieten und freuen uns auf eine Zusammenarbeit.

{{-- Positionstabelle --}} @foreach($offer->positions as $i => $pos) @include('pms.offers._pdf_position_row', ['pos' => $pos, 'depth' => 0, 'nr' => ($i+1)]) @endforeach
Pos. Bezeichnung Menge ME E-Preis € G-Preis €
{{-- Summenblock --}}
Nettosumme {{ number_format($netto, 2, ',', '.') }} €
@if($offer->vat_hinweis){{ $offer->vat_hinweis }} · @endif Umsatzsteuer {{ number_format($offer->vat_rate ?? 19, 0) }} % {{ number_format($mwst, 2, ',', '.') }} €
Gesamtsumme {{ number_format($brutto, 2, ',', '.') }} €
{{-- Zahlungsplan / Beschreibung --}} @if($offer->description)
Zahlungsplan:
{{ $offer->description }}
@endif {{-- Gültigkeit --}}
@if($offer->valid_until) Dieses Angebot ist gültig bis {{ \Carbon\Carbon::parse($offer->valid_until)->format('d.m.Y') }}. @else Dieses Angebot hat eine Gültigkeit von 4 Wochen. @endif
{{-- Unterschriftszeile --}} {{--
Angebot bestätigt und Auftrag erteilt:
Datum, Name, Unterschrift des Auftraggebers
--}} {{-- Seite: Optionale Positionen / Auftragsbestätigung --}} @php // Alle Positionen (alle Ebenen, optional + nicht-optional) sammeln $optionalPositions = collect(); $allAbPositions = collect(); $collectPositions = null; $collectPositions = function($positions) use (&$collectPositions, &$optionalPositions, &$allAbPositions) { foreach ($positions as $pos) { $allAbPositions->push($pos); if ($pos->is_optional) { $optionalPositions->push($pos); } if ($pos->children->count() > 0) { $collectPositions($pos->children); } } }; $collectPositions($offer->positions); $optNettoAll = $optionalPositions->sum(fn($p) => (float)$p->quantity * (float)$p->unit_price); $vatFact = (float)($offer->vat_rate ?? 19) / 100; @endphp {{-- AGB & Zahlungskonditionen --}} @if($terms)
{!! $terms->terms_text !!}
@endif {{-- Auftragsbestätigung als letzte Seite (immer) --}}
{{-- ═══ AUFTRAGSBESTÄTIGUNG (letzte Seite) ═══ --}} {{-- Kopf DIN 5008 (Rücksendung): Absender = Kunde oben grau, Empfänger = unsere Firma --}}
{{-- Absenderzeile: Kundendaten klein grau --}}
{{ $offer->customer?->name ?? '' }} @if($custStreet) · {{ $custStreet }}@endif @if($custCity) · {{ $custCity }}@endif
{{-- Empfänger: unsere Firma --}}
{{ $company->name }}
{{ $company->str }} {{ $company->hn }}
{{ $company->plz }} {{ $company->ort }}
{{-- Titel + Referenz --}}
Auftragsbestätigung
Angebot Nr.: {{ $offer->offer_nr }} @if($offer->project_location)  |  BV: {{ $offer->project_location->name }}@endif  |  Datum: {{ $offer->offer_date ? \Carbon\Carbon::parse($offer->offer_date)->format('d.m.Y') : \Carbon\Carbon::now()->format('d.m.Y') }} Auftraggeber: {{ $offer->customer?->name ?? '' }}
{{-- Einleitungstext --}}

Hiermit beauftrage ich / beauftragen wir {{ $company->name }} mit der Ausführung der im Angebot {{ $offer->offer_nr }} @if($offer->project_location) zum Bauvorhaben {{ $offer->project_location->name }}@endif aufgeführten Leistungen.

Hiermit bestätigen wir folgende Leistungen @if($optionalPositions->count())(optionale Positionen bitte ankreuzen)@endif:

{{-- Tabelle: Alle Positionen --}} @foreach($allAbPositions as $optPos) @php $og = (float)$optPos->quantity * (float)$optPos->unit_price; $om = $og * $vatFact; $ob = $og + $om; @endphp @endforeach
Pos. Leistung Menge ME E-Preis Netto MwSt. Brutto
@if($optPos->is_optional) @else @endif {{ $optPos->pos_number }} {{ $optPos->title }} @if($optPos->is_optional) (optional)@endif {{ $optPos->quantity ? number_format($optPos->quantity, 2, ',', '.') : '—' }} {{ $optPos->positionUnit->name ?? '—' }} {{ $optPos->unit_price ? number_format($optPos->unit_price, 2, ',', '.') . ' €' : '—' }} {{ $og > 0 ? number_format($og, 2, ',', '.') . ' €' : '—' }} {{ $og > 0 ? number_format($om, 2, ',', '.') . ' €' : '—' }} {{ $ob > 0 ? number_format($ob, 2, ',', '.') . ' €' : '—' }}
{{-- Summenblock --}}
@foreach($optionalPositions as $optPos) @php $og = (float)$optPos->quantity * (float)$optPos->unit_price; @endphp @endforeach
Angebotssumme netto (beauftragte Leistungen) {{ number_format($netto, 2, ',', '.') }} € {{ number_format($brutto, 2, ',', '.') }} €
Option {{ $optPos->pos_number }}: {{ $optPos->title }} + {{ number_format($og, 2, ',', '.') }} € + {{ number_format($og * (1 + $vatFact), 2, ',', '.') }} €
zzgl. Umsatzsteuer {{ number_format($offer->vat_rate ?? 19, 0) }} % {{ number_format(($netto + $optNettoAll) * $vatFact, 2, ',', '.') }} €
Gesamtbetrag inkl. aller Optionen {{ number_format($netto + $optNettoAll, 2, ',', '.') }} € {{ number_format(($netto + $optNettoAll) * (1 + $vatFact), 2, ',', '.') }} €
netto brutto inkl. MwSt.
{{-- Hinweistext mit AGB-Bestätigung --}}
Mit meiner Unterschrift beauftrage ich verbindlich die oben angekreuzten optionalen Leistungen zu den im Angebot {{ $offer->offer_nr }} genannten Konditionen. Ich bestätige, die Allgemeinen Geschäftsbedingungen sowie die Zahlungsbedingungen des Auftragnehmers gelesen, verstanden und akzeptiert zu haben.
{{-- Unterschrift --}}
Ort, Datum
Unterschrift und Stempel Auftraggeber