@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
{{-- 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 --}}
| {{ $company->str }} {{ $company->hn }} |
| {{ $company->plz }} {{ $company->ort }} |
@if($company->tel)
| Tel.: {{ $company->tel }} |
@endif
@if($company->fax)
| Fax: {{ $company->fax }} |
@endif
@if($company->email)
| {{ $company->email }} |
@endif
@if($company->webseite)
| {{ $company->webseite }} |
@endif
{{-- 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 --}}
| Pos. |
Bezeichnung |
Menge |
ME |
E-Preis € |
G-Preis € |
@foreach($offer->positions as $i => $pos)
@include('pms.offers._pdf_position_row', ['pos' => $pos, 'depth' => 0, 'nr' => ($i+1)])
@endforeach
{{-- 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 --}}
|
Pos. |
Leistung |
Menge |
ME |
E-Preis |
Netto |
MwSt. |
Brutto |
@foreach($offer->positions as $pos)
@include('pms.offers._ab_pdf_row', ['pos' => $pos, 'depth' => 0, 'vatFact' => $vatFact])
@endforeach
{{-- Summenblock --}}
| Angebotssumme netto (beauftragte Leistungen) |
{{ number_format($netto, 2, ',', '.') }} € |
{{ number_format($brutto, 2, ',', '.') }} € |
|
@foreach($optionalPositions as $optPos)
@php $og = (float)$optPos->quantity * (float)$optPos->unit_price; @endphp
|
Option {{ $optPos->pos_number }}: {{ $optPos->title }}
|
+ {{ number_format($og, 2, ',', '.') }} € |
+ {{ number_format($og * (1 + $vatFact), 2, ',', '.') }} € |
@endforeach
|
| 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
|