@php use Illuminate\Support\Carbon; // ===== USTAWIENIA BAZOWE ===== $CURRENCY = $faktura->kod_waluty ?? 'PLN'; $NUM = $faktura->p_2_numer ?? ('FA-'.$faktura->id_faktura); $DATE = Carbon::parse($faktura->p_1_data_wystawienia ?? now())->format('Y-m-d'); // ===== POMOCNIKI ===== $money = fn($v) => number_format((float)$v, 2, ',', ' ')." $CURRENCY"; $addr = function($p){ if (!$p) return ''; return collect([$p->adres_l1,$p->adres_l2,$p->adres_l3,$p->adres_l4,$p->adres_l5]) ->filter(fn($v)=>filled($v))->implode(', '); }; $name = function($p){ if (!$p) return ''; return filled($p->nazwa) ? $p->nazwa : trim(($p->imie ?? '').' '.($p->nazwisko ?? '')); }; $idLine = function($p){ if (!$p) return ''; if (filled($p->nip)) return "NIP: ".$p->nip; if (filled($p->kod_ue) && filled($p->nr_vat_ue)) return "VAT UE: {$p->kod_ue}{$p->nr_vat_ue}"; if (filled($p->nrid)) return "NrID: ".$p->nrid; return "Brak identyfikatora"; }; $formaMap = [ 1=>'gotówka',2=>'karta',3=>'bon',4=>'czek',5=>'kredyt',6=>'przelew',7=>'mobilna' ]; // ===== SUMY Z POZYCJI ===== $sumNet=$sumVat=$sumGross=0.0; foreach($faktura->pozycje as $p){ $sumNet += (float)($p->p_11_wart_netto ?? 0); $sumVat += (float)($p->p_11_vat ?? 0); $sumGross += (float)($p->p_11a_wart_brutto ?? 0); } // ===== TABELA VAT WG STAWEK ===== $byRate = []; // stawka => [net, vat, gross] foreach($faktura->pozycje as $p){ $rate = (string)($p->p_12_stawka ?? '-'); $n = (float)($p->p_11_wart_netto ?? 0); $v = (float)($p->p_11_vat ?? 0); $g = (float)($p->p_11a_wart_brutto ?? 0); if(!isset($byRate[$rate])) $byRate[$rate]=['n'=>0.0,'v'=>0.0,'g'=>0.0]; $byRate[$rate]['n'] += $n; $byRate[$rate]['v'] += $v; $byRate[$rate]['g'] += $g; } // ===== KURS WALUTY (jeśli nie-PLN i jest wpis) ===== $kurs = optional($faktura->kursWaluty); $kursInfo = null; if(strtoupper($CURRENCY)!=='PLN' && $kurs && filled($kurs->kod_waluty)){ $kursInfo = sprintf("Kurs: %s %s z dnia %s", $kurs->kod_waluty, $kurs->kurs !== null ? (str_replace('.', ',', (string)$kurs->kurs)) : '-', $kurs->data_kursu ? Carbon::parse($kurs->data_kursu)->format('Y-m-d') : '-' ); if (filled($kurs->tabela)) $kursInfo .= " (tabela: {$kurs->tabela})"; } // ===== PŁATNOŚCI – lista uporządkowana ===== $payments = $faktura->platnosci->sortBy(fn($p)=>$p->kolejnosc ?? PHP_INT_MAX)->values(); // ===== ROZLICZENIA / ZALICZKI ===== $settlements = $faktura->rozliczenia; $advances = $faktura->zaliczki; // ===== ZAŁĄCZNIKI (tylko listing nazw) ===== $attachments = $faktura->zalaczniki; @endphp Faktura {{ $NUM }} {{-- NAGŁÓWEK --}}

FAKTURA

Rodzaj: {{ $faktura->rodzaj_faktury ?? 'VAT' }} · Schema: FA(3)
@if($kursInfo)
{{ $kursInfo }}
@endif

Nr: {{ $NUM }}

Data wystawienia: {{ $DATE }}
Waluta: {{ $CURRENCY }}
{{-- PODMIOTY --}}

Sprzedawca

{{ $name($faktura->podmiot1) }}
{{ $addr($faktura->podmiot1) }}
{{ $idLine($faktura->podmiot1) }} @if(filled($faktura->podmiot1?->email))
{{ $faktura->podmiot1->email }}@endif @if(filled($faktura->podmiot1?->telefon))
{{ $faktura->podmiot1->telefon }}@endif

Nabywca

{{ $name($faktura->podmiot2) }}
{{ $addr($faktura->podmiot2) }}
{{ $idLine($faktura->podmiot2) }} @if(filled($faktura->podmiot2?->email))
{{ $faktura->podmiot2->email }}@endif @if(filled($faktura->podmiot2?->telefon))
{{ $faktura->podmiot2->telefon }}@endif
@if($faktura->podmiot3)

Odbiorca (podmiot 3)

{{ $name($faktura->podmiot3) }}
{{ $addr($faktura->podmiot3) }}
{{ $idLine($faktura->podmiot3) }} @elseif($faktura->podmiotUpowazniony)

Podmiot upoważniony

{{ $name($faktura->podmiotUpowazniony) }}
{{ $addr($faktura->podmiotUpowazniony) }}
{{ $idLine($faktura->podmiotUpowazniony) }} @else

Dodatkowe

Brak danych dodatkowych podmiotów. @endif
{{-- POZYCJE --}}
@foreach($faktura->pozycje as $i => $p) @php $unitNet = $p->p_9a_cena_netto; $unitGross = $p->p_9b_cena_brutto; $isNetMode = filled($unitNet) || !filled($unitGross); $unitShow = $isNetMode ? $unitNet : $unitGross; $valueShow = $isNetMode ? ($p->p_11_wart_netto ?? 0) : ($p->p_11a_wart_brutto ?? 0); @endphp @endforeach
Lp Nazwa towaru/usługi Jm Ilość Cena jedn. Stawka Wartość (netto/brutto)
{{ $i+1 }} {{ $p->p_7_nazwa }} @if(filled($p->pkwiu) || filled($p->gtu))
@if(filled($p->pkwiu)) PKWiU: {{ $p->pkwiu }}@endif @if(filled($p->pkwiu) && filled($p->gtu)) | @endif @if(filled($p->gtu)) GTU: {{ $p->gtu }}@endif
@endif
{{ $p->p_8a_jednostka ?? '-' }} {{ rtrim(rtrim(number_format((float)$p->p_8b_ilosc, 4, ',', ' '), '0'), ',') }} {{ $money($unitShow) }} {{ $p->p_12_stawka }} {{ $money($valueShow) }}
{{-- PODSUMOWANIA --}}
Razem netto:{{ $money($sumNet) }}
Razem VAT:{{ $money($sumVat) }}
Razem brutto:{{ $money($sumGross) }}
@foreach($byRate as $rate => $t) @endforeach
Stawka Netto VAT Brutto
{{ $rate }} {{ $money($t['n']) }} {{ $money($t['v']) }} {{ $money($t['g']) }}
{{-- PŁATNOŚCI / ROZLICZENIA / ZALICZKI --}}
Płatności @if($payments->isEmpty())
Brak informacji o płatnościach.
@else @foreach($payments as $i => $p) @php $forma = $p->platnosc_inna ? 'inna' : ($formaMap[$p->forma] ?? '-'); $termin= $p->termin ? Carbon::parse($p->termin)->format('Y-m-d') : ($p->termin_dni ? ('+' . (int)$p->termin_dni . ' dni') : '-'); $kwota = $p->is_czesciowa ? ($p->kwota ?? 0) : ($i===0 ? $sumGross : null); @endphp @if($p->iban || $p->nazwa_banku || $p->faktor || $p->rachunek_faktora || $p->nazwa_faktora || $p->link_do_platnosci || $p->ipksef) @endif @endforeach
Nr Forma Termin Kwota
{{ ($p->kolejnosc ?? ($i+1)) }} {{ $forma }} {{ $termin }} {{ $kwota!==null ? $money($kwota) : '' }}
@if($p->iban) Rachunek: {{ $p->iban }} @if($p->nazwa_banku) ({{ $p->nazwa_banku }}) @endif · @endif @if(!is_null($p->zaplacono)) Status: {{ $p->zaplacono ? 'zaplacono' : 'do zapłaty' }} · @endif @if($p->faktor) Faktoring: TAK @endif @if($p->rachunek_faktora) · Rachunek faktora: {{ $p->rachunek_faktora }} @endif @if($p->nazwa_faktora) · {{ $p->nazwa_faktora }} @endif @if($p->skonto_percent!==null) · Skonto: {{ rtrim(rtrim(number_format((float)$p->skonto_percent,2,',',' '),'0'),',') }}% @endif @if($p->skonto_warunki) · Warunki: {{ $p->skonto_warunki }} @endif @if($p->link_do_platnosci && $p->ipksef) · Link: {{ $p->link_do_platnosci }} · IP KSeF: {{ $p->ipksef }} @endif
@endif
Rozliczenia @if($settlements->isEmpty())
Brak rozliczeń powiązanych.
@else @foreach($settlements as $r) @endforeach
Ref KSeF / NrDataKwota
@if(filled($r->ref_ksef)) {{ $r->ref_ksef }} @endif @if(filled($r->ref_ksef) && filled($r->ref_numer)) · @endif @if(filled($r->ref_numer)) {{ $r->ref_numer }} @endif {{ $r->ref_data ? Carbon::parse($r->ref_data)->format('Y-m-d') : '-' }} {{ $r->kwota_rozliczona!==null ? $money($r->kwota_rozliczona) : '' }}
@endif
Zaliczki @if($advances->isEmpty())
Brak zaliczek.
@else @foreach($advances as $z) @endforeach
OpisDataKwota
{{ $z->opis }} {{ $z->data_otrzymania ? Carbon::parse($z->data_otrzymania)->format('Y-m-d') : '-' }} {{ $z->kwota!==null ? $money($z->kwota) : '' }}
@endif
{{-- UWAGI + ZAŁĄCZNIKI (tylko listing nazw, żeby zmieścić 1 stronę) --}}
@if(filled($faktura->stopka?->uwagi))
Uwagi:
{{ $faktura->stopka->uwagi }}
@endif @if($attachments && $attachments->count()>0)
Załączniki:
@foreach($attachments as $a) • {{ $a->nazwa_pliku }}@if(!$loop->last), @endif @endforeach
@endif
{{-- STOPKA STRONY --}}