filter segmen
This commit is contained in:
@@ -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);
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user