@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 --}}
| Lp |
Nazwa towaru/usługi |
Jm |
Ilość |
Cena jedn. |
Stawka |
Wartość (netto/brutto) |
@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
| {{ $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) }} |
@endforeach
{{-- PODSUMOWANIA --}}
| Razem netto: | {{ $money($sumNet) }} |
| Razem VAT: | {{ $money($sumVat) }} |
| Razem brutto: | {{ $money($sumGross) }} |
| Stawka |
Netto |
VAT |
Brutto |
@foreach($byRate as $rate => $t)
| {{ $rate }} |
{{ $money($t['n']) }} |
{{ $money($t['v']) }} |
{{ $money($t['g']) }} |
@endforeach
{{-- PŁATNOŚCI / ROZLICZENIA / ZALICZKI --}}
Płatności
@if($payments->isEmpty())
Brak informacji o płatnościach.
@else
| Nr |
Forma |
Termin |
Kwota |
@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
| {{ ($p->kolejnosc ?? ($i+1)) }} |
{{ $forma }} |
{{ $termin }} |
{{ $kwota!==null ? $money($kwota) : '' }} |
@if($p->iban || $p->nazwa_banku || $p->faktor || $p->rachunek_faktora || $p->nazwa_faktora || $p->link_do_platnosci || $p->ipksef)
|
@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
@endforeach
@endif
Rozliczenia
@if($settlements->isEmpty())
Brak rozliczeń powiązanych.
@else
| Ref KSeF / Nr | Data | Kwota |
@foreach($settlements as $r)
|
@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) : '' }} |
@endforeach
@endif
Zaliczki
@if($advances->isEmpty())
Brak zaliczek.
@else
| Opis | Data | Kwota |
@foreach($advances as $z)
| {{ $z->opis }} |
{{ $z->data_otrzymania ? Carbon::parse($z->data_otrzymania)->format('Y-m-d') : '-' }} |
{{ $z->kwota!==null ? $money($z->kwota) : '' }} |
@endforeach
@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 --}}