Update Profile Petani
This commit is contained in:
@@ -13,6 +13,11 @@ use App\Models\Pertanian\Lahan;
|
||||
use App\Models\Pertanian\Tanaman;
|
||||
use App\Models\Pertanian\PraktikBudidaya;
|
||||
use App\Models\Pertanian\SurveyPanen;
|
||||
use App\Models\Pertanian\SosialEkonomi;
|
||||
use App\Models\Pertanian\SurveyPelatihan;
|
||||
use App\Models\Pertanian\SurveySertifikasi;
|
||||
use App\Models\Pertanian\AksesPasar;
|
||||
use App\Models\Pertanian\HargaJualPanen;
|
||||
use App\Models\Pertanian\PendapatanKomoditas;
|
||||
use App\Models\Wilayah\DesaKelurahan;
|
||||
use App\Models\Profile;
|
||||
@@ -23,6 +28,15 @@ use App\Enums\PraktikBudidaya\MetodePenangananHamaPenyakit;
|
||||
use App\Enums\PraktikBudidaya\FrekuensiSanitasiLahan;
|
||||
use App\Enums\PraktikBudidaya\PenangananGulma;
|
||||
use App\Enums\PraktikBudidaya\KondisiPengelolaanAir;
|
||||
use App\Enums\SosialEkonomi\SkorKecukupanPenghasilan;
|
||||
use App\Enums\SosialEkonomi\SkorKemampuanMenabung;
|
||||
use App\Enums\SosialEkonomi\TerdaftarKelompokTani;
|
||||
use App\Enums\SosialEkonomi\PeranDalamKelompok;
|
||||
use App\Enums\SosialEkonomi\StatusRekeningTabungan;
|
||||
use App\Enums\SosialEkonomi\PengalamanKreditKebun;
|
||||
use App\Enums\SosialEkonomi\KeterikatanHutangPanen;
|
||||
use App\Enums\SosialEkonomi\PraktikIjon;
|
||||
use App\Enums\SosialEkonomi\KebebasanMemilihPembeli;
|
||||
|
||||
class ProfilPetaniController extends Controller
|
||||
{
|
||||
@@ -62,6 +76,7 @@ class ProfilPetaniController extends Controller
|
||||
|
||||
$praktikBudidaya = PraktikBudidaya::where('petani_id', $petani->id)->first();
|
||||
$surveyPanen = SurveyPanen::where('petani_id', $petani->id)->first();
|
||||
$sosialEkonomi = SosialEkonomi::where('petani_id', $id)->first();
|
||||
|
||||
$indikatorOnFarm = collect();
|
||||
|
||||
@@ -145,6 +160,280 @@ class ProfilPetaniController extends Controller
|
||||
'konservasi_tanah' => $praktikBudidaya?->kebiasaan_konservasi_tanah ?? [],
|
||||
];
|
||||
|
||||
$d4SosialEkonomi = null;
|
||||
|
||||
$terdaftarKelompok = $sosialEkonomi->terdaftar_kelompok_tani;
|
||||
$peranKelompok = $sosialEkonomi->peran_dalam_kelompok;
|
||||
|
||||
if ($sosialEkonomi) {
|
||||
|
||||
$kecukupanPenghasilan = $sosialEkonomi->skor_kecukupan_penghasilan;
|
||||
$kemampuanMenabung = $sosialEkonomi->skor_kemampuan_menabung;
|
||||
|
||||
$rekening = $sosialEkonomi->status_rekening_tabungan;
|
||||
$kredit = $sosialEkonomi->pengalaman_kredit_kebun;
|
||||
$hutangPanen = $sosialEkonomi->keterikatan_hutang_panen;
|
||||
$ijon = $sosialEkonomi->praktik_ijon;
|
||||
|
||||
$programKeuanganRaw = $sosialEkonomi->status_program_keuangan_formal ?? [];
|
||||
$namaProgram = [
|
||||
'pkh' => 'PKH',
|
||||
'blt' => 'BLT',
|
||||
'kur' => 'KUR',
|
||||
'kredit_koperasi_resmi' => 'Kredit Koperasi',
|
||||
'credit_union_cu' => 'Credit Union (CU)',
|
||||
'pinjaman_bumdes' => 'Pinjaman BUMDes',
|
||||
'modal_hibah_dinas_pertanian' => 'Hibah Dinas Pertanian',
|
||||
];
|
||||
|
||||
$programBantuan = collect($programKeuanganRaw)->map(function ($status, $key) use ($namaProgram) {
|
||||
$statusMeta = match ($status) {
|
||||
'sedang_menerima' => [
|
||||
'label' => 'Sedang Menerima',
|
||||
'short' => 'Aktif',
|
||||
'color' => 'success',
|
||||
'icon' => 'tabler-circle-check',
|
||||
],
|
||||
'pernah_tapi_tidak_lagi' => [
|
||||
'label' => 'Pernah, Tidak Lagi',
|
||||
'short' => 'Pernah',
|
||||
'color' => 'info',
|
||||
'icon' => 'tabler-history',
|
||||
],
|
||||
'belum_pernah' => [
|
||||
'label' => 'Belum Pernah',
|
||||
'short' => 'Belum Pernah',
|
||||
'color' => 'secondary',
|
||||
'icon' => 'tabler-minus',
|
||||
],
|
||||
default => [
|
||||
'label' => Str::headline($status),
|
||||
'short' => Str::headline($status),
|
||||
'color' => 'secondary',
|
||||
'icon' => 'tabler-help-circle',
|
||||
],
|
||||
};
|
||||
|
||||
return [
|
||||
'key' => $key,
|
||||
'nama' => $namaProgram[$key] ?? Str::headline($key),
|
||||
'status' => $status,
|
||||
'label' => $statusMeta['label'],
|
||||
'short' => $statusMeta['short'],
|
||||
'color' => $statusMeta['color'],
|
||||
'icon' => $statusMeta['icon'],
|
||||
];
|
||||
|
||||
})
|
||||
->values();
|
||||
|
||||
$d4SosialEkonomi = [
|
||||
|
||||
'jumlah_tanggungan' => $sosialEkonomi->jumlah_tanggungan,
|
||||
|
||||
'kecukupan_penghasilan' => [
|
||||
'skor' => $kecukupanPenghasilan?->value,
|
||||
'label' => $kecukupanPenghasilan?->label(),
|
||||
|
||||
'color' => $this->getScoreColor(
|
||||
$kecukupanPenghasilan?->value
|
||||
),
|
||||
],
|
||||
|
||||
'kemampuan_menabung' => [
|
||||
'skor' => $kemampuanMenabung?->value,
|
||||
'label' => $kemampuanMenabung?->label(),
|
||||
|
||||
'color' => $this->getScoreColor(
|
||||
$kemampuanMenabung?->value
|
||||
),
|
||||
],
|
||||
|
||||
'status_kepemilikan_lahan' => $sosialEkonomi->status_kepemilikan_lahan,
|
||||
|
||||
'kelembagaan' => [
|
||||
'terdaftar' =>
|
||||
$terdaftarKelompok === TerdaftarKelompokTani::YA,
|
||||
|
||||
'status' =>
|
||||
$terdaftarKelompok?->label(),
|
||||
|
||||
'peran' =>
|
||||
$peranKelompok?->label(),
|
||||
],
|
||||
|
||||
'kondisi_keuangan' => [
|
||||
'rekening' => [
|
||||
'label' => $rekening?->label(),
|
||||
'value' => $rekening?->value,
|
||||
'color' => $this->getFinancialColor(
|
||||
$rekening?->value
|
||||
),
|
||||
'icon' => 'tabler-building-bank',
|
||||
],
|
||||
|
||||
'kredit' => [
|
||||
'label' => $kredit?->label(),
|
||||
'value' => $kredit?->value,
|
||||
'color' => $this->getFinancialColor(
|
||||
$kredit?->value
|
||||
),
|
||||
'icon' => 'tabler-credit-card',
|
||||
],
|
||||
|
||||
'hutang_panen' => [
|
||||
'label' => $hutangPanen?->label(),
|
||||
'value' => $hutangPanen?->value,
|
||||
'color' => $this->getFinancialColor(
|
||||
$hutangPanen?->value
|
||||
),
|
||||
'icon' => 'tabler-coins',
|
||||
],
|
||||
|
||||
'ijon' => [
|
||||
'label' => $ijon?->label(),
|
||||
'value' => $ijon?->value,
|
||||
'color' => $this->getFinancialColor(
|
||||
$ijon?->value
|
||||
),
|
||||
'icon' => 'tabler-link',
|
||||
],
|
||||
],
|
||||
|
||||
'program_bantuan' => $programBantuan,
|
||||
];
|
||||
}
|
||||
|
||||
$surveyPelatihan = SurveyPelatihan::where('petani_id', $id)
|
||||
->orderByDesc('tahun_pelaksanaan')
|
||||
->get();
|
||||
|
||||
$surveySertifikasi = SurveySertifikasi::where('petani_id', $id)
|
||||
->orderByDesc('tahun_pelaksanaan')
|
||||
->get();
|
||||
|
||||
$aksesPasar = AksesPasar::where('petani_id', $id)->first();
|
||||
$saluranTerdahulu = collect($aksesPasar?->saluran_terdahulu ?? [] );
|
||||
|
||||
$d6SaluranPasar = [
|
||||
[
|
||||
'key' => 'tengkulak',
|
||||
'label' => 'Tengkulak',
|
||||
'icon' => 'tabler-user-dollar',
|
||||
'aktif' => $saluranTerdahulu->contains(
|
||||
fn ($item) => Str::contains(
|
||||
Str::lower($item),
|
||||
['tengkulak', 'pedagang lokal']
|
||||
)
|
||||
),
|
||||
],
|
||||
|
||||
[
|
||||
'key' => 'koperasi',
|
||||
'label' => 'Koperasi',
|
||||
'icon' => 'tabler-users-group',
|
||||
'aktif' => $saluranTerdahulu->contains(
|
||||
fn ($item) => Str::contains(
|
||||
Str::lower($item),
|
||||
'koperasi'
|
||||
)
|
||||
),
|
||||
],
|
||||
|
||||
[
|
||||
'key' => 'bumdes',
|
||||
'label' => 'BUMDes',
|
||||
'icon' => 'tabler-building-community',
|
||||
'aktif' => $saluranTerdahulu->contains(
|
||||
fn ($item) => Str::contains(
|
||||
Str::lower($item),
|
||||
'bumdes'
|
||||
)
|
||||
),
|
||||
],
|
||||
|
||||
[
|
||||
'key' => 'eksportir',
|
||||
'label' => 'Eksportir',
|
||||
'icon' => 'tabler-plane-departure',
|
||||
'aktif' => $saluranTerdahulu->contains(
|
||||
fn ($item) => Str::contains(
|
||||
Str::lower($item),
|
||||
'eksportir'
|
||||
)
|
||||
),
|
||||
],
|
||||
];
|
||||
|
||||
$hargaJualPanen = HargaJualPanen::where('petani_id', $id)->get();
|
||||
|
||||
$d6HargaJual = $hargaJualPanen->map(function ($item) {
|
||||
|
||||
$hargaSekarang = $item->harga_panen_terakhir !== null
|
||||
? (float) $item->harga_panen_terakhir
|
||||
: null;
|
||||
|
||||
$hargaTahunLalu = $item->harga_tahun_lalu !== null
|
||||
? (float) $item->harga_tahun_lalu
|
||||
: null;
|
||||
|
||||
$perubahan = null;
|
||||
|
||||
if (
|
||||
$hargaSekarang !== null &&
|
||||
$hargaTahunLalu !== null &&
|
||||
$hargaTahunLalu > 0
|
||||
) {
|
||||
$perubahan = (
|
||||
($hargaSekarang - $hargaTahunLalu)
|
||||
/ $hargaTahunLalu
|
||||
) * 100;
|
||||
}
|
||||
|
||||
return [
|
||||
'bentuk_produk' => $item->bentuk_produk,
|
||||
|
||||
'harga_sekarang' => $hargaSekarang,
|
||||
|
||||
'harga_tahun_lalu' => $hargaTahunLalu,
|
||||
|
||||
'harga_dua_tahun_lalu' =>
|
||||
$item->harga_dua_tahun_lalu !== null
|
||||
? (float) $item->harga_dua_tahun_lalu
|
||||
: null,
|
||||
|
||||
'perubahan' => $perubahan,
|
||||
|
||||
'trend' => match (true) {
|
||||
$perubahan === null => 'neutral',
|
||||
$perubahan > 0 => 'up',
|
||||
$perubahan < 0 => 'down',
|
||||
default => 'stable',
|
||||
},
|
||||
];
|
||||
});
|
||||
|
||||
$kebebasanPembeli = $sosialEkonomi?->kebebasan_memilih_pembeli;
|
||||
|
||||
$d6RantaiNilai = [
|
||||
'saluran_pasar' => $d6SaluranPasar,
|
||||
|
||||
'harga_jual' => $d6HargaJual,
|
||||
|
||||
'kebebasan_memilih_pembeli' => [
|
||||
'skor' => $kebebasanPembeli?->value,
|
||||
'label' => $kebebasanPembeli?->label(),
|
||||
|
||||
'persentase' => $kebebasanPembeli
|
||||
? ($kebebasanPembeli->value / 5) * 100
|
||||
: 0,
|
||||
|
||||
'color' => $this->getScoreColor(
|
||||
$kebebasanPembeli?->value
|
||||
),
|
||||
],
|
||||
];
|
||||
|
||||
$data = [
|
||||
'petani' => $petani,
|
||||
'skorPetani' => $skorPetani,
|
||||
@@ -161,6 +450,16 @@ class ProfilPetaniController extends Controller
|
||||
'praktikBudidaya' => $praktikBudidaya,
|
||||
'indikatorOnFarm' => $indikatorOnFarm,
|
||||
'detailOnFarm' => $detailOnFarm,
|
||||
'sosialEkonomi' => $sosialEkonomi,
|
||||
'd4SosialEkonomi' => $d4SosialEkonomi,
|
||||
'surveyPelatihan' => $surveyPelatihan,
|
||||
'surveySertifikasi' => $surveySertifikasi,
|
||||
'aksesPasar' => $aksesPasar,
|
||||
'd6SaluranPasar' => $d6SaluranPasar,
|
||||
'hargaJualPanen' => $hargaJualPanen,
|
||||
'd6HargaJual' => $d6HargaJual,
|
||||
'kebebasanPembeli' => $kebebasanPembeli,
|
||||
'd6RantaiNilai' => $d6RantaiNilai
|
||||
];
|
||||
return view('produktivitas.profil-petani.index', $data);
|
||||
}
|
||||
@@ -180,6 +479,20 @@ class ProfilPetaniController extends Controller
|
||||
};
|
||||
}
|
||||
|
||||
private function getFinancialColor(?int $score): string
|
||||
{
|
||||
if ($score === null || $score === 0) {
|
||||
return 'secondary';
|
||||
}
|
||||
|
||||
return match (true) {
|
||||
$score >= 5 => 'success',
|
||||
$score >= 4 => 'info',
|
||||
$score >= 2 => 'warning',
|
||||
default => 'danger',
|
||||
};
|
||||
}
|
||||
|
||||
private function buildProfiling(SkorPetani $skorPetani): array
|
||||
{
|
||||
$skorAkhir = $this->normalizeScore($skorPetani->skor_kesiapan_adopsi);
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user