@extends('layouts.master') @section('title', 'Laporan Rekap Tagihan Tahunan') @section('page-title', 'Laporan Rekapitulasi Tagihan per Pelanggan per Tahun') @section('content') @php $shortK = function ($amount) { $n = (float) $amount; if ($n >= 1000) { $v = $n / 1000; $txt = number_format($v, 1, ',', '.'); $txt = preg_replace('/,0$/', '', $txt); return $txt . 'k'; } return number_format($n, 0, ',', '.'); }; @endphp

Rekap Tagihan Tahunan

Rekap tagihan per pelanggan per bulan untuk tahun {{ $tahun }}.
Kembali ke Dashboard
{{-- Filter Tahun --}}
Reset
{{-- Info ringkas --}}
Total Tagihan Tahun {{ $tahun }}
{{ $shortK($grandTotalTagihan) }}
Total Terbayar
{{ $shortK($grandTotalTerbayar) }}
@php $isPlus = $grandTotalSisa <= 0; @endphp
Total Sisa Tagihan
{{ $shortK($grandTotalSisa) }}
{{-- Tabel Rekap --}}
@php $currentKec = null; $currentDesa = null; @endphp @forelse ($rows as $row) @php $p = $row['pelanggan']; $perBulan = $row['per_bulan']; $detailBln = $row['per_bulan_detail'] ?? []; $totalSisa = $row['total_sisa'] ?? 0; $rowLunas = $totalSisa <= 0; $kec = $p->kecamatan ?? 'Tanpa Kecamatan'; $des = $p->desa ?? 'Tanpa Desa/Kelurahan'; @endphp {{-- HEADER GRUP: tampil jika kecamatan/desa berganti --}} @if ($currentKec !== $kec || $currentDesa !== $des) @php $currentKec = $kec; $currentDesa = $des; @endphp @endif {{-- baris data pelanggan --}} {{-- Kolom Jan–Des: warna + link ke detail per bulan --}} @for ($m = 1; $m <= 12; $m++) @php $det = $detailBln[$m] ?? ['tagihan' => 0, 'terbayar' => 0, 'sisa' => 0, 'last_paid_at' => null]; $nilai = (float) ($det['tagihan'] ?? 0); $terbayar = (float) ($det['terbayar'] ?? 0); $sisaBln = (float) ($det['sisa'] ?? max(0, $nilai - $terbayar)); $lastPaidAtBln = $det['last_paid_at'] ?? null; $adaTagihan = $nilai > 0; $lunasBln = $adaTagihan && $sisaBln <= 0; $cellClass = ''; $statusTitle = 'Tidak ada tagihan'; if ($adaTagihan) { if ($lunasBln) { $cellClass = 'bg-success-subtle text-success'; $statusTitle = 'Lunas'; } else { $cellClass = 'bg-warning-subtle text-warning'; $statusTitle = 'Belum lunas'; } } $detailUrl = $adaTagihan ? route('internet.laporan.rekap-tagihan-tahunan.detail', [ 'pelanggan' => $p->id, 'tahun' => $tahun, 'bulan' => $m, ]) : null; @endphp @endfor @empty @endforelse @if ($rows->count()) @for ($m = 1; $m <= 12; $m++) @endfor @endif
Kode Pelanggan Jan Feb Mar Apr Mei Jun Jul Agu Sep Okt Nov Des Total Tagihan Total Terbayar Sisa / Status
{{ $kec }} @if ($des) » {{ $des }} @endif
{{ $p->kode_pelanggan ?? '-' }} {{ $p->nama ?? '-' }}
{{ $p->paketInternet->nama ?? 'Tanpa paket' }}
@if ($adaTagihan && $detailUrl) {{ $shortK($nilai) }} @if ($lunasBln && !empty($lastPaidAtBln)) @endif @else - @endif {{ $shortK($row['total_tagihan']) }} {{ $shortK($row['total_terbayar']) }} @php $isLunas = $totalSisa <= 0; @endphp
{{ $isLunas ? 'LUNAS (TAHUNAN)' : 'BELUM LUNAS (TAHUNAN)' }}
{{ $shortK($totalSisa) }}
Belum ada data tagihan untuk tahun ini.
TOTAL @php $d = $grandPerBulanDetail[$m] ?? ['tagihan' => 0, 'terbayar' => 0, 'sisa' => 0]; $vTagihan = (float) ($d['tagihan'] ?? 0); $vTerbayar = (float) ($d['terbayar'] ?? 0); $vSisa = (float) ($d['sisa'] ?? 0); @endphp
{{ $shortK($vTagihan) }}
{{ $shortK($vTerbayar) }}
{{ $shortK($vSisa) }}
{{ $shortK($grandTotalTagihan) }} {{ $shortK($grandTotalTerbayar) }} {{ $shortK($grandTotalSisa) }}
@endsection @section('scripts') {{-- --}} @endsection