diff --git a/app/Http/Controllers/Web/Produktivitas/PetaniController.php b/app/Http/Controllers/Web/Produktivitas/PetaniController.php index 2ed4604..9d707a4 100644 --- a/app/Http/Controllers/Web/Produktivitas/PetaniController.php +++ b/app/Http/Controllers/Web/Produktivitas/PetaniController.php @@ -44,12 +44,23 @@ class PetaniController extends Controller ->orderBy('nama') ->first(); $selectedKabupatenId = $request->query('kabupaten_kota_id', $defaultKabupaten?->id); + $allowedSorts = ['nama_asc', 'nama_desc', 'luas_lahan_desc', 'luas_lahan_asc']; + $requestedSort = $request->query('sort_by') + ?? match ($request->query('sort_nama')) { + 'asc' => 'nama_asc', + 'desc' => 'nama_desc', + default => null, + }; + $filters = [ 'search' => $request->query('search'), 'komoditas_id' => $request->query('komoditas_id'), 'kabupaten_kota_id' => $selectedKabupatenId, 'kecamatan_id' => $request->query('kecamatan_id'), 'desa_kelurahan_id' => $request->query('desa_kelurahan_id'), + 'sort_by' => in_array($requestedSort, $allowedSorts, true) + ? $requestedSort + : null, ]; $query = Petani::with([ @@ -61,7 +72,7 @@ class PetaniController extends Controller 'skor:id,petani_id,skor_kesiapan_adopsi', 'creator:id,name,role', ]) - ->orderBy('created_at', 'desc'); + ->withSum('lahans as total_luas_lahan', 'luas_lahan'); $search = $request->filled('search') ? Str::lower($request->search) : null; if ($search) { @@ -95,6 +106,26 @@ class PetaniController extends Controller $query->where('created_by', auth()->user()->id); } + $totalPetani = (clone $query)->count(); + $totalPetaniLakiLaki = (clone $query)->where('jenis_kelamin', 1)->count(); + $totalPetaniPerempuan = (clone $query)->where('jenis_kelamin', 0)->count(); + + match ($filters['sort_by']) { + 'nama_asc' => $query->orderBy('nama', 'asc')->orderBy('created_at', 'desc'), + 'nama_desc' => $query->orderBy('nama', 'desc')->orderBy('created_at', 'desc'), + 'luas_lahan_desc' => $query->orderByDesc( + Lahan::selectRaw('COALESCE(SUM(luas_lahan), 0)') + ->whereColumn('map_lahan.petani_id', 'petani.id') + ->whereNull('map_lahan.deleted_at') + )->orderBy('created_at', 'desc'), + 'luas_lahan_asc' => $query->orderBy( + Lahan::selectRaw('COALESCE(SUM(luas_lahan), 0)') + ->whereColumn('map_lahan.petani_id', 'petani.id') + ->whereNull('map_lahan.deleted_at') + )->orderBy('created_at', 'desc'), + default => $query->orderBy('created_at', 'desc'), + }; + $summaryPetaniIds = (clone $query)->pluck('id'); $petani = $query->paginate($request->per_page ?? 10); @@ -176,6 +207,9 @@ class PetaniController extends Controller 'totalLahan', 'totalLuasLahan', 'totalTanaman', + 'totalPetani', + 'totalPetaniLakiLaki', + 'totalPetaniPerempuan', 'showFasilitatorColumn' )); } diff --git a/resources/views/produktivitas/petani/index.blade.php b/resources/views/produktivitas/petani/index.blade.php index 6a05cd8..eced01a 100644 --- a/resources/views/produktivitas/petani/index.blade.php +++ b/resources/views/produktivitas/petani/index.blade.php @@ -88,8 +88,8 @@