diff --git a/app/Http/Controllers/Web/Produktivitas/SosialEkonomiController.php b/app/Http/Controllers/Web/Produktivitas/SosialEkonomiController.php index d0a23f2..16e08f0 100644 --- a/app/Http/Controllers/Web/Produktivitas/SosialEkonomiController.php +++ b/app/Http/Controllers/Web/Produktivitas/SosialEkonomiController.php @@ -404,6 +404,7 @@ class SosialEkonomiController extends Controller if ($section === 'akses_keuangan') { $pengalamanKredit = (int) $request->input('pengalaman_kredit_kebun'); $kondisiAset = (int) $request->input('kondisi_aset_produktif'); + $tidakPernahMenerimaProgram = (int) $request->input('keterlibatan_program_keuangan_formal') === KeterlibatanProgramKeuanganFormal::TIDAK_PERNAH_MENERIMA->value; $rules = array_merge($rules, [ 'status_rekening_tabungan' => ['required', 'integer', Rule::in(StatusRekeningTabungan::values())], @@ -448,17 +449,17 @@ class SosialEkonomiController extends Controller 'string', ], 'keterlibatan_program_keuangan_formal' => ['required', 'integer', Rule::in(KeterlibatanProgramKeuanganFormal::values())], - 'status_program_keuangan_formal' => ['required', 'array'], - 'status_program_keuangan_formal.pkh' => ['required', 'string', Rule::in(StatusProgramKeuanganFormal::values())], - 'status_program_keuangan_formal.blt' => ['required', 'string', Rule::in(StatusProgramKeuanganFormal::values())], - 'status_program_keuangan_formal.kur' => ['required', 'string', Rule::in(StatusProgramKeuanganFormal::values())], - 'status_program_keuangan_formal.kredit_koperasi_resmi' => ['required', 'string', Rule::in(StatusProgramKeuanganFormal::values())], - 'status_program_keuangan_formal.credit_union_cu' => ['required', 'string', Rule::in(StatusProgramKeuanganFormal::values())], - 'status_program_keuangan_formal.pinjaman_bumdes' => ['required', 'string', Rule::in(StatusProgramKeuanganFormal::values())], - 'status_program_keuangan_formal.modal_hibah_dinas_pertanian' => ['required', 'string', Rule::in(StatusProgramKeuanganFormal::values())], + 'status_program_keuangan_formal' => [Rule::requiredIf(fn () => !$tidakPernahMenerimaProgram), 'nullable', 'array'], + 'status_program_keuangan_formal.pkh' => [Rule::requiredIf(fn () => !$tidakPernahMenerimaProgram), 'nullable', 'string', Rule::in(StatusProgramKeuanganFormal::values())], + 'status_program_keuangan_formal.blt' => [Rule::requiredIf(fn () => !$tidakPernahMenerimaProgram), 'nullable', 'string', Rule::in(StatusProgramKeuanganFormal::values())], + 'status_program_keuangan_formal.kur' => [Rule::requiredIf(fn () => !$tidakPernahMenerimaProgram), 'nullable', 'string', Rule::in(StatusProgramKeuanganFormal::values())], + 'status_program_keuangan_formal.kredit_koperasi_resmi' => [Rule::requiredIf(fn () => !$tidakPernahMenerimaProgram), 'nullable', 'string', Rule::in(StatusProgramKeuanganFormal::values())], + 'status_program_keuangan_formal.credit_union_cu' => [Rule::requiredIf(fn () => !$tidakPernahMenerimaProgram), 'nullable', 'string', Rule::in(StatusProgramKeuanganFormal::values())], + 'status_program_keuangan_formal.pinjaman_bumdes' => [Rule::requiredIf(fn () => !$tidakPernahMenerimaProgram), 'nullable', 'string', Rule::in(StatusProgramKeuanganFormal::values())], + 'status_program_keuangan_formal.modal_hibah_dinas_pertanian' => [Rule::requiredIf(fn () => !$tidakPernahMenerimaProgram), 'nullable', 'string', Rule::in(StatusProgramKeuanganFormal::values())], 'status_program_keuangan_formal.lainnya' => ['nullable', 'string', Rule::in(StatusProgramKeuanganFormal::values())], 'program_keuangan_formal_lainnya_nama' => [ - Rule::requiredIf(fn () => filled($request->input('status_program_keuangan_formal.lainnya'))), + Rule::requiredIf(fn () => !$tidakPernahMenerimaProgram && filled($request->input('status_program_keuangan_formal.lainnya'))), 'nullable', 'string', 'max:255', @@ -610,6 +611,14 @@ class SosialEkonomiController extends Controller $payload['jenis_aset_produktif_lainnya'] = null; } + if ( + array_key_exists('keterlibatan_program_keuangan_formal', $payload) + && (int) ($payload['keterlibatan_program_keuangan_formal'] ?? 0) === KeterlibatanProgramKeuanganFormal::TIDAK_PERNAH_MENERIMA->value + ) { + $payload['status_program_keuangan_formal'] = null; + $payload['program_keuangan_formal_lainnya_nama'] = null; + } + if (!filled($payload['status_program_keuangan_formal']['lainnya'] ?? null)) { $payload['program_keuangan_formal_lainnya_nama'] = null; } @@ -920,6 +929,7 @@ class SosialEkonomiController extends Controller 'jenisAsetProduktifOptions' => JenisAsetProduktif::options(), 'jenisAsetLainnyaValue' => JenisAsetProduktif::LAINNYA->value, 'keterlibatanProgramKeuanganFormalOptions' => KeterlibatanProgramKeuanganFormal::options(), + 'keterlibatanProgramKeuanganFormalTidakPernahValue' => KeterlibatanProgramKeuanganFormal::TIDAK_PERNAH_MENERIMA->value, 'statusProgramKeuanganFormalOptions' => StatusProgramKeuanganFormal::options(), 'programKeuanganFormalRows' => [ 'pkh' => 'PKH', diff --git a/app/Models/Pertanian/Petani.php b/app/Models/Pertanian/Petani.php index 94ae083..7c9f3ae 100644 --- a/app/Models/Pertanian/Petani.php +++ b/app/Models/Pertanian/Petani.php @@ -163,7 +163,7 @@ class Petani extends Model return null; } - return round($nilai->sum(fn ($value) => (int) $value) * 0.1, 1); + return round($nilai->sum(fn ($value) => (int) $value) * 0.2, 1); } public function skorPendidikan(): ?float @@ -242,10 +242,10 @@ class Petani extends Model return null; } - $nilai = collect([ - $aksesPasar->skor_pengalaman, - $aksesPasar->skor_kesadaran_premium, - ])->filter(fn ($value) => !is_null($value) && $value !== ''); + $nilai = collect(Schema::getColumnListing($aksesPasar->getTable())) + ->filter(fn ($field) => str_starts_with($field, 'skor_')) + ->map(fn ($field) => $aksesPasar->getAttribute($field)) + ->filter(fn ($value) => !is_null($value) && $value !== ''); if ($nilai->isEmpty()) { return null; diff --git a/resources/views/produktivitas/petani/header.blade.php b/resources/views/produktivitas/petani/header.blade.php index 77046b6..a10b784 100644 --- a/resources/views/produktivitas/petani/header.blade.php +++ b/resources/views/produktivitas/petani/header.blade.php @@ -165,31 +165,18 @@
Sosial Ekonomi
@php $sosialEkonomi = isset($petani) ? $petani->sosialEkonomi : null; - $skorSosialEkonomi = null; - $skorSosialEkonomiBulat = null; - - if($sosialEkonomi) { - $enumValue = fn ($value) => $value instanceof \BackedEnum ? $value->value : $value; - - $periodePaceklik = (int) ($enumValue($sosialEkonomi->skor_periode_paceklik) ?? 0); - $kemampuanMenabung = (int) ($enumValue($sosialEkonomi->skor_kemampuan_menabung) ?? 0); - $kecukupanPenghasilan = (int) ($enumValue($sosialEkonomi->skor_kecukupan_penghasilan) ?? 0); - $kejelasanStatusLahan = (int) ($enumValue($sosialEkonomi->skor_kejelasan_status_lahan) ?? 0); - - $totalSkor = $periodePaceklik + $kemampuanMenabung + $kecukupanPenghasilan + $kejelasanStatusLahan; - $skorSosialEkonomi = ($totalSkor * 20) / 100; - $skorSosialEkonomiBulat = (int) round($skorSosialEkonomi); - } + $skorSosialEkonomi = isset($petani) ? $petani->skorSosialEkonomi() : null; + $skorSosialEkonomiBulat = is_null($skorSosialEkonomi) ? null : (int) round($skorSosialEkonomi); @endphp- @if($sosialEkonomi) + @if(!is_null($skorSosialEkonomi)) Skor {{ number_format($skorSosialEkonomi, 1) }} @else Belum isi @@ -209,25 +196,22 @@
Akses Pasar
@php $aksesPasar = isset($petani) ? $petani->aksesPasar : null; - $skorAksesPasar = null; + $skorAksesPasar = isset($petani) ? $petani->skorAksesPasar() : null; $skorAksesPasarBulat = null; - if($aksesPasar) { - $totalSkorAksesPasar = (int) ($aksesPasar->skor_pengalaman ?? 0) - + (int) ($aksesPasar->skor_kesadaran_premium ?? 0); - $skorAksesPasar = ($totalSkorAksesPasar * 10) / 100; + if(!is_null($skorAksesPasar)) { $skorAksesPasarBulat = (int) round($skorAksesPasar); } @endphp- @if($aksesPasar) + @if(!is_null($skorAksesPasar)) Skor {{ number_format($skorAksesPasar, 1) }} @else Belum isi diff --git a/resources/views/produktivitas/petani/sosial-ekonomi/edit.blade.php b/resources/views/produktivitas/petani/sosial-ekonomi/edit.blade.php index 3ce6e62..bf2944b 100644 --- a/resources/views/produktivitas/petani/sosial-ekonomi/edit.blade.php +++ b/resources/views/produktivitas/petani/sosial-ekonomi/edit.blade.php @@ -1057,6 +1057,7 @@ const alasanKreditLainnya = @json($alasanKreditLainnyaValue); const kondisiAsetTidakAda = String(@json($kondisiAsetTidakAdaValue)); const jenisAsetLainnya = @json($jenisAsetLainnyaValue); + const keterlibatanProgramTidakPernah = String(@json($keterlibatanProgramKeuanganFormalTidakPernahValue)); const pernahBantuanNgoPerusahaanPernah = @json($pernahBantuanNgoPerusahaanPernahValue); const pinjamanTokohAdatAda = @json($pinjamanTokohAdatAdaValue); const tekananJualSegeraAda = @json($tekananJualSegeraAdaValue); @@ -1455,6 +1456,18 @@ } } + function syncProgramKeuanganFormalFields() { + const isTidakPernah = String($('input[name="keterlibatan_program_keuangan_formal"]:checked').val() || '') === keterlibatanProgramTidakPernah; + const $fields = $('input[name^="status_program_keuangan_formal["], #program-keuangan-lainnya'); + + $fields.prop('disabled', isTidakPernah); + + if (isTidakPernah) { + $('input[name^="status_program_keuangan_formal["]').prop('checked', false); + $('#program-keuangan-lainnya').val(''); + } + } + function syncBantuanNgoFields() { const isPernah = $('input[name="pernah_bantuan_ngo_perusahaan"]:checked').val() === pernahBantuanNgoPerusahaanPernah; const $fields = $('[name^="detail_bantuan_ngo_perusahaan["]'); @@ -1568,6 +1581,7 @@ $('input[name="alasan_kredit_ditolak[]"]').on('change', syncAlasanKreditLainnyaField); $('input[name="kondisi_aset_produktif"]').on('change', syncAsetProduktifFields); $('input[name="jenis_aset_produktif[]"]').on('change', syncJenisAsetLainnyaField); + $('input[name="keterlibatan_program_keuangan_formal"]').on('change', syncProgramKeuanganFormalFields); $('input[name="pernah_bantuan_ngo_perusahaan"]').on('change', syncBantuanNgoFields); $('input[name="pinjaman_tokoh_adat_panen"]').on('change', syncPinjamanTokohAdatFields); $('#total-hutang-tidak-bersedia').on('change', syncTotalHutangFields); @@ -1582,6 +1596,7 @@ syncStatusRekeningFields(); syncPengalamanKreditFields(); syncAsetProduktifFields(); + syncProgramKeuanganFormalFields(); syncBantuanNgoFields(); syncPinjamanTokohAdatFields(); syncTotalHutangFields(); diff --git a/resources/views/produktivitas/petani/sosial-ekonomi/index.blade.php b/resources/views/produktivitas/petani/sosial-ekonomi/index.blade.php index b709b03..93968fe 100644 --- a/resources/views/produktivitas/petani/sosial-ekonomi/index.blade.php +++ b/resources/views/produktivitas/petani/sosial-ekonomi/index.blade.php @@ -1053,6 +1053,7 @@ const alasanKreditLainnya = @json($alasanKreditLainnyaValue); const kondisiAsetTidakAda = String(@json($kondisiAsetTidakAdaValue)); const jenisAsetLainnya = @json($jenisAsetLainnyaValue); + const keterlibatanProgramTidakPernah = String(@json($keterlibatanProgramKeuanganFormalTidakPernahValue)); const pernahBantuanNgoPerusahaanPernah = @json($pernahBantuanNgoPerusahaanPernahValue); const pinjamanTokohAdatAda = @json($pinjamanTokohAdatAdaValue); const tekananJualSegeraAda = @json($tekananJualSegeraAdaValue); @@ -1451,6 +1452,18 @@ } } + function syncProgramKeuanganFormalFields() { + const isTidakPernah = String($('input[name="keterlibatan_program_keuangan_formal"]:checked').val() || '') === keterlibatanProgramTidakPernah; + const $fields = $('input[name^="status_program_keuangan_formal["], #program-keuangan-lainnya'); + + $fields.prop('disabled', isTidakPernah); + + if (isTidakPernah) { + $('input[name^="status_program_keuangan_formal["]').prop('checked', false); + $('#program-keuangan-lainnya').val(''); + } + } + function syncBantuanNgoFields() { const isPernah = $('input[name="pernah_bantuan_ngo_perusahaan"]:checked').val() === pernahBantuanNgoPerusahaanPernah; const $fields = $('[name^="detail_bantuan_ngo_perusahaan["]'); @@ -1564,6 +1577,7 @@ $('input[name="alasan_kredit_ditolak[]"]').on('change', syncAlasanKreditLainnyaField); $('input[name="kondisi_aset_produktif"]').on('change', syncAsetProduktifFields); $('input[name="jenis_aset_produktif[]"]').on('change', syncJenisAsetLainnyaField); + $('input[name="keterlibatan_program_keuangan_formal"]').on('change', syncProgramKeuanganFormalFields); $('input[name="pernah_bantuan_ngo_perusahaan"]').on('change', syncBantuanNgoFields); $('input[name="pinjaman_tokoh_adat_panen"]').on('change', syncPinjamanTokohAdatFields); $('#total-hutang-tidak-bersedia').on('change', syncTotalHutangFields); @@ -1578,6 +1592,7 @@ syncStatusRekeningFields(); syncPengalamanKreditFields(); syncAsetProduktifFields(); + syncProgramKeuanganFormalFields(); syncBantuanNgoFields(); syncPinjamanTokohAdatFields(); syncTotalHutangFields();