update profil petani

This commit is contained in:
2026-10-07 12:03:02 +07:00
parent 77de648ded
commit 8539bdcec4
2 changed files with 69 additions and 8 deletions
@@ -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'
));
}
@@ -88,8 +88,8 @@
<div class="w-25">
<x-summary-card
title="Petani"
count="{{ $petani->count() }}"
subtitle="{{ $petani->where('jenis_kelamin', 1)->count() }} Laki-laki, {{ $petani->where('jenis_kelamin', 0)->count() }} Perempuan"
count="{{ number_format($totalPetani ?? 0, 0, ',', '.') }}"
subtitle="{{ number_format($totalPetaniLakiLaki ?? 0, 0, ',', '.') }} Laki-laki, {{ number_format($totalPetaniPerempuan ?? 0, 0, ',', '.') }} Perempuan"
icon="user-check"
color="primary"
/>
@@ -208,6 +208,22 @@
</select>
</div>
<div class="filter-item">
<select
name="sort_by"
id="filter-sort-by"
class="form-select form-select-sm indicator-filter-select"
data-filter-key="sort_by"
aria-label="Urutkan data petani"
>
<option value="">Urut Terbaru</option>
<option value="nama_asc" @selected($filters['sort_by'] === 'nama_asc')>Nama A-Z</option>
<option value="nama_desc" @selected($filters['sort_by'] === 'nama_desc')>Nama Z-A</option>
<option value="luas_lahan_desc" @selected($filters['sort_by'] === 'luas_lahan_desc')>Luas Lahan Terbesar</option>
<option value="luas_lahan_asc" @selected($filters['sort_by'] === 'luas_lahan_asc')>Luas Lahan Terkecil</option>
</select>
</div>
<div class="filter-item">
<div class="input-group input-group-sm">
<input
@@ -261,6 +277,7 @@
<input type="hidden" name="kecamatan_id" value="{{ $filters['kecamatan_id'] }}">
<input type="hidden" name="desa_kelurahan_id" value="{{ $filters['desa_kelurahan_id'] }}">
<input type="hidden" name="search" value="{{ $filters['search'] }}">
<input type="hidden" name="sort_by" value="{{ $filters['sort_by'] }}">
<div class="col-md-auto">
<div class="d-flex align-items-center">
@@ -286,10 +303,9 @@
<tr>
<th>No</th>
<th>Nama</th>
<th>Jenis Kelamin</th>
<th>Usia</th>
<th>Desa/Kelurahan</th>
<th>Komoditas Utama</th>
<th>Luas Lahan</th>
@if($showFasilitatorColumn)
<th>Fasilitator</th>
@endif
@@ -301,11 +317,22 @@
@forelse($petani as $index => $item)
<tr>
<td>{{ $loop->iteration }}</td>
<td><span class="text-heading">{{ $item->nama }}</span></td>
<td><span class="text-muted">{{ $item->jenis_kelamin ? 'Laki-laki' : 'Perempuan' }}</span></td>
<td><span class="text-muted">{{ $item->umur }} tahun</span></td>
<td>
<span class="text-heading d-block">{{ $item->nama }}</span>
<small class="text-muted">
{{ $item->jenis_kelamin ? 'Laki-laki' : 'Perempuan' }}
@if(! is_null($item->umur))
, {{ $item->umur }} tahun
@endif
</small>
</td>
<td><span class="text-muted">{{ $item->desaKelurahan?->nama }}, {{ $item->desaKelurahan?->kecamatan?->nama }}, {{ $item->desaKelurahan?->kecamatan?->kabupatenKota?->nama }}, {{ $item->desaKelurahan?->kecamatan?->kabupatenKota?->provinsi?->nama }}</span></td>
<td>{{ $item->komoditas?->nama }}</td>
<td>
<span class="text-muted">
{{ number_format((float) ($item->total_luas_lahan ?? 0), 2, ',', '.') }} ha
</span>
</td>
@if($showFasilitatorColumn)
<td><span class="text-muted">{{ $item->creator?->name ?? '-' }}</span></td>
@endif