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')