filter segmen

This commit is contained in:
2026-08-20 01:52:05 +07:00
parent ec009a2c55
commit a3f7cb4669
2 changed files with 69 additions and 59 deletions
@@ -66,9 +66,34 @@ class IndeksPetaniController extends Controller
->when($filters['kabupatenKota_id'], fn($q, $id) => $q->where('master_kecamatan.kabupaten_kota_id', $id))
->when($filters['kecamatan_id'], fn($q, $id) => $q->where('master_desa_kelurahan.kecamatan_id', $id))
->when($filters['desaKelurahan_id'], fn($q, $id) => $q->where('petani.desa_kelurahan_id', $id))
->when($filters['komoditas_id'], fn($q, $id) => $q->where('petani.komoditas_id', $id))
->whereIn('petani.komoditas_id', $komoditas);
if ($filters['segmen']) {
$skor->where(function ($q) use ($filters) {
match ($filters['segmen']) {
'Penggerak' => $q->where('skor_kesiapan_adopsi', '>=', 4),
'Perintis' => $q->where(function($q) {
$q->where('skor_kesiapan_adopsi', '>=', 3)
->where('skor_kesiapan_adopsi', '<', 4);
}),
'Pemerhati' => $q->where(function($q) {
$q->where('skor_kesiapan_adopsi', '>=', 2)
->where('skor_kesiapan_adopsi', '<', 3);
}),
'Pemula' => $q->where(function($q) {
$q->where('skor_kesiapan_adopsi', '>=', 1)
->where('skor_kesiapan_adopsi', '<', 2);
}),
'Belum Lengkap' => $q->where(function ($q) {
$q->whereNull('skor_kesiapan_adopsi')
->orWhere('skor_kesiapan_adopsi', '<', 1);
}),
default => null,
};
});
}
return $skor;
}
@@ -596,28 +621,37 @@ class IndeksPetaniController extends Controller
->whereIn('komoditas_id', $komoditas->pluck('id'))
->get();
$data = $daftarPetani->map(function ($item) use ($segmentStyles) {
$segmen = $item->skor
? $item->segmen()
: null;
$style = $segmentStyles[$segmen]
?? ['color' => 'secondary'];
return [
'id' => $item->id,
'nama' => $item->nama,
'desa' => $item->desaKelurahan?->nama,
'desa_kelurahan_id' => $item->desa_kelurahan_id,
'komoditas' => $item->komoditas?->nama,
'luas_lahan' => $item->lahans?->sum('luas_lahan') ?? 0,
'skor' => $item->skor
? $item->skor->skor_kesiapan_adopsi
: null,
'segmen' => $segmen,
'color' => $style['color'],
'url' => route('dashboard.profil-petani', $item->id),
];
});
$data = $daftarPetani
->filter(function ($item) use ($filters) {
if (!$filters['segmen']) {
return true;
}
$segmen = $item->skor ? $item->segmen() : 'Belum Lengkap';
return $segmen === $filters['segmen'];
})
->map(function ($item) use ($segmentStyles) {
$segmen = $item->skor
? $item->segmen()
: null;
$style = $segmentStyles[$segmen]
?? ['color' => 'secondary'];
return [
'id' => $item->id,
'nama' => $item->nama,
'desa' => $item->desaKelurahan?->nama,
'desa_kelurahan_id' => $item->desa_kelurahan_id,
'komoditas' => $item->komoditas?->nama,
'luas_lahan' => $item->lahans?->sum('luas_lahan') ?? 0,
'skor' => $item->skor
? $item->skor->skor_kesiapan_adopsi
: null,
'segmen' => $segmen,
'color' => $style['color'],
'url' => route('dashboard.profil-petani', $item->id),
];
})
->values();
return response()->json($data);
}
@@ -123,7 +123,16 @@ $provinsi = $desaKelurahan
</select>
</div>
<div class="filter-item">
<select id="filter-segmen" class="form-select form-select-sm" name="segmen">
<option value="">Semua Segmen</option>
@foreach ($segments as $segment)
<option value="{{ $segment['name'] }}" {{ old('segmen', $segmen) == $segment['name'] ? 'selected' : '' }}>
{{ $segment['name'] }}
</option>
@endforeach
</select>
</div>
<button
type="submit"
@@ -528,7 +537,6 @@ $provinsi = $desaKelurahan
$('#filter-desa').prop('disabled', false);
let defaultDesa = $('#filter-desa').data('default');
console.log('defaultDesa', defaultDesa);
if (defaultDesa) {
console.log('default desa', defaultDesa);
$('#filter-desa').val(defaultDesa).trigger('change');
@@ -567,30 +575,8 @@ $provinsi = $desaKelurahan
// Reset chart
chartSegmentasiPetani.resetSeries();
chartSegmentasiPetaniByKomoditas.resetSeries();
// Refresh DataTable
updatePetaniSubtitle();
tablePetani.draw();
});
function updatePetaniSubtitle() {
let subtitle = 'untuk semua komoditas, semua segmen, dan semua desa/kelurahan';
if (selectedKomoditas) {
subtitle = `untuk komoditas ${selectedKomoditas}`;
}
if (selectedSegmen) {
subtitle += ` dengan segmen ${selectedSegmen}`;
}
if (selectedDesa) {
subtitle += ` pada desa/kel. ${selectedDesa}`;
}
$('.card-subtitle').text(subtitle);
}
// Chart Dimensi dan Komponen Kesiapan Adopsi
let cardColor, labelColor, fontFamily, headingColor, shadeColor, legendColor, borderColor, barBgColor;
@@ -663,10 +649,6 @@ $provinsi = $desaKelurahan
// Set filter segmen
selectedSegmen = segmen;
// Refresh DataTable
updatePetaniSubtitle();
tablePetani.draw();
}
}
},
@@ -782,9 +764,6 @@ $provinsi = $desaKelurahan
console.log('Komoditas dipilih:', komoditas);
selectedKomoditas = komoditas;
updatePetaniSubtitle();
tablePetani.draw();
}
}
},
@@ -1238,7 +1217,7 @@ $provinsi = $desaKelurahan
data = $('#form-filter').serialize();
return data;
},
dataSrc: function(json) {
"dataSrc": function(json) {
return json;
},
"dataType": "json"
@@ -1304,7 +1283,7 @@ $provinsi = $desaKelurahan
data = $('#form-filter').serialize();
return data;
},
dataSrc: function(json) {
"dataSrc": function(json) {
return json;
},
"dataType": "json"
@@ -1376,9 +1355,6 @@ $provinsi = $desaKelurahan
createdRow: function(row, data) {
$(row)
.addClass('clickable-row')
.attr('data-desa', data.desa_kelurahan_id)
.attr('data-komoditas', data.komoditas)
.attr('data-segmen', data.segmen ?? '')
.attr('data-url', data.url);
}
});