diff --git a/app/Http/Controllers/Web/Dashboard/SummaryController.php b/app/Http/Controllers/Web/Dashboard/SummaryController.php index 77c4982..9326b5b 100644 --- a/app/Http/Controllers/Web/Dashboard/SummaryController.php +++ b/app/Http/Controllers/Web/Dashboard/SummaryController.php @@ -4,6 +4,12 @@ namespace App\Http\Controllers\Web\Dashboard; use App\Http\Controllers\Controller; use Illuminate\Http\Request; +use App\Models\Profile; +use App\Models\Wilayah\Provinsi; +use App\Models\wilayah\KabupatenKota; +use App\Models\Wilayah\Kecamatan; +use App\Models\Wilayah\DesaKelurahan; +use App\Models\Pertanian\Lahan; use Illuminate\Support\Facades\Gate; class SummaryController extends Controller @@ -16,4 +22,91 @@ class SummaryController extends Controller $title = 'Summary Dashboard'; return view('dashboard.summary', compact('title')); } + + public function produktivitas(Request $request) + { + if (!Gate::allows('super_admin') && !Gate::allows('admin')) { + abort(403); + } + + $title = 'Produktivitas Dashboard'; + $luasTotal = Lahan::whereNotNull('path')->sum('luas_lahan'); + $totalpetani = Profile::where('role', 'petani')->count(); + $totallahan = Lahan::whereNotNull('path')->count(); + + $petaniList = Profile::where('role', 'petani') + ->with(['lahan.tanaman.komoditas', 'desaKelurahan']) + ->paginate(20); + + $allLahan = Lahan::whereNotNull('path') + ->with(['profile', 'tanaman.komoditas', 'desaKelurahan.kecamatan.kabupatenKota.provinsi']) + ->get(); + + $geoProvinsi = []; + $geoKabupaten = []; + $geoKecamatan = []; + $geoDesa = []; + $geoLahan = []; + + foreach ($allLahan as $lahan) { + $desa = $lahan->desaKelurahan; + $kec = $desa ? $desa->kecamatan : null; + $kab = $kec ? $kec->kabupatenKota : null; + $prov = $kab ? $kab->provinsi : null; + + if ($prov && $prov->path) { + if (!isset($geoProvinsi[$prov->id])) { + $geoProvinsi[$prov->id] = ['id' => $prov->id, 'nama' => $prov->nama, 'polygon' => $prov->path, 'total_lahan' => 0, 'total_luas' => 0]; + } + $geoProvinsi[$prov->id]['total_lahan']++; + $geoProvinsi[$prov->id]['total_luas'] += $lahan->luas_lahan; + } + + if ($kab && $kab->path) { + if (!isset($geoKabupaten[$kab->id])) { + $geoKabupaten[$kab->id] = ['id' => $kab->id, 'parent_id' => $prov->id ?? null, 'nama' => $kab->nama, 'polygon' => $kab->path, 'total_lahan' => 0, 'total_luas' => 0]; + } + $geoKabupaten[$kab->id]['total_lahan']++; + $geoKabupaten[$kab->id]['total_luas'] += $lahan->luas_lahan; + } + + if ($kec && $kec->path) { + if (!isset($geoKecamatan[$kec->id])) { + $geoKecamatan[$kec->id] = ['id' => $kec->id, 'parent_id' => $kab->id ?? null, 'nama' => $kec->nama, 'polygon' => $kec->path, 'total_lahan' => 0, 'total_luas' => 0]; + } + $geoKecamatan[$kec->id]['total_lahan']++; + $geoKecamatan[$kec->id]['total_luas'] += $lahan->luas_lahan; + } + + if ($desa && $desa->path) { + if (!isset($geoDesa[$desa->id])) { + $geoDesa[$desa->id] = ['id' => $desa->id, 'parent_id' => $kec->id ?? null, 'nama' => $desa->nama, 'polygon' => $desa->path, 'total_lahan' => 0, 'total_luas' => 0]; + } + $geoDesa[$desa->id]['total_lahan']++; + $geoDesa[$desa->id]['total_luas'] += $lahan->luas_lahan; + } + + $geoLahan[] = [ + 'id' => $lahan->id, + 'parent_id' => $desa->id ?? null, + 'polygon' => $lahan->path, + 'nama_petani' => $lahan->profile->nama ?? 'N/A', + 'luas' => $lahan->luas_lahan, + 'tanaman' => $lahan->tanaman->map(fn($t) => $t->komoditas->nama ?? null)->filter()->unique()->values() + ]; + } + + return view('dashboard.produktivitas', [ + 'title' => $title, + 'petaniList' => $petaniList, + 'totalpetani' => $totalpetani, + 'totallahan' => $totallahan, + 'luasTotal' => $luasTotal, + 'geoProvinsi' => array_values($geoProvinsi), + 'geoKabupaten' => array_values($geoKabupaten), + 'geoKecamatan' => array_values($geoKecamatan), + 'geoDesa' => array_values($geoDesa), + 'geoLahan' => $geoLahan + ]); + } } diff --git a/resources/views/dashboard/dashboard.blade.php b/resources/views/dashboard/dashboard.blade.php new file mode 100644 index 0000000..24b8cb8 --- /dev/null +++ b/resources/views/dashboard/dashboard.blade.php @@ -0,0 +1,408 @@ +@extends('layout.main') + +@push('style') + +@endpush + +@section('content') +
Total Petani
+Total Survey
+Survey Selesai
+Survey Draft
+| Kode | +Petani | +Desa | +Tanggal | +Progres | +Status | +
|---|---|---|---|---|---|
| + {{ $s['code'] }} + | +
+
+
+
+ {{ $s['init'] }}
+
+ {{ $s['name'] }}
+ |
+ {{ $s['desa'] }} | +{{ $s['date'] }} | +
+
+
+
+
+
+
+ {{ $s['pct'] }}%
+
+ |
+ + @if($s['status'] === 'completed') + Selesai + @elseif($s['status'] === 'in_progress') + Sedang diisi + @else + Draft + @endif + | +
+ Ngada, Nusa Tenggara Timur · {{ now()->year }} +
+