Files
2026-06-02 16:32:20 +07:00

70 lines
2.4 KiB
PHP

<?php
namespace App\View\Components;
use Closure;
use Illuminate\Contracts\View\View;
use Illuminate\View\Component;
use App\Models\Wilayah\Provinsi;
use App\Models\Wilayah\KabupatenKota;
use App\Models\Wilayah\Kecamatan;
use App\Models\Wilayah\DesaKelurahan;
class WilayahDashboard extends Component
{
public function render(): View|Closure|string
{
$kodeJawa = ['31', '32', '33', '34', '35', '36'];
$totalProvinsi = Provinsi::count();
$totalKabKota = KabupatenKota::count();
$totalKecamatan = Kecamatan::count();
$totalDesaKelurahan = DesaKelurahan::count();
$provinsiAktif = Provinsi::has('kabupatenKota')->count();
$provinsiKosong = $totalProvinsi - $provinsiAktif;
$totalKabupaten = KabupatenKota::whereRaw("SUBSTRING(kode, 3, 2) < '70'")->count();
$totalKota = KabupatenKota::whereRaw("SUBSTRING(kode, 3, 2) >= '70'")->count();
if ($totalKabupaten == 0 && $totalKota == 0 && $totalKabKota > 0) {
$totalKabupaten = $totalKabKota;
}
$kecamatanPerdesaan = Kecamatan::whereHas('kabupatenKota', function($query) {
$query->whereRaw("SUBSTRING(kode, 3, 2) < '70'");
})->count();
$kecamatanPerkotaan = max(0, $totalKecamatan - $kecamatanPerdesaan);
$terpetakan = DesaKelurahan::whereNotNull('path')->count();
$belumTerpetakan = max(0, $totalDesaKelurahan - $terpetakan);
$totalDesa = DesaKelurahan::where('nama', 'like', 'DESA%')->count() ?: $totalDesaKelurahan;
$totalKelurahan = DesaKelurahan::where('nama', 'like', 'KEL%')->count();
$data = [
'totalProvinsi' => $totalProvinsi,
'provinsiAktif' => $provinsiAktif,
'provinsiKosong' => $provinsiKosong,
'totalKabKota' => $totalKabKota,
'totalKabupaten' => $totalKabupaten,
'totalKota' => $totalKota,
'totalKecamatan' => $totalKecamatan,
'kecamatanPerdesaan' => $kecamatanPerdesaan,
'kecamatanPerkotaan' => $kecamatanPerkotaan,
'totalDesaKelurahan' => $totalDesaKelurahan,
'totalDesa' => $totalDesa,
'totalKelurahan' => $totalKelurahan,
'terpetakan' => $terpetakan,
'belumTerpetakan' => $belumTerpetakan,
];
return view('components.wilayah-dashboard', $data);
}
}