diff --git a/app/Http/Controllers/Web/Produktivitas/ProfilPetaniController.php b/app/Http/Controllers/Web/Produktivitas/ProfilPetaniController.php index dfc4087..791fba0 100644 --- a/app/Http/Controllers/Web/Produktivitas/ProfilPetaniController.php +++ b/app/Http/Controllers/Web/Produktivitas/ProfilPetaniController.php @@ -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); diff --git a/resources/views/produktivitas/profil-petani/index.blade.php b/resources/views/produktivitas/profil-petani/index.blade.php index 30a0a75..7d3d1a0 100644 --- a/resources/views/produktivitas/profil-petani/index.blade.php +++ b/resources/views/produktivitas/profil-petani/index.blade.php @@ -3,14 +3,14 @@ @push('styles')