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\Tanaman;
|
||||||
use App\Models\Pertanian\PraktikBudidaya;
|
use App\Models\Pertanian\PraktikBudidaya;
|
||||||
use App\Models\Pertanian\SurveyPanen;
|
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\Pertanian\PendapatanKomoditas;
|
||||||
use App\Models\Wilayah\DesaKelurahan;
|
use App\Models\Wilayah\DesaKelurahan;
|
||||||
use App\Models\Profile;
|
use App\Models\Profile;
|
||||||
@@ -23,6 +28,15 @@ use App\Enums\PraktikBudidaya\MetodePenangananHamaPenyakit;
|
|||||||
use App\Enums\PraktikBudidaya\FrekuensiSanitasiLahan;
|
use App\Enums\PraktikBudidaya\FrekuensiSanitasiLahan;
|
||||||
use App\Enums\PraktikBudidaya\PenangananGulma;
|
use App\Enums\PraktikBudidaya\PenangananGulma;
|
||||||
use App\Enums\PraktikBudidaya\KondisiPengelolaanAir;
|
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
|
class ProfilPetaniController extends Controller
|
||||||
{
|
{
|
||||||
@@ -62,6 +76,7 @@ class ProfilPetaniController extends Controller
|
|||||||
|
|
||||||
$praktikBudidaya = PraktikBudidaya::where('petani_id', $petani->id)->first();
|
$praktikBudidaya = PraktikBudidaya::where('petani_id', $petani->id)->first();
|
||||||
$surveyPanen = SurveyPanen::where('petani_id', $petani->id)->first();
|
$surveyPanen = SurveyPanen::where('petani_id', $petani->id)->first();
|
||||||
|
$sosialEkonomi = SosialEkonomi::where('petani_id', $id)->first();
|
||||||
|
|
||||||
$indikatorOnFarm = collect();
|
$indikatorOnFarm = collect();
|
||||||
|
|
||||||
@@ -145,6 +160,280 @@ class ProfilPetaniController extends Controller
|
|||||||
'konservasi_tanah' => $praktikBudidaya?->kebiasaan_konservasi_tanah ?? [],
|
'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 = [
|
$data = [
|
||||||
'petani' => $petani,
|
'petani' => $petani,
|
||||||
'skorPetani' => $skorPetani,
|
'skorPetani' => $skorPetani,
|
||||||
@@ -161,6 +450,16 @@ class ProfilPetaniController extends Controller
|
|||||||
'praktikBudidaya' => $praktikBudidaya,
|
'praktikBudidaya' => $praktikBudidaya,
|
||||||
'indikatorOnFarm' => $indikatorOnFarm,
|
'indikatorOnFarm' => $indikatorOnFarm,
|
||||||
'detailOnFarm' => $detailOnFarm,
|
'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);
|
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
|
private function buildProfiling(SkorPetani $skorPetani): array
|
||||||
{
|
{
|
||||||
$skorAkhir = $this->normalizeScore($skorPetani->skor_kesiapan_adopsi);
|
$skorAkhir = $this->normalizeScore($skorPetani->skor_kesiapan_adopsi);
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user