From 626fdba065388d75fb49fb2585aab4d697ddff77 Mon Sep 17 00:00:00 2001 From: SyaharaniSalsabilla Date: Thu, 9 Jul 2026 14:37:53 +0700 Subject: [PATCH] update sosial ekonomi --- .../SosialEkonomi/AlasanKreditDitolak.php | 36 + .../SosialEkonomi/BisaBeliPupukBersubsidi.php | 30 + .../SosialEkonomi/JenisAsetProduktif.php | 34 + .../KategoriPendapatanKomoditas.php | 2 +- .../KeaktifanPertemuanKelompok.php | 36 + .../SosialEkonomi/KebebasanMemilihPembeli.php | 36 + .../SosialEkonomi/KedekatanSesamaAnggota.php | 34 + .../SosialEkonomi/KemauanIkutProgram.php | 36 + .../KemauanMencobaPraktikBaru.php | 36 + .../SosialEkonomi/KeterikatanHutangPanen.php | 38 + .../KeterlibatanProgramKeuanganFormal.php | 36 + .../SosialEkonomi/KondisiAsetProduktif.php | 36 + .../SosialEkonomi/ManfaatKelompokTani.php | 36 + .../SosialEkonomi/MinatPembeliHargaStabil.php | 34 + .../OrientasiRencanaJangkaPanjang.php | 36 + .../SosialEkonomi/PanutanPetaniSukses.php | 36 + .../SosialEkonomi/PemahamanMutuHarga.php | 36 + .../SosialEkonomi/PengalamanKreditKebun.php | 36 + .../PengetahuanHargaHasilOlah.php | 34 + .../SosialEkonomi/PeranDalamKelompok.php | 36 + .../{ => SosialEkonomi}/PeriodePendapatan.php | 2 +- .../PernahBantuanNgoPerusahaan.php | 30 + .../PernahJualHargaLebihTinggi.php | 30 + .../PihakMembantuKonflik.php | 2 +- .../SosialEkonomi/PinjamanTokohAdatPanen.php | 32 + app/Enums/SosialEkonomi/PraktikIjon.php | 38 + .../SkorKecukupanPenghasilan.php | 2 +- .../SkorKejelasanStatusLahan.php | 2 +- .../SkorKemampuanMenabung.php | 2 +- .../SkorPeriodePaceklik.php | 2 +- app/Enums/SosialEkonomi/StatusKartuTani.php | 32 + .../StatusKepemilikanLahanSosialEkonomi.php | 2 +- .../{ => SosialEkonomi}/StatusKonflik.php | 2 +- .../StatusProgramKeuanganFormal.php | 32 + .../SosialEkonomi/StatusRekeningTabungan.php | 36 + app/Enums/SosialEkonomi/TekananJualSegera.php | 30 + .../SosialEkonomi/TerdaftarKelompokTani.php | 30 + .../SosialEkonomi/UsahaMutuTambahanHarga.php | 32 + .../Produktivitas/SosialEkonomiController.php | 635 ++++++++++- .../SurveyProduktivitasController.php | 2 +- app/Models/Pertanian/Petani.php | 17 +- app/Models/Pertanian/SosialEkonomi.php | 131 ++- ...001_add_fields_to_sosial_ekonomi_table.php | 153 +++ .../petani/sosial-ekonomi/edit.blade.php | 1014 ++++++++++++++++- .../petani/sosial-ekonomi/index.blade.php | 1010 +++++++++++++++- 45 files changed, 3862 insertions(+), 112 deletions(-) create mode 100644 app/Enums/SosialEkonomi/AlasanKreditDitolak.php create mode 100644 app/Enums/SosialEkonomi/BisaBeliPupukBersubsidi.php create mode 100644 app/Enums/SosialEkonomi/JenisAsetProduktif.php rename app/Enums/{ => SosialEkonomi}/KategoriPendapatanKomoditas.php (86%) create mode 100644 app/Enums/SosialEkonomi/KeaktifanPertemuanKelompok.php create mode 100644 app/Enums/SosialEkonomi/KebebasanMemilihPembeli.php create mode 100644 app/Enums/SosialEkonomi/KedekatanSesamaAnggota.php create mode 100644 app/Enums/SosialEkonomi/KemauanIkutProgram.php create mode 100644 app/Enums/SosialEkonomi/KemauanMencobaPraktikBaru.php create mode 100644 app/Enums/SosialEkonomi/KeterikatanHutangPanen.php create mode 100644 app/Enums/SosialEkonomi/KeterlibatanProgramKeuanganFormal.php create mode 100644 app/Enums/SosialEkonomi/KondisiAsetProduktif.php create mode 100644 app/Enums/SosialEkonomi/ManfaatKelompokTani.php create mode 100644 app/Enums/SosialEkonomi/MinatPembeliHargaStabil.php create mode 100644 app/Enums/SosialEkonomi/OrientasiRencanaJangkaPanjang.php create mode 100644 app/Enums/SosialEkonomi/PanutanPetaniSukses.php create mode 100644 app/Enums/SosialEkonomi/PemahamanMutuHarga.php create mode 100644 app/Enums/SosialEkonomi/PengalamanKreditKebun.php create mode 100644 app/Enums/SosialEkonomi/PengetahuanHargaHasilOlah.php create mode 100644 app/Enums/SosialEkonomi/PeranDalamKelompok.php rename app/Enums/{ => SosialEkonomi}/PeriodePendapatan.php (85%) create mode 100644 app/Enums/SosialEkonomi/PernahBantuanNgoPerusahaan.php create mode 100644 app/Enums/SosialEkonomi/PernahJualHargaLebihTinggi.php rename app/Enums/{ => SosialEkonomi}/PihakMembantuKonflik.php (93%) create mode 100644 app/Enums/SosialEkonomi/PinjamanTokohAdatPanen.php create mode 100644 app/Enums/SosialEkonomi/PraktikIjon.php rename app/Enums/{ => SosialEkonomi}/SkorKecukupanPenghasilan.php (96%) rename app/Enums/{ => SosialEkonomi}/SkorKejelasanStatusLahan.php (96%) rename app/Enums/{ => SosialEkonomi}/SkorKemampuanMenabung.php (96%) rename app/Enums/{ => SosialEkonomi}/SkorPeriodePaceklik.php (96%) create mode 100644 app/Enums/SosialEkonomi/StatusKartuTani.php rename app/Enums/{ => SosialEkonomi}/StatusKepemilikanLahanSosialEkonomi.php (95%) rename app/Enums/{ => SosialEkonomi}/StatusKonflik.php (93%) create mode 100644 app/Enums/SosialEkonomi/StatusProgramKeuanganFormal.php create mode 100644 app/Enums/SosialEkonomi/StatusRekeningTabungan.php create mode 100644 app/Enums/SosialEkonomi/TekananJualSegera.php create mode 100644 app/Enums/SosialEkonomi/TerdaftarKelompokTani.php create mode 100644 app/Enums/SosialEkonomi/UsahaMutuTambahanHarga.php create mode 100644 database/migrations/2026_07_09_000001_add_fields_to_sosial_ekonomi_table.php diff --git a/app/Enums/SosialEkonomi/AlasanKreditDitolak.php b/app/Enums/SosialEkonomi/AlasanKreditDitolak.php new file mode 100644 index 0000000..99ca4bb --- /dev/null +++ b/app/Enums/SosialEkonomi/AlasanKreditDitolak.php @@ -0,0 +1,36 @@ + 'Tidak punya jaminan-agunan', + self::PROSES_TERLALU_RUMIT => 'Proses terlalu rumit', + self::TAKUT_TIDAK_BISA_BAYAR => 'Takut tidak bisa bayar', + self::TIDAK_TAHU_CARANYA => 'Tidak tahu caranya', + self::LAINNYA => 'Lainnya', + }; + } + + public static function options(): array + { + return collect(self::cases())->map(fn ($case) => [ + 'value' => $case->value, + 'label' => $case->label(), + ])->toArray(); + } + + public static function values(): array + { + return array_column(self::cases(), 'value'); + } +} diff --git a/app/Enums/SosialEkonomi/BisaBeliPupukBersubsidi.php b/app/Enums/SosialEkonomi/BisaBeliPupukBersubsidi.php new file mode 100644 index 0000000..c004434 --- /dev/null +++ b/app/Enums/SosialEkonomi/BisaBeliPupukBersubsidi.php @@ -0,0 +1,30 @@ + 'Ya', + self::TIDAK => 'Tidak', + }; + } + + public static function options(): array + { + return collect(self::cases())->map(fn ($case) => [ + 'value' => $case->value, + 'label' => $case->label(), + ])->toArray(); + } + + public static function values(): array + { + return array_column(self::cases(), 'value'); + } +} diff --git a/app/Enums/SosialEkonomi/JenisAsetProduktif.php b/app/Enums/SosialEkonomi/JenisAsetProduktif.php new file mode 100644 index 0000000..2d3402e --- /dev/null +++ b/app/Enums/SosialEkonomi/JenisAsetProduktif.php @@ -0,0 +1,34 @@ + 'Ternak', + self::KENDARAAN => 'Kendaraan', + self::ALAT_PERTANIAN => 'Alat pertanian', + self::LAINNYA => 'Lainnya', + }; + } + + public static function options(): array + { + return collect(self::cases())->map(fn ($case) => [ + 'value' => $case->value, + 'label' => $case->label(), + ])->toArray(); + } + + public static function values(): array + { + return array_column(self::cases(), 'value'); + } +} diff --git a/app/Enums/KategoriPendapatanKomoditas.php b/app/Enums/SosialEkonomi/KategoriPendapatanKomoditas.php similarity index 86% rename from app/Enums/KategoriPendapatanKomoditas.php rename to app/Enums/SosialEkonomi/KategoriPendapatanKomoditas.php index 98b3cdc..ff6d15a 100644 --- a/app/Enums/KategoriPendapatanKomoditas.php +++ b/app/Enums/SosialEkonomi/KategoriPendapatanKomoditas.php @@ -1,6 +1,6 @@ 'Tidak pernah hadir', + self::JARANG_HADIR => 'Jarang hadir', + self::SERING_HADIR_LEBIH_BANYAK_DIAM => 'Sering hadir tapi lebih banyak diam', + self::HAMPIR_SELALU_HADIR_KADANG_DISKUSI => 'Hampir selalu hadir & kadang diskusi', + self::SELALU_HADIR_AKTIF_DISKUSI => 'Selalu hadir & aktif diskusi', + }; + } + + public static function options(): array + { + return collect(self::cases())->map(fn ($case) => [ + 'value' => $case->value, + 'label' => $case->label(), + ])->toArray(); + } + + public static function values(): array + { + return array_column(self::cases(), 'value'); + } +} diff --git a/app/Enums/SosialEkonomi/KebebasanMemilihPembeli.php b/app/Enums/SosialEkonomi/KebebasanMemilihPembeli.php new file mode 100644 index 0000000..d02b8cf --- /dev/null +++ b/app/Enums/SosialEkonomi/KebebasanMemilihPembeli.php @@ -0,0 +1,36 @@ + 'Tidak bebas, terikat satu pembeli', + self::AGAK_TERIKAT_ADA_TEKANAN => 'Agak terikat, ada tekanan', + self::AGAK_BEBAS_CENDERUNG_PEMBELI_SAMA => 'Agak bebas, cenderung pembeli sama', + self::CUKUP_BEBAS_SESEKALI_PINDAH => 'Cukup bebas, sesekali pindah', + self::SANGAT_BEBAS_PINDAH_KAPAN_SAJA => 'Sangat bebas, pindah kapan saja', + }; + } + + public static function options(): array + { + return collect(self::cases())->map(fn ($case) => [ + 'value' => $case->value, + 'label' => $case->label(), + ])->toArray(); + } + + public static function values(): array + { + return array_column(self::cases(), 'value'); + } +} diff --git a/app/Enums/SosialEkonomi/KedekatanSesamaAnggota.php b/app/Enums/SosialEkonomi/KedekatanSesamaAnggota.php new file mode 100644 index 0000000..2bec04d --- /dev/null +++ b/app/Enums/SosialEkonomi/KedekatanSesamaAnggota.php @@ -0,0 +1,34 @@ + 'Sangat dekat', + self::CUKUP_DEKAT => 'Cukup dekat', + self::SEBATAS_KENAL => 'Sebatas kenal', + self::TIDAK_BEGITU_KENAL => 'Tidak begitu kenal', + }; + } + + public static function options(): array + { + return collect(self::cases())->map(fn ($case) => [ + 'value' => $case->value, + 'label' => $case->label(), + ])->toArray(); + } + + public static function values(): array + { + return array_column(self::cases(), 'value'); + } +} diff --git a/app/Enums/SosialEkonomi/KemauanIkutProgram.php b/app/Enums/SosialEkonomi/KemauanIkutProgram.php new file mode 100644 index 0000000..0f4891f --- /dev/null +++ b/app/Enums/SosialEkonomi/KemauanIkutProgram.php @@ -0,0 +1,36 @@ + 'Tidak mau', + self::RAGU_RAGU => 'Ragu-ragu', + self::MAU_PERLU_DIPASTIKAN_MANFAAT => 'Mau, perlu dipastikan manfaatnya', + self::MAU_LIHAT_PROGRAM_DULU => 'Mau, ingin lihat programnya dulu', + self::MAU_LANGSUNG_IKUT => 'Mau, langsung ikut', + }; + } + + public static function options(): array + { + return collect(self::cases())->map(fn ($case) => [ + 'value' => $case->value, + 'label' => $case->label(), + ])->toArray(); + } + + public static function values(): array + { + return array_column(self::cases(), 'value'); + } +} diff --git a/app/Enums/SosialEkonomi/KemauanMencobaPraktikBaru.php b/app/Enums/SosialEkonomi/KemauanMencobaPraktikBaru.php new file mode 100644 index 0000000..2a67141 --- /dev/null +++ b/app/Enums/SosialEkonomi/KemauanMencobaPraktikBaru.php @@ -0,0 +1,36 @@ + 'Tidak mau', + self::RAGU_RAGU => 'Ragu-ragu', + self::MAU_LIHAT_HASIL_DULU => 'Mau, lihat hasil dulu', + self::MAU_LANGSUNG_COBA => 'Mau langsung coba', + self::MAU_COBA_SAMPAI_BERHASIL => 'Mau coba sampai berhasil', + }; + } + + public static function options(): array + { + return collect(self::cases())->map(fn ($case) => [ + 'value' => $case->value, + 'label' => $case->label(), + ])->toArray(); + } + + public static function values(): array + { + return array_column(self::cases(), 'value'); + } +} diff --git a/app/Enums/SosialEkonomi/KeterikatanHutangPanen.php b/app/Enums/SosialEkonomi/KeterikatanHutangPanen.php new file mode 100644 index 0000000..9a22840 --- /dev/null +++ b/app/Enums/SosialEkonomi/KeterikatanHutangPanen.php @@ -0,0 +1,38 @@ + 'Tidak bersedia menjawab', + self::HUTANG_BESAR_HAMPIR_SELURUH_PANEN_TERIKAT => 'Ada hutang besar, hampir seluruh panen terikat', + self::HUTANG_LEBIH_DARI_SEPARUH_PANEN_TERIKAT => 'Ada hutang, >separuh panen terikat', + self::HUTANG_SEBAGIAN_KECIL_TERIKAT => 'Ada hutang, sebagian kecil terikat', + self::HUTANG_KECIL_TIDAK_MENGIKAT_PANEN => 'Ada hutang kecil, tidak mengikat panen', + self::TIDAK_ADA => 'Tidak ada', + }; + } + + public static function options(): array + { + return collect(self::cases())->map(fn ($case) => [ + 'value' => $case->value, + 'label' => $case->label(), + ])->toArray(); + } + + public static function values(): array + { + return array_column(self::cases(), 'value'); + } +} diff --git a/app/Enums/SosialEkonomi/KeterlibatanProgramKeuanganFormal.php b/app/Enums/SosialEkonomi/KeterlibatanProgramKeuanganFormal.php new file mode 100644 index 0000000..c8f4e82 --- /dev/null +++ b/app/Enums/SosialEkonomi/KeterlibatanProgramKeuanganFormal.php @@ -0,0 +1,36 @@ + 'Tidak pernah menerima', + self::PERNAH_SATU_TIDAK_BERMANFAAT => 'Pernah 1 program, tidak lagi & tidak bermanfaat', + self::SEDANG_MENERIMA_SATU => 'Sedang menerima 1 program', + self::SEDANG_MENERIMA_LEBIH_DARI_SATU => 'Sedang menerima >1 program', + self::AKTIF_BEBERAPA_PROGRAM_BERMANFAAT => 'Aktif beberapa program & merasakan manfaat nyata', + }; + } + + public static function options(): array + { + return collect(self::cases())->map(fn ($case) => [ + 'value' => $case->value, + 'label' => $case->label(), + ])->toArray(); + } + + public static function values(): array + { + return array_column(self::cases(), 'value'); + } +} diff --git a/app/Enums/SosialEkonomi/KondisiAsetProduktif.php b/app/Enums/SosialEkonomi/KondisiAsetProduktif.php new file mode 100644 index 0000000..c2537b1 --- /dev/null +++ b/app/Enums/SosialEkonomi/KondisiAsetProduktif.php @@ -0,0 +1,36 @@ + 'Tidak ada', + self::ADA_SATU_KURANG_BAIK => 'Ada 1 jenis, kondisi kurang baik', + self::ADA_SATU_BAIK => 'Ada 1 jenis, kondisi baik', + self::ADA_DUA_LEBIH_SEBAGIAN_KURANG_BAIK => 'Ada 2+ jenis, sebagian kurang baik', + self::ADA_DUA_LEBIH_SEMUA_BAIK => 'Ada 2+ jenis, semua kondisi baik', + }; + } + + public static function options(): array + { + return collect(self::cases())->map(fn ($case) => [ + 'value' => $case->value, + 'label' => $case->label(), + ])->toArray(); + } + + public static function values(): array + { + return array_column(self::cases(), 'value'); + } +} diff --git a/app/Enums/SosialEkonomi/ManfaatKelompokTani.php b/app/Enums/SosialEkonomi/ManfaatKelompokTani.php new file mode 100644 index 0000000..392837f --- /dev/null +++ b/app/Enums/SosialEkonomi/ManfaatKelompokTani.php @@ -0,0 +1,36 @@ + 'Tidak ada manfaat', + self::MANFAAT_SOSIAL_SAJA => 'Manfaat sosial saja', + self::SEDIKIT_MANFAAT_PRODUKSI_PEMASARAN => 'Sedikit manfaat produksi-pemasaran', + self::MANFAAT_CUKUP_TERASA => 'Manfaat cukup terasa', + self::MANFAAT_NYATA_SIGNIFIKAN => 'Manfaat nyata & signifikan', + }; + } + + public static function options(): array + { + return collect(self::cases())->map(fn ($case) => [ + 'value' => $case->value, + 'label' => $case->label(), + ])->toArray(); + } + + public static function values(): array + { + return array_column(self::cases(), 'value'); + } +} diff --git a/app/Enums/SosialEkonomi/MinatPembeliHargaStabil.php b/app/Enums/SosialEkonomi/MinatPembeliHargaStabil.php new file mode 100644 index 0000000..6fd8f06 --- /dev/null +++ b/app/Enums/SosialEkonomi/MinatPembeliHargaStabil.php @@ -0,0 +1,34 @@ + 'Mau-harga stabil lebih penting', + self::MAU_TAPI_INGIN_BANDINGKAN_DULU => 'Mau tapi ingin bandingkan dulu', + self::RAGU_RAGU => 'Ragu-ragu', + self::TIDAK_MAU_CARI_HARGA_TERBAIK => 'Tidak mau-cari harga terbaik tiap jual', + }; + } + + public static function options(): array + { + return collect(self::cases())->map(fn ($case) => [ + 'value' => $case->value, + 'label' => $case->label(), + ])->toArray(); + } + + public static function values(): array + { + return array_column(self::cases(), 'value'); + } +} diff --git a/app/Enums/SosialEkonomi/OrientasiRencanaJangkaPanjang.php b/app/Enums/SosialEkonomi/OrientasiRencanaJangkaPanjang.php new file mode 100644 index 0000000..e8b4485 --- /dev/null +++ b/app/Enums/SosialEkonomi/OrientasiRencanaJangkaPanjang.php @@ -0,0 +1,36 @@ + 'Belum kepikiran', + self::INGIN_TETAP_SEPERTI_SEKARANG => 'Ingin tetap seperti sekarang', + self::INGIN_BERUBAH_BELUM_TAHU_CARANYA => 'Ada keinginan berubah tapi belum tahu caranya', + self::INGIN_SUDAH_MULAI_DIPIKIRKAN => 'Ada keinginan & sudah mulai dipikirkan', + self::PUNYA_RENCANA_KONKRET => 'Sudah punya rencana konkret', + }; + } + + public static function options(): array + { + return collect(self::cases())->map(fn ($case) => [ + 'value' => $case->value, + 'label' => $case->label(), + ])->toArray(); + } + + public static function values(): array + { + return array_column(self::cases(), 'value'); + } +} diff --git a/app/Enums/SosialEkonomi/PanutanPetaniSukses.php b/app/Enums/SosialEkonomi/PanutanPetaniSukses.php new file mode 100644 index 0000000..7d7e5bb --- /dev/null +++ b/app/Enums/SosialEkonomi/PanutanPetaniSukses.php @@ -0,0 +1,36 @@ + 'Tidak ada', + self::ADA_DENGAR_DARI_ORANG_LAIN => 'Ada, dengar dari orang lain saja', + self::TAHU_SIAPA_TIDAK_KENAL => 'Tahu siapa, tapi tidak kenal', + self::KENAL_BELUM_DISKUSI => 'Kenal, belum pernah diskusi', + self::KENAL_PERNAH_DISKUSI_LANGSUNG => 'Kenal & pernah diskusi langsung', + }; + } + + public static function options(): array + { + return collect(self::cases())->map(fn ($case) => [ + 'value' => $case->value, + 'label' => $case->label(), + ])->toArray(); + } + + public static function values(): array + { + return array_column(self::cases(), 'value'); + } +} diff --git a/app/Enums/SosialEkonomi/PemahamanMutuHarga.php b/app/Enums/SosialEkonomi/PemahamanMutuHarga.php new file mode 100644 index 0000000..24b262b --- /dev/null +++ b/app/Enums/SosialEkonomi/PemahamanMutuHarga.php @@ -0,0 +1,36 @@ + 'Tidak tahu', + self::PERNAH_DENGAR_TIDAK_YAKIN => 'Pernah dengar, tidak yakin', + self::TAHU_BEDA_BELUM_BUKTIKAN => 'Tahu ada beda, belum buktikan', + self::TAHU_PERNAH_HARGA_LEBIH_TINGGI => 'Tahu & pernah dapat harga lebih tinggi', + self::TAHU_BETUL_BISA_JELASKAN_RINCI => 'Tahu betul & bisa jelaskan rinci', + }; + } + + public static function options(): array + { + return collect(self::cases())->map(fn ($case) => [ + 'value' => $case->value, + 'label' => $case->label(), + ])->toArray(); + } + + public static function values(): array + { + return array_column(self::cases(), 'value'); + } +} diff --git a/app/Enums/SosialEkonomi/PengalamanKreditKebun.php b/app/Enums/SosialEkonomi/PengalamanKreditKebun.php new file mode 100644 index 0000000..8040ca1 --- /dev/null +++ b/app/Enums/SosialEkonomi/PengalamanKreditKebun.php @@ -0,0 +1,36 @@ + 'Tidak pernah mencoba', + self::PERNAH_COBA_DITOLAK => 'Pernah coba tapi ditolak', + self::SEDANG_PROSES => 'Sedang dalam proses', + self::BERHASIL_MASIH_PELUNASAN => 'Berhasil, masih proses pelunasan', + self::BERHASIL_SUDAH_LUNAS => 'Berhasil & sudah lunas', + }; + } + + public static function options(): array + { + return collect(self::cases())->map(fn ($case) => [ + 'value' => $case->value, + 'label' => $case->label(), + ])->toArray(); + } + + public static function values(): array + { + return array_column(self::cases(), 'value'); + } +} diff --git a/app/Enums/SosialEkonomi/PengetahuanHargaHasilOlah.php b/app/Enums/SosialEkonomi/PengetahuanHargaHasilOlah.php new file mode 100644 index 0000000..1887814 --- /dev/null +++ b/app/Enums/SosialEkonomi/PengetahuanHargaHasilOlah.php @@ -0,0 +1,34 @@ + 'Tidak tahu', + self::PERNAH_DENGAR_TIDAK_TAHU_PENGARUH => 'Pernah dengar tapi tidak tahu pengaruh ke harga', + self::TAHU_BEDA_HARGA_BELUM_COBA => 'Tahu ada beda harga tapi belum coba', + self::PERNAH_JUAL_HASIL_OLAH_HARGA_LEBIH_TINGGI => 'Sudah pernah jual hasil olah dengan harga lebih tinggi', + }; + } + + public static function options(): array + { + return collect(self::cases())->map(fn ($case) => [ + 'value' => $case->value, + 'label' => $case->label(), + ])->toArray(); + } + + public static function values(): array + { + return array_column(self::cases(), 'value'); + } +} diff --git a/app/Enums/SosialEkonomi/PeranDalamKelompok.php b/app/Enums/SosialEkonomi/PeranDalamKelompok.php new file mode 100644 index 0000000..7630d4e --- /dev/null +++ b/app/Enums/SosialEkonomi/PeranDalamKelompok.php @@ -0,0 +1,36 @@ + 'Anggota pasif', + self::ANGGOTA_BIASA_KADANG_DILIBATKAN => 'Anggota biasa, kadang dilibatkan', + self::ANGGOTA_BIASA_CUKUP_AKTIF => 'Anggota biasa, cukup aktif', + self::PENGURUS_BELUM_BANYAK_TANGGUNG_JAWAB => 'Pengurus, belum banyak menjalankan tanggung jawab', + self::KETUA_PENGURUS_AKTIF => 'Ketua-pengurus aktif & menjalankan tanggung jawab nyata', + }; + } + + public static function options(): array + { + return collect(self::cases())->map(fn ($case) => [ + 'value' => $case->value, + 'label' => $case->label(), + ])->toArray(); + } + + public static function values(): array + { + return array_column(self::cases(), 'value'); + } +} diff --git a/app/Enums/PeriodePendapatan.php b/app/Enums/SosialEkonomi/PeriodePendapatan.php similarity index 85% rename from app/Enums/PeriodePendapatan.php rename to app/Enums/SosialEkonomi/PeriodePendapatan.php index ed280aa..0270266 100644 --- a/app/Enums/PeriodePendapatan.php +++ b/app/Enums/SosialEkonomi/PeriodePendapatan.php @@ -1,6 +1,6 @@ 'Pernah', + self::TIDAK_PERNAH => 'Tidak pernah', + }; + } + + public static function options(): array + { + return collect(self::cases())->map(fn ($case) => [ + 'value' => $case->value, + 'label' => $case->label(), + ])->toArray(); + } + + public static function values(): array + { + return array_column(self::cases(), 'value'); + } +} diff --git a/app/Enums/SosialEkonomi/PernahJualHargaLebihTinggi.php b/app/Enums/SosialEkonomi/PernahJualHargaLebihTinggi.php new file mode 100644 index 0000000..839b364 --- /dev/null +++ b/app/Enums/SosialEkonomi/PernahJualHargaLebihTinggi.php @@ -0,0 +1,30 @@ + 'Belum pernah', + self::PERNAH => 'Pernah', + }; + } + + public static function options(): array + { + return collect(self::cases())->map(fn ($case) => [ + 'value' => $case->value, + 'label' => $case->label(), + ])->toArray(); + } + + public static function values(): array + { + return array_column(self::cases(), 'value'); + } +} diff --git a/app/Enums/PihakMembantuKonflik.php b/app/Enums/SosialEkonomi/PihakMembantuKonflik.php similarity index 93% rename from app/Enums/PihakMembantuKonflik.php rename to app/Enums/SosialEkonomi/PihakMembantuKonflik.php index 4120f83..4be60ee 100644 --- a/app/Enums/PihakMembantuKonflik.php +++ b/app/Enums/SosialEkonomi/PihakMembantuKonflik.php @@ -1,6 +1,6 @@ 'Tidak ada', + self::ADA => 'Ada', + self::TIDAK_BERSEDIA_MENJAWAB => 'Tidak bersedia menjawab', + }; + } + + public static function options(): array + { + return collect(self::cases())->map(fn ($case) => [ + 'value' => $case->value, + 'label' => $case->label(), + ])->toArray(); + } + + public static function values(): array + { + return array_column(self::cases(), 'value'); + } +} diff --git a/app/Enums/SosialEkonomi/PraktikIjon.php b/app/Enums/SosialEkonomi/PraktikIjon.php new file mode 100644 index 0000000..cc1a476 --- /dev/null +++ b/app/Enums/SosialEkonomi/PraktikIjon.php @@ -0,0 +1,38 @@ + 'Tidak bersedia menjawab', + self::HAMPIR_SELURUH_PANEN_TERIKAT => 'Hampir seluruh panen terikat ijon', + self::SEBAGIAN_BESAR_TERIKAT => 'Sebagian besar terikat', + self::SESEKALI_SEBAGIAN_KECIL => 'Sesekali-sebagian kecil', + self::PERNAH_SUDAH_LAMA_TIDAK_LAGI => 'Pernah, sudah lama tidak lagi', + self::TIDAK_PERNAH => 'Tidak pernah', + }; + } + + public static function options(): array + { + return collect(self::cases())->map(fn ($case) => [ + 'value' => $case->value, + 'label' => $case->label(), + ])->toArray(); + } + + public static function values(): array + { + return array_column(self::cases(), 'value'); + } +} diff --git a/app/Enums/SkorKecukupanPenghasilan.php b/app/Enums/SosialEkonomi/SkorKecukupanPenghasilan.php similarity index 96% rename from app/Enums/SkorKecukupanPenghasilan.php rename to app/Enums/SosialEkonomi/SkorKecukupanPenghasilan.php index d359b3a..7e38576 100644 --- a/app/Enums/SkorKecukupanPenghasilan.php +++ b/app/Enums/SosialEkonomi/SkorKecukupanPenghasilan.php @@ -1,6 +1,6 @@ 'Belum punya', + self::SUDAH_PUNYA_BELUM_AKTIF => 'Sudah punya tapi belum aktif', + self::SUDAH_PUNYA_AKTIF_DIGUNAKAN => 'Sudah punya & aktif digunakan', + }; + } + + public static function options(): array + { + return collect(self::cases())->map(fn ($case) => [ + 'value' => $case->value, + 'label' => $case->label(), + ])->toArray(); + } + + public static function values(): array + { + return array_column(self::cases(), 'value'); + } +} diff --git a/app/Enums/StatusKepemilikanLahanSosialEkonomi.php b/app/Enums/SosialEkonomi/StatusKepemilikanLahanSosialEkonomi.php similarity index 95% rename from app/Enums/StatusKepemilikanLahanSosialEkonomi.php rename to app/Enums/SosialEkonomi/StatusKepemilikanLahanSosialEkonomi.php index 935ef44..74e6a0a 100644 --- a/app/Enums/StatusKepemilikanLahanSosialEkonomi.php +++ b/app/Enums/SosialEkonomi/StatusKepemilikanLahanSosialEkonomi.php @@ -1,6 +1,6 @@ 'Sedang Menerima', + self::PERNAH_TAPI_TIDAK_LAGI => 'Pernah tapi Tidak Lagi', + self::BELUM_PERNAH => 'Belum Pernah', + }; + } + + public static function options(): array + { + return collect(self::cases())->map(fn ($case) => [ + 'value' => $case->value, + 'label' => $case->label(), + ])->toArray(); + } + + public static function values(): array + { + return array_column(self::cases(), 'value'); + } +} diff --git a/app/Enums/SosialEkonomi/StatusRekeningTabungan.php b/app/Enums/SosialEkonomi/StatusRekeningTabungan.php new file mode 100644 index 0000000..e234fe8 --- /dev/null +++ b/app/Enums/SosialEkonomi/StatusRekeningTabungan.php @@ -0,0 +1,36 @@ + 'Tidak punya rekening', + self::PUNYA_TIDAK_AKTIF => 'Punya tapi tidak aktif', + self::PUNYA_KADANG_DIGUNAKAN => 'Punya, kadang digunakan', + self::PUNYA_CUKUP_RUTIN => 'Punya, cukup rutin', + self::AKTIF_RUTIN_DIGUNAKAN => 'Aktif & rutin digunakan', + }; + } + + public static function options(): array + { + return collect(self::cases())->map(fn ($case) => [ + 'value' => $case->value, + 'label' => $case->label(), + ])->toArray(); + } + + public static function values(): array + { + return array_column(self::cases(), 'value'); + } +} diff --git a/app/Enums/SosialEkonomi/TekananJualSegera.php b/app/Enums/SosialEkonomi/TekananJualSegera.php new file mode 100644 index 0000000..82b4e35 --- /dev/null +++ b/app/Enums/SosialEkonomi/TekananJualSegera.php @@ -0,0 +1,30 @@ + 'Tidak ada', + self::ADA => 'Ada', + }; + } + + public static function options(): array + { + return collect(self::cases())->map(fn ($case) => [ + 'value' => $case->value, + 'label' => $case->label(), + ])->toArray(); + } + + public static function values(): array + { + return array_column(self::cases(), 'value'); + } +} diff --git a/app/Enums/SosialEkonomi/TerdaftarKelompokTani.php b/app/Enums/SosialEkonomi/TerdaftarKelompokTani.php new file mode 100644 index 0000000..f0ca12a --- /dev/null +++ b/app/Enums/SosialEkonomi/TerdaftarKelompokTani.php @@ -0,0 +1,30 @@ + 'Ya', + self::TIDAK => 'Tidak', + }; + } + + public static function options(): array + { + return collect(self::cases())->map(fn ($case) => [ + 'value' => $case->value, + 'label' => $case->label(), + ])->toArray(); + } + + public static function values(): array + { + return array_column(self::cases(), 'value'); + } +} diff --git a/app/Enums/SosialEkonomi/UsahaMutuTambahanHarga.php b/app/Enums/SosialEkonomi/UsahaMutuTambahanHarga.php new file mode 100644 index 0000000..eb3f327 --- /dev/null +++ b/app/Enums/SosialEkonomi/UsahaMutuTambahanHarga.php @@ -0,0 +1,32 @@ + 'Sebanding-cocok dicoba', + self::TIDAK_YAKIN => 'Tidak yakin', + self::TIDAK_SEBANDING_TERLALU_BANYAK_USAHA => 'Tidak sebanding-terlalu banyak usaha', + }; + } + + public static function options(): array + { + return collect(self::cases())->map(fn ($case) => [ + 'value' => $case->value, + 'label' => $case->label(), + ])->toArray(); + } + + public static function values(): array + { + return array_column(self::cases(), 'value'); + } +} diff --git a/app/Http/Controllers/Web/Produktivitas/SosialEkonomiController.php b/app/Http/Controllers/Web/Produktivitas/SosialEkonomiController.php index 632dcb3..d0a23f2 100644 --- a/app/Http/Controllers/Web/Produktivitas/SosialEkonomiController.php +++ b/app/Http/Controllers/Web/Produktivitas/SosialEkonomiController.php @@ -3,15 +3,44 @@ namespace App\Http\Controllers\Web\Produktivitas; use App\Http\Controllers\Controller; -use App\Enums\KategoriPendapatanKomoditas; -use App\Enums\PeriodePendapatan; -use App\Enums\PihakMembantuKonflik; -use App\Enums\SkorKecukupanPenghasilan; -use App\Enums\SkorKejelasanStatusLahan; -use App\Enums\SkorKemampuanMenabung; -use App\Enums\SkorPeriodePaceklik; -use App\Enums\StatusKepemilikanLahanSosialEkonomi; -use App\Enums\StatusKonflik; +use App\Enums\SosialEkonomi\AlasanKreditDitolak; +use App\Enums\SosialEkonomi\BisaBeliPupukBersubsidi; +use App\Enums\SosialEkonomi\JenisAsetProduktif; +use App\Enums\SosialEkonomi\KategoriPendapatanKomoditas; +use App\Enums\SosialEkonomi\KemauanIkutProgram; +use App\Enums\SosialEkonomi\KemauanMencobaPraktikBaru; +use App\Enums\SosialEkonomi\KeaktifanPertemuanKelompok; +use App\Enums\SosialEkonomi\KedekatanSesamaAnggota; +use App\Enums\SosialEkonomi\KebebasanMemilihPembeli; +use App\Enums\SosialEkonomi\KeterikatanHutangPanen; +use App\Enums\SosialEkonomi\KeterlibatanProgramKeuanganFormal; +use App\Enums\SosialEkonomi\KondisiAsetProduktif; +use App\Enums\SosialEkonomi\ManfaatKelompokTani; +use App\Enums\SosialEkonomi\MinatPembeliHargaStabil; +use App\Enums\SosialEkonomi\OrientasiRencanaJangkaPanjang; +use App\Enums\SosialEkonomi\PanutanPetaniSukses; +use App\Enums\SosialEkonomi\PemahamanMutuHarga; +use App\Enums\SosialEkonomi\PengetahuanHargaHasilOlah; +use App\Enums\SosialEkonomi\PengalamanKreditKebun; +use App\Enums\SosialEkonomi\PeriodePendapatan; +use App\Enums\SosialEkonomi\PeranDalamKelompok; +use App\Enums\SosialEkonomi\PernahBantuanNgoPerusahaan; +use App\Enums\SosialEkonomi\PernahJualHargaLebihTinggi; +use App\Enums\SosialEkonomi\PinjamanTokohAdatPanen; +use App\Enums\SosialEkonomi\PihakMembantuKonflik; +use App\Enums\SosialEkonomi\PraktikIjon; +use App\Enums\SosialEkonomi\SkorKecukupanPenghasilan; +use App\Enums\SosialEkonomi\SkorKejelasanStatusLahan; +use App\Enums\SosialEkonomi\SkorKemampuanMenabung; +use App\Enums\SosialEkonomi\SkorPeriodePaceklik; +use App\Enums\SosialEkonomi\StatusKartuTani; +use App\Enums\SosialEkonomi\StatusKepemilikanLahanSosialEkonomi; +use App\Enums\SosialEkonomi\StatusKonflik; +use App\Enums\SosialEkonomi\StatusProgramKeuanganFormal; +use App\Enums\SosialEkonomi\StatusRekeningTabungan; +use App\Enums\SosialEkonomi\TekananJualSegera; +use App\Enums\SosialEkonomi\TerdaftarKelompokTani; +use App\Enums\SosialEkonomi\UsahaMutuTambahanHarga; use App\Models\Pertanian\Komoditas; use App\Models\Pertanian\Lahan; use App\Models\Pertanian\Petani; @@ -35,20 +64,14 @@ class SosialEkonomiController extends Controller ->where('petani_id', $petaniId) ->first(); - $pendapatanKomoditas = $sosialEkonomi?->pendapatanKomoditas ?? collect(); - $pendapatanKomoditasUtama = $pendapatanKomoditas->where('kategori', 'utama')->values(); - $pendapatanKomoditasLainnya = $pendapatanKomoditas->where('kategori', 'lainnya')->values(); - $pendapatanLuarPertanian = $sosialEkonomi?->pendapatanLuarPertanian?->values() ?? collect(); - $komoditasPetani = $this->komoditasPetani($petani); - - return view('produktivitas.petani.sosial-ekonomi.index', array_merge(compact( - 'petani', - 'sosialEkonomi', - 'pendapatanKomoditasUtama', - 'pendapatanKomoditasLainnya', - 'pendapatanLuarPertanian', - 'komoditasPetani' - ), $this->sosialEkonomiOptions())); + return $this->formView( + request(), + $petani, + $sosialEkonomi, + $sosialEkonomi + ? 'produktivitas.petani.sosial-ekonomi.edit' + : 'produktivitas.petani.sosial-ekonomi.index' + ); } public function index(Request $request, Petani $petani) @@ -163,7 +186,7 @@ class SosialEkonomiController extends Controller $validated = $this->validateData($request, $sosialEkonomi->id); $sosialEkonomi = DB::transaction(function () use ($request, $validated, $sosialEkonomi) { - $sosialEkonomi->update($this->sosialEkonomiPayload($validated) + [ + $sosialEkonomi->update($this->sosialEkonomiPayload($validated, $sosialEkonomi) + [ 'updated_by' => auth()->id(), ]); @@ -212,14 +235,17 @@ class SosialEkonomiController extends Controller private function validateData(Request $request, ?int $id = null): array { - return $request->validate([ + $section = $request->input('form_section'); + + $rules = [ + 'form_section' => ['required', 'string', Rule::in(['utama', 'sosial_budaya', 'keanggotaan_kelompok', 'akses_keuangan', 'keterikatan_hutang'])], 'uid' => [ 'nullable', 'string', 'max:255', Rule::unique('sosial_ekonomi', 'uid')->ignore($id), ], - 'petani_id' => ['nullable', 'exists:petani,id'], + 'petani_id' => ['required', 'exists:petani,id'], 'jumlah_tanggungan' => ['nullable', 'integer', 'min:0'], 'anak_masih_sekolah' => ['nullable', 'integer', 'min:0'], 'yang_ikut_bekerja' => ['nullable', 'integer', 'min:0'], @@ -240,6 +266,67 @@ class SosialEkonomiController extends Controller 'pihak_membantu_konflik_nama' => ['nullable', 'string', 'max:255'], 'tahun_bantuan_konflik' => ['nullable', 'integer', 'digits:4'], 'status_konflik' => ['nullable', 'string', Rule::in(StatusKonflik::values())], + 'kemauan_mencoba_praktik_baru' => ['nullable', 'integer', Rule::in(KemauanMencobaPraktikBaru::values())], + 'alasan_mencoba_praktik_baru' => ['nullable', 'string'], + 'hambatan_mengubah_cara_bertani' => ['nullable', 'string'], + 'pemahaman_mutu_harga' => ['nullable', 'integer', Rule::in(PemahamanMutuHarga::values())], + 'contoh_pemahaman_mutu_harga' => ['nullable', 'string'], + 'pengetahuan_harga_hasil_olah' => ['nullable', 'string', Rule::in(PengetahuanHargaHasilOlah::values())], + 'pernah_jual_harga_lebih_tinggi' => ['nullable', 'string', Rule::in(PernahJualHargaLebihTinggi::values())], + 'penyebab_harga_lebih_tinggi' => ['nullable', 'string'], + 'usaha_mutu_tambahan_harga' => ['nullable', 'string', Rule::in(UsahaMutuTambahanHarga::values())], + 'alasan_usaha_mutu_tambahan_harga' => ['nullable', 'string'], + 'panutan_petani_sukses' => ['nullable', 'integer', Rule::in(PanutanPetaniSukses::values())], + 'nama_lokasi_panutan' => ['nullable', 'string'], + 'kemauan_ikut_program' => ['nullable', 'integer', Rule::in(KemauanIkutProgram::values())], + 'harapan_program' => ['nullable', 'string'], + 'orientasi_rencana_jangka_panjang' => ['nullable', 'integer', Rule::in(OrientasiRencanaJangkaPanjang::values())], + 'rencana_jangka_panjang' => ['nullable', 'string'], + 'terdaftar_kelompok_tani' => ['nullable', 'string', Rule::in(TerdaftarKelompokTani::values())], + 'nama_kelompok_tani' => ['nullable', 'string', 'max:255'], + 'lama_bergabung_kelompok_tahun' => ['nullable', 'integer', 'min:0'], + 'kedekatan_sesama_anggota' => ['nullable', 'string', Rule::in(KedekatanSesamaAnggota::values())], + 'keaktifan_pertemuan_kelompok' => ['nullable', 'integer', Rule::in(KeaktifanPertemuanKelompok::values())], + 'topik_biasa_dibahas' => ['nullable', 'string'], + 'peran_dalam_kelompok' => ['nullable', 'integer', Rule::in(PeranDalamKelompok::values())], + 'manfaat_kelompok_tani' => ['nullable', 'integer', Rule::in(ManfaatKelompokTani::values())], + 'status_kartu_tani' => ['nullable', 'string', Rule::in(StatusKartuTani::values())], + 'bisa_beli_pupuk_bersubsidi' => ['nullable', 'string', Rule::in(BisaBeliPupukBersubsidi::values())], + 'manfaat_lain_kartu_tani' => ['nullable', 'string'], + 'status_rekening_tabungan' => ['nullable', 'integer', Rule::in(StatusRekeningTabungan::values())], + 'nama_bank' => ['nullable', 'string', 'max:255'], + 'pengalaman_kredit_kebun' => ['nullable', 'integer', Rule::in(PengalamanKreditKebun::values())], + 'alasan_kredit_ditolak' => ['nullable', 'array'], + 'alasan_kredit_ditolak.*' => ['string', Rule::in(AlasanKreditDitolak::values())], + 'alasan_kredit_ditolak_lainnya' => ['nullable', 'string', 'max:255'], + 'kondisi_aset_produktif' => ['nullable', 'integer', Rule::in(KondisiAsetProduktif::values())], + 'jenis_aset_produktif' => ['nullable', 'array'], + 'jenis_aset_produktif.*' => ['string', Rule::in(JenisAsetProduktif::values())], + 'jenis_aset_produktif_lainnya' => ['nullable', 'string', 'max:255'], + 'keterangan_kondisi_aset' => ['nullable', 'string'], + 'keterlibatan_program_keuangan_formal' => ['nullable', 'integer', Rule::in(KeterlibatanProgramKeuanganFormal::values())], + 'status_program_keuangan_formal' => ['nullable', 'array'], + 'status_program_keuangan_formal.*' => ['nullable', 'string', Rule::in(StatusProgramKeuanganFormal::values())], + 'program_keuangan_formal_lainnya_nama' => ['nullable', 'string', 'max:255'], + 'pernah_bantuan_ngo_perusahaan' => ['nullable', 'string', Rule::in(PernahBantuanNgoPerusahaan::values())], + 'detail_bantuan_ngo_perusahaan' => ['nullable', 'array'], + 'detail_bantuan_ngo_perusahaan.*.nama_lembaga' => ['nullable', 'string', 'max:255'], + 'detail_bantuan_ngo_perusahaan.*.bentuk_bantuan' => ['nullable', 'string', 'max:255'], + 'detail_bantuan_ngo_perusahaan.*.frekuensi' => ['nullable', 'integer', 'min:0'], + 'detail_bantuan_ngo_perusahaan.*.tahun_terakhir' => ['nullable', 'integer', 'digits:4'], + 'keterikatan_hutang_panen' => ['nullable', 'integer', Rule::in(KeterikatanHutangPanen::values())], + 'pinjaman_tokoh_adat_panen' => ['nullable', 'string', Rule::in(PinjamanTokohAdatPanen::values())], + 'keterangan_pinjaman_tokoh_adat' => ['nullable', 'string'], + 'total_hutang_rupiah' => ['nullable', 'integer', 'min:0'], + 'total_hutang_setara_kg_panen' => ['nullable', 'numeric', 'min:0'], + 'total_hutang_tidak_bersedia' => ['nullable', 'boolean'], + 'praktik_ijon' => ['nullable', 'integer', Rule::in(PraktikIjon::values())], + 'tekanan_jual_segera' => ['nullable', 'string', Rule::in(TekananJualSegera::values())], + 'penyebab_tekanan_jual_segera' => ['nullable', 'string'], + 'kebebasan_memilih_pembeli' => ['nullable', 'integer', Rule::in(KebebasanMemilihPembeli::values())], + 'alasan_tidak_bebas_memilih_pembeli' => ['nullable', 'string'], + 'minat_pembeli_harga_stabil' => ['nullable', 'string', Rule::in(MinatPembeliHargaStabil::values())], + 'alasan_minat_pembeli_harga_stabil' => ['nullable', 'string'], 'pendapatan_komoditas' => ['nullable', 'array'], 'pendapatan_komoditas.*.kategori' => ['required_with:pendapatan_komoditas', 'string', Rule::in(KategoriPendapatanKomoditas::values())], @@ -250,18 +337,208 @@ class SosialEkonomiController extends Controller 'pendapatan_luar_pertanian' => ['nullable', 'array'], 'pendapatan_luar_pertanian.*.jenis_pekerjaan' => ['nullable', 'string', 'max:255'], 'pendapatan_luar_pertanian.*.estimasi_per_bulan' => ['nullable', 'integer', 'min:0'], - ]); + ]; + + if ($section === 'utama') { + $rules = array_merge($rules, [ + 'jumlah_tanggungan' => ['required', 'integer', 'min:0'], + 'anak_masih_sekolah' => ['required', 'integer', 'min:0'], + 'yang_ikut_bekerja' => ['required', 'integer', 'min:0'], + 'skor_periode_paceklik' => ['required', 'integer', Rule::in(SkorPeriodePaceklik::values())], + 'bulan_paceklik' => ['required', 'string', 'max:255'], + 'sumber_penghasilan_paceklik' => ['required', 'string'], + 'total_estimasi_biaya_kebun_per_musim' => ['required', 'integer', 'min:0'], + 'skor_kemampuan_menabung' => ['required', 'integer', Rule::in(SkorKemampuanMenabung::values())], + 'estimasi_tabungan_per_bulan' => ['required', 'integer', 'min:0'], + 'skor_kecukupan_penghasilan' => ['required', 'integer', Rule::in(SkorKecukupanPenghasilan::values())], + 'alasan_kecukupan_penghasilan' => ['required', 'string'], + 'status_kepemilikan_lahan' => ['required', 'string', Rule::in(StatusKepemilikanLahanSosialEkonomi::values())], + 'skor_kejelasan_status_lahan' => ['required', 'integer', Rule::in(SkorKejelasanStatusLahan::values())], + 'ada_sertifikat_dokumen' => ['required', 'boolean'], + 'ada_sengketa' => ['required', 'boolean'], + 'keterangan_sengketa' => ['required_if:ada_sengketa,1', 'nullable', 'string'], + 'pihak_membantu_konflik' => ['required_if:ada_sengketa,1', 'nullable', 'string', Rule::in(PihakMembantuKonflik::values())], + 'pihak_membantu_konflik_nama' => ['required_if:pihak_membantu_konflik,' . PihakMembantuKonflik::ADA->value, 'nullable', 'string', 'max:255'], + 'tahun_bantuan_konflik' => ['required_if:pihak_membantu_konflik,' . PihakMembantuKonflik::ADA->value, 'nullable', 'integer', 'digits:4'], + 'status_konflik' => ['required_if:ada_sengketa,1', 'nullable', 'string', Rule::in(StatusKonflik::values())], + ]); + } + + if ($section === 'sosial_budaya') { + $rules = array_merge($rules, [ + 'kemauan_mencoba_praktik_baru' => ['required', 'integer', Rule::in(KemauanMencobaPraktikBaru::values())], + 'alasan_mencoba_praktik_baru' => ['required', 'string'], + 'hambatan_mengubah_cara_bertani' => ['required', 'string'], + 'pemahaman_mutu_harga' => ['required', 'integer', Rule::in(PemahamanMutuHarga::values())], + 'contoh_pemahaman_mutu_harga' => ['required', 'string'], + 'pengetahuan_harga_hasil_olah' => ['required', 'string', Rule::in(PengetahuanHargaHasilOlah::values())], + 'pernah_jual_harga_lebih_tinggi' => ['required', 'string', Rule::in(PernahJualHargaLebihTinggi::values())], + 'penyebab_harga_lebih_tinggi' => ['required_if:pernah_jual_harga_lebih_tinggi,' . PernahJualHargaLebihTinggi::PERNAH->value, 'nullable', 'string'], + 'usaha_mutu_tambahan_harga' => ['required', 'string', Rule::in(UsahaMutuTambahanHarga::values())], + 'alasan_usaha_mutu_tambahan_harga' => ['required_if:usaha_mutu_tambahan_harga,' . UsahaMutuTambahanHarga::TIDAK_SEBANDING_TERLALU_BANYAK_USAHA->value, 'nullable', 'string'], + 'panutan_petani_sukses' => ['required', 'integer', Rule::in(PanutanPetaniSukses::values())], + 'nama_lokasi_panutan' => ['required_unless:panutan_petani_sukses,' . PanutanPetaniSukses::TIDAK_ADA->value, 'nullable', 'string'], + 'kemauan_ikut_program' => ['required', 'integer', Rule::in(KemauanIkutProgram::values())], + 'harapan_program' => ['required', 'string'], + 'orientasi_rencana_jangka_panjang' => ['required', 'integer', Rule::in(OrientasiRencanaJangkaPanjang::values())], + 'rencana_jangka_panjang' => ['required', 'string'], + ]); + } + + if ($section === 'keanggotaan_kelompok') { + $rules = array_merge($rules, [ + 'terdaftar_kelompok_tani' => ['nullable', 'string', Rule::in(TerdaftarKelompokTani::values())], + 'nama_kelompok_tani' => ['required_if:terdaftar_kelompok_tani,' . TerdaftarKelompokTani::YA->value, 'nullable', 'string', 'max:255'], + 'lama_bergabung_kelompok_tahun' => ['required_if:terdaftar_kelompok_tani,' . TerdaftarKelompokTani::YA->value, 'nullable', 'integer', 'min:0'], + 'kedekatan_sesama_anggota' => ['required_if:terdaftar_kelompok_tani,' . TerdaftarKelompokTani::YA->value, 'nullable', 'string', Rule::in(KedekatanSesamaAnggota::values())], + 'keaktifan_pertemuan_kelompok' => ['required', 'integer', Rule::in(KeaktifanPertemuanKelompok::values())], + 'topik_biasa_dibahas' => ['required', 'string'], + 'peran_dalam_kelompok' => ['required', 'integer', Rule::in(PeranDalamKelompok::values())], + 'manfaat_kelompok_tani' => ['required', 'integer', Rule::in(ManfaatKelompokTani::values())], + 'status_kartu_tani' => ['nullable', 'string', Rule::in(StatusKartuTani::values())], + 'bisa_beli_pupuk_bersubsidi' => ['nullable', 'string', Rule::in(BisaBeliPupukBersubsidi::values())], + 'manfaat_lain_kartu_tani' => ['nullable', 'string'], + ]); + } + + if ($section === 'akses_keuangan') { + $pengalamanKredit = (int) $request->input('pengalaman_kredit_kebun'); + $kondisiAset = (int) $request->input('kondisi_aset_produktif'); + + $rules = array_merge($rules, [ + 'status_rekening_tabungan' => ['required', 'integer', Rule::in(StatusRekeningTabungan::values())], + 'nama_bank' => [ + Rule::requiredIf(fn () => (int) $request->input('status_rekening_tabungan') > StatusRekeningTabungan::TIDAK_PUNYA_REKENING->value), + 'nullable', + 'string', + 'max:255', + ], + 'pengalaman_kredit_kebun' => ['required', 'integer', Rule::in(PengalamanKreditKebun::values())], + 'alasan_kredit_ditolak' => [ + Rule::requiredIf(fn () => in_array($pengalamanKredit, [ + PengalamanKreditKebun::TIDAK_PERNAH_MENCOBA->value, + PengalamanKreditKebun::PERNAH_COBA_DITOLAK->value, + ], true)), + 'nullable', + 'array', + ], + 'alasan_kredit_ditolak.*' => ['string', Rule::in(AlasanKreditDitolak::values())], + 'alasan_kredit_ditolak_lainnya' => [ + Rule::requiredIf(fn () => in_array(AlasanKreditDitolak::LAINNYA->value, $request->input('alasan_kredit_ditolak', []), true)), + 'nullable', + 'string', + 'max:255', + ], + 'kondisi_aset_produktif' => ['required', 'integer', Rule::in(KondisiAsetProduktif::values())], + 'jenis_aset_produktif' => [ + Rule::requiredIf(fn () => $kondisiAset > KondisiAsetProduktif::TIDAK_ADA->value), + 'nullable', + 'array', + ], + 'jenis_aset_produktif.*' => ['string', Rule::in(JenisAsetProduktif::values())], + 'jenis_aset_produktif_lainnya' => [ + Rule::requiredIf(fn () => in_array(JenisAsetProduktif::LAINNYA->value, $request->input('jenis_aset_produktif', []), true)), + 'nullable', + 'string', + 'max:255', + ], + 'keterangan_kondisi_aset' => [ + Rule::requiredIf(fn () => $kondisiAset > KondisiAsetProduktif::TIDAK_ADA->value), + 'nullable', + '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.lainnya' => ['nullable', 'string', Rule::in(StatusProgramKeuanganFormal::values())], + 'program_keuangan_formal_lainnya_nama' => [ + Rule::requiredIf(fn () => filled($request->input('status_program_keuangan_formal.lainnya'))), + 'nullable', + 'string', + 'max:255', + ], + 'pernah_bantuan_ngo_perusahaan' => ['required', 'string', Rule::in(PernahBantuanNgoPerusahaan::values())], + 'detail_bantuan_ngo_perusahaan' => [ + Rule::requiredIf(fn () => $request->input('pernah_bantuan_ngo_perusahaan') === PernahBantuanNgoPerusahaan::PERNAH->value), + 'nullable', + 'array', + ], + 'detail_bantuan_ngo_perusahaan.0.nama_lembaga' => [ + Rule::requiredIf(fn () => $request->input('pernah_bantuan_ngo_perusahaan') === PernahBantuanNgoPerusahaan::PERNAH->value), + 'nullable', + 'string', + 'max:255', + ], + 'detail_bantuan_ngo_perusahaan.0.bentuk_bantuan' => [ + Rule::requiredIf(fn () => $request->input('pernah_bantuan_ngo_perusahaan') === PernahBantuanNgoPerusahaan::PERNAH->value), + 'nullable', + 'string', + 'max:255', + ], + 'detail_bantuan_ngo_perusahaan.0.frekuensi' => [ + Rule::requiredIf(fn () => $request->input('pernah_bantuan_ngo_perusahaan') === PernahBantuanNgoPerusahaan::PERNAH->value), + 'nullable', + 'integer', + 'min:0', + ], + 'detail_bantuan_ngo_perusahaan.0.tahun_terakhir' => [ + Rule::requiredIf(fn () => $request->input('pernah_bantuan_ngo_perusahaan') === PernahBantuanNgoPerusahaan::PERNAH->value), + 'nullable', + 'integer', + 'digits:4', + ], + ]); + } + + if ($section === 'keterikatan_hutang') { + $totalHutangTidakBersedia = $request->boolean('total_hutang_tidak_bersedia'); + $kebebasanMemilihPembeli = (int) $request->input('kebebasan_memilih_pembeli'); + + $rules = array_merge($rules, [ + 'keterikatan_hutang_panen' => ['required', 'integer', Rule::in(KeterikatanHutangPanen::values())], + 'pinjaman_tokoh_adat_panen' => ['required', 'string', Rule::in(PinjamanTokohAdatPanen::values())], + 'keterangan_pinjaman_tokoh_adat' => ['required_if:pinjaman_tokoh_adat_panen,' . PinjamanTokohAdatPanen::ADA->value, 'nullable', 'string'], + 'total_hutang_rupiah' => [ + Rule::requiredIf(fn () => !$totalHutangTidakBersedia && !filled($request->input('total_hutang_setara_kg_panen'))), + 'nullable', + 'integer', + 'min:0', + ], + 'total_hutang_setara_kg_panen' => ['nullable', 'numeric', 'min:0'], + 'total_hutang_tidak_bersedia' => ['nullable', 'boolean'], + 'praktik_ijon' => ['required', 'integer', Rule::in(PraktikIjon::values())], + 'tekanan_jual_segera' => ['required', 'string', Rule::in(TekananJualSegera::values())], + 'penyebab_tekanan_jual_segera' => ['required_if:tekanan_jual_segera,' . TekananJualSegera::ADA->value, 'nullable', 'string'], + 'kebebasan_memilih_pembeli' => ['required', 'integer', Rule::in(KebebasanMemilihPembeli::values())], + 'alasan_tidak_bebas_memilih_pembeli' => [ + Rule::requiredIf(fn () => $kebebasanMemilihPembeli > 0 && $kebebasanMemilihPembeli < KebebasanMemilihPembeli::CUKUP_BEBAS_SESEKALI_PINDAH->value), + 'nullable', + 'string', + ], + 'minat_pembeli_harga_stabil' => ['required', 'string', Rule::in(MinatPembeliHargaStabil::values())], + 'alasan_minat_pembeli_harga_stabil' => ['required', 'string'], + ]); + } + + return $request->validate($rules, $this->validationMessages(), $this->validationAttributes()); } - private function sosialEkonomiPayload(array $validated): array + private function sosialEkonomiPayload(array $validated, ?SosialEkonomi $sosialEkonomi = null): array { $payload = collect($validated) - ->except(['pendapatan_komoditas', 'pendapatan_luar_pertanian']) - ->merge([ - 'uid' => $validated['uid'] ?? 'SEK-' . Str::uuid(), - ]) + ->except(['form_section', 'pendapatan_komoditas', 'pendapatan_luar_pertanian']) ->all(); + if (!$sosialEkonomi && !array_key_exists('uid', $payload)) { + $payload['uid'] = 'SEK-' . Str::uuid(); + } + $payload = $this->normalizeSkorPayload($payload); if (($payload['pihak_membantu_konflik'] ?? null) === PihakMembantuKonflik::TIDAK_ADA_SELESAIKAN_SENDIRI->value) { @@ -269,9 +546,233 @@ class SosialEkonomiController extends Controller $payload['tahun_bantuan_konflik'] = null; } + if ( + array_key_exists('pernah_jual_harga_lebih_tinggi', $payload) + && ($payload['pernah_jual_harga_lebih_tinggi'] ?? null) !== PernahJualHargaLebihTinggi::PERNAH->value + ) { + $payload['penyebab_harga_lebih_tinggi'] = null; + } + + if ( + array_key_exists('panutan_petani_sukses', $payload) + && (int) ($payload['panutan_petani_sukses'] ?? 0) === PanutanPetaniSukses::TIDAK_ADA->value + ) { + $payload['nama_lokasi_panutan'] = null; + } + + if ( + array_key_exists('terdaftar_kelompok_tani', $payload) + && ($payload['terdaftar_kelompok_tani'] ?? null) === TerdaftarKelompokTani::TIDAK->value + ) { + $payload['nama_kelompok_tani'] = null; + $payload['lama_bergabung_kelompok_tahun'] = null; + $payload['kedekatan_sesama_anggota'] = null; + } + + if ( + array_key_exists('status_rekening_tabungan', $payload) + && (int) ($payload['status_rekening_tabungan'] ?? 0) === StatusRekeningTabungan::TIDAK_PUNYA_REKENING->value + ) { + $payload['nama_bank'] = null; + } + + if ( + array_key_exists('pengalaman_kredit_kebun', $payload) + && !in_array((int) ($payload['pengalaman_kredit_kebun'] ?? 0), [ + PengalamanKreditKebun::TIDAK_PERNAH_MENCOBA->value, + PengalamanKreditKebun::PERNAH_COBA_DITOLAK->value, + ], true) + ) { + $payload['alasan_kredit_ditolak'] = null; + $payload['alasan_kredit_ditolak_lainnya'] = null; + } + + if ( + array_key_exists('alasan_kredit_ditolak', $payload) + && !in_array(AlasanKreditDitolak::LAINNYA->value, $payload['alasan_kredit_ditolak'] ?? [], true) + ) { + $payload['alasan_kredit_ditolak_lainnya'] = null; + } + + if ( + array_key_exists('kondisi_aset_produktif', $payload) + && (int) ($payload['kondisi_aset_produktif'] ?? 0) === KondisiAsetProduktif::TIDAK_ADA->value + ) { + $payload['jenis_aset_produktif'] = null; + $payload['jenis_aset_produktif_lainnya'] = null; + $payload['keterangan_kondisi_aset'] = null; + } + + if ( + array_key_exists('jenis_aset_produktif', $payload) + && !in_array(JenisAsetProduktif::LAINNYA->value, $payload['jenis_aset_produktif'] ?? [], true) + ) { + $payload['jenis_aset_produktif_lainnya'] = null; + } + + if (!filled($payload['status_program_keuangan_formal']['lainnya'] ?? null)) { + $payload['program_keuangan_formal_lainnya_nama'] = null; + } + + if ( + array_key_exists('pernah_bantuan_ngo_perusahaan', $payload) + && ($payload['pernah_bantuan_ngo_perusahaan'] ?? null) === PernahBantuanNgoPerusahaan::TIDAK_PERNAH->value + ) { + $payload['detail_bantuan_ngo_perusahaan'] = null; + } + + if (array_key_exists('detail_bantuan_ngo_perusahaan', $payload) && is_array($payload['detail_bantuan_ngo_perusahaan'])) { + $payload['detail_bantuan_ngo_perusahaan'] = collect($payload['detail_bantuan_ngo_perusahaan']) + ->filter(fn ($row) => collect($row)->filter(fn ($value) => filled($value))->isNotEmpty()) + ->values() + ->all(); + } + + if ( + array_key_exists('pinjaman_tokoh_adat_panen', $payload) + && ($payload['pinjaman_tokoh_adat_panen'] ?? null) !== PinjamanTokohAdatPanen::ADA->value + ) { + $payload['keterangan_pinjaman_tokoh_adat'] = null; + } + + if (!empty($payload['total_hutang_tidak_bersedia'])) { + $payload['total_hutang_rupiah'] = null; + $payload['total_hutang_setara_kg_panen'] = null; + } + + if ( + array_key_exists('tekanan_jual_segera', $payload) + && ($payload['tekanan_jual_segera'] ?? null) !== TekananJualSegera::ADA->value + ) { + $payload['penyebab_tekanan_jual_segera'] = null; + } + + if ( + array_key_exists('kebebasan_memilih_pembeli', $payload) + && (int) ($payload['kebebasan_memilih_pembeli'] ?? 0) >= KebebasanMemilihPembeli::CUKUP_BEBAS_SESEKALI_PINDAH->value + ) { + $payload['alasan_tidak_bebas_memilih_pembeli'] = null; + } + return $payload; } + private function validationMessages(): array + { + return [ + 'required' => ':attribute wajib diisi.', + 'required_if' => ':attribute wajib diisi.', + 'required_unless' => ':attribute wajib diisi.', + 'required_with' => ':attribute wajib diisi.', + 'integer' => ':attribute harus berupa angka.', + 'numeric' => ':attribute harus berupa angka.', + 'boolean' => ':attribute harus dipilih.', + 'min' => ':attribute tidak boleh kurang dari :min.', + 'max' => ':attribute tidak boleh lebih dari :max karakter.', + 'digits' => ':attribute harus terdiri dari :digits digit.', + 'exists' => ':attribute tidak valid.', + 'in' => ':attribute tidak valid.', + 'array' => ':attribute harus berupa daftar data.', + 'string' => ':attribute harus berupa teks.', + 'unique' => ':attribute sudah digunakan.', + ]; + } + + private function validationAttributes(): array + { + return [ + 'form_section' => 'Bagian form', + 'petani_id' => 'Petani', + 'jumlah_tanggungan' => 'Jumlah tanggungan', + 'anak_masih_sekolah' => 'Anak masih sekolah', + 'yang_ikut_bekerja' => 'Yang ikut bekerja', + 'skor_periode_paceklik' => 'Periode paceklik', + 'bulan_paceklik' => 'Bulan paceklik biasanya', + 'sumber_penghasilan_paceklik' => 'Sumber penghasilan saat paceklik', + 'total_estimasi_biaya_kebun_per_musim' => 'Total estimasi biaya kebun per musim', + 'skor_kemampuan_menabung' => 'Kemampuan menabung', + 'estimasi_tabungan_per_bulan' => 'Estimasi tabungan per bulan', + 'skor_kecukupan_penghasilan' => 'Kecukupan penghasilan untuk keluarga', + 'alasan_kecukupan_penghasilan' => 'Alasan kecukupan penghasilan', + 'status_kepemilikan_lahan' => 'Status kepemilikan lahan', + 'skor_kejelasan_status_lahan' => 'Kejelasan status lahan', + 'ada_sertifikat_dokumen' => 'Ada sertifikat/dokumen', + 'ada_sengketa' => 'Ada sengketa', + 'keterangan_sengketa' => 'Keterangan sengketa', + 'pihak_membantu_konflik' => 'Pihak yang membantu', + 'pihak_membantu_konflik_nama' => 'Nama pihak', + 'tahun_bantuan_konflik' => 'Tahun bantuan', + 'status_konflik' => 'Status konflik', + 'kemauan_mencoba_praktik_baru' => 'Kemauan mencoba cara baru', + 'alasan_mencoba_praktik_baru' => 'Alasan mencoba praktik baru', + 'hambatan_mengubah_cara_bertani' => 'Hambatan utama mengubah cara berkebun', + 'pemahaman_mutu_harga' => 'Pemahaman mutu vs. harga jual', + 'contoh_pemahaman_mutu_harga' => 'Contoh/penjelasan petani', + 'pengetahuan_harga_hasil_olah' => 'Pengetahuan harga hasil olah', + 'pernah_jual_harga_lebih_tinggi' => 'Pengalaman jual dengan harga lebih tinggi', + 'penyebab_harga_lebih_tinggi' => 'Penyebab harga lebih tinggi', + 'usaha_mutu_tambahan_harga' => 'Usaha meningkatkan mutu vs. tambahan harga', + 'alasan_usaha_mutu_tambahan_harga' => 'Alasan usaha mutu tambahan harga', + 'panutan_petani_sukses' => 'Panutan di sekitar petani', + 'nama_lokasi_panutan' => 'Nama dan lokasi panutan', + 'kemauan_ikut_program' => 'Kemauan ikut program', + 'harapan_program' => 'Harapan dari program', + 'orientasi_rencana_jangka_panjang' => 'Orientasi rencana 3-5 tahun ke depan', + 'rencana_jangka_panjang' => 'Rencana yang akan dilakukan', + 'terdaftar_kelompok_tani' => 'Status terdaftar di kelompok tani', + 'nama_kelompok_tani' => 'Nama kelompok', + 'lama_bergabung_kelompok_tahun' => 'Lama bergabung', + 'kedekatan_sesama_anggota' => 'Kedekatan dengan sesama anggota', + 'keaktifan_pertemuan_kelompok' => 'Kehadiran dan keaktifan di pertemuan', + 'topik_biasa_dibahas' => 'Topik yang biasa dibahas', + 'peran_dalam_kelompok' => 'Jabatan atau peran di kelompok', + 'manfaat_kelompok_tani' => 'Manfaat dari kelompok tani', + 'status_kartu_tani' => 'Status Kartu Tani', + 'bisa_beli_pupuk_bersubsidi' => 'Kemampuan menggunakan Kartu Tani untuk membeli pupuk bersubsidi', + 'manfaat_lain_kartu_tani' => 'Manfaat lain setelah daftar Kartu Tani', + 'status_rekening_tabungan' => 'Status rekening atau tabungan', + 'nama_bank' => 'Nama bank', + 'pengalaman_kredit_kebun' => 'Pengalaman kredit untuk kebun', + 'alasan_kredit_ditolak' => 'Alasan kredit ditolak atau tidak jadi', + 'alasan_kredit_ditolak.*' => 'Alasan kredit ditolak atau tidak jadi', + 'alasan_kredit_ditolak_lainnya' => 'Alasan kredit lainnya', + 'kondisi_aset_produktif' => 'Kondisi aset produktif selain lahan', + 'jenis_aset_produktif' => 'Jenis aset', + 'jenis_aset_produktif.*' => 'Jenis aset', + 'jenis_aset_produktif_lainnya' => 'Jenis aset lainnya', + 'keterangan_kondisi_aset' => 'Keterangan kondisi aset', + 'keterlibatan_program_keuangan_formal' => 'Keterlibatan dalam program bantuan', + 'status_program_keuangan_formal' => 'Status per program', + 'status_program_keuangan_formal.*' => 'Status per program', + 'program_keuangan_formal_lainnya_nama' => 'Nama program lainnya', + 'pernah_bantuan_ngo_perusahaan' => 'Status bantuan NGO atau perusahaan', + 'detail_bantuan_ngo_perusahaan' => 'Detail bantuan NGO atau perusahaan', + 'detail_bantuan_ngo_perusahaan.*.nama_lembaga' => 'Nama lembaga', + 'detail_bantuan_ngo_perusahaan.*.bentuk_bantuan' => 'Bentuk bantuan', + 'detail_bantuan_ngo_perusahaan.*.frekuensi' => 'Frekuensi bantuan', + 'detail_bantuan_ngo_perusahaan.*.tahun_terakhir' => 'Tahun terakhir bantuan', + 'keterikatan_hutang_panen' => 'Hutang yang dikaitkan dengan hasil panen', + 'pinjaman_tokoh_adat_panen' => 'Pinjaman dari tokoh adat atau mosalaki terkait panen', + 'keterangan_pinjaman_tokoh_adat' => 'Keterangan pinjaman dari tokoh adat atau mosalaki', + 'total_hutang_rupiah' => 'Total hutang saat ini', + 'total_hutang_setara_kg_panen' => 'Total hutang setara hasil panen', + 'total_hutang_tidak_bersedia' => 'Status tidak bersedia menjawab total hutang', + 'praktik_ijon' => 'Praktik ijon', + 'tekanan_jual_segera' => 'Tekanan jual segera meski harga rendah', + 'penyebab_tekanan_jual_segera' => 'Penyebab tekanan jual segera', + 'kebebasan_memilih_pembeli' => 'Kebebasan memilih pembeli', + 'alasan_tidak_bebas_memilih_pembeli' => 'Alasan jika tidak bebas', + 'minat_pembeli_harga_stabil' => 'Minat ke pembeli harga stabil jangka panjang', + 'alasan_minat_pembeli_harga_stabil' => 'Alasan minat ke pembeli harga stabil', + 'pendapatan_komoditas.*.kategori' => 'Kategori pendapatan komoditas', + 'pendapatan_komoditas.*.komoditas' => 'Komoditas', + 'pendapatan_komoditas.*.pendapatan' => 'Pendapatan', + 'pendapatan_komoditas.*.periode' => 'Periode', + 'pendapatan_luar_pertanian.*.jenis_pekerjaan' => 'Jenis pekerjaan', + 'pendapatan_luar_pertanian.*.estimasi_per_bulan' => 'Estimasi per bulan', + ]; + } + private function normalizeSkorPayload(array $payload): array { foreach ([ @@ -279,6 +780,21 @@ class SosialEkonomiController extends Controller 'skor_kemampuan_menabung', 'skor_kecukupan_penghasilan', 'skor_kejelasan_status_lahan', + 'kemauan_mencoba_praktik_baru', + 'pemahaman_mutu_harga', + 'panutan_petani_sukses', + 'kemauan_ikut_program', + 'orientasi_rencana_jangka_panjang', + 'keaktifan_pertemuan_kelompok', + 'peran_dalam_kelompok', + 'manfaat_kelompok_tani', + 'status_rekening_tabungan', + 'pengalaman_kredit_kebun', + 'kondisi_aset_produktif', + 'keterlibatan_program_keuangan_formal', + 'keterikatan_hutang_panen', + 'praktik_ijon', + 'kebebasan_memilih_pembeli', ] as $field) { if (array_key_exists($field, $payload) && !is_null($payload[$field]) && $payload[$field] !== '') { $payload[$field] = (int) $payload[$field]; @@ -371,6 +887,61 @@ class SosialEkonomiController extends Controller 'pihakMembantuKonflikOptions' => PihakMembantuKonflik::options(), 'pihakMembantuTanpaBantuanValue' => PihakMembantuKonflik::TIDAK_ADA_SELESAIKAN_SENDIRI->value, 'statusKonflikOptions' => StatusKonflik::options(), + 'kemauanMencobaPraktikBaruOptions' => KemauanMencobaPraktikBaru::options(), + 'pemahamanMutuHargaOptions' => PemahamanMutuHarga::options(), + 'pengetahuanHargaHasilOlahOptions' => PengetahuanHargaHasilOlah::options(), + 'pernahJualHargaLebihTinggiOptions' => PernahJualHargaLebihTinggi::options(), + 'pernahJualHargaLebihTinggiPernahValue' => PernahJualHargaLebihTinggi::PERNAH->value, + 'usahaMutuTambahanHargaOptions' => UsahaMutuTambahanHarga::options(), + 'panutanPetaniSuksesOptions' => PanutanPetaniSukses::options(), + 'panutanPetaniSuksesTidakAdaValue' => PanutanPetaniSukses::TIDAK_ADA->value, + 'kemauanIkutProgramOptions' => KemauanIkutProgram::options(), + 'orientasiRencanaJangkaPanjangOptions' => OrientasiRencanaJangkaPanjang::options(), + 'terdaftarKelompokTaniOptions' => TerdaftarKelompokTani::options(), + 'terdaftarKelompokTaniYaValue' => TerdaftarKelompokTani::YA->value, + 'terdaftarKelompokTaniTidakValue' => TerdaftarKelompokTani::TIDAK->value, + 'kedekatanSesamaAnggotaOptions' => KedekatanSesamaAnggota::options(), + 'keaktifanPertemuanKelompokOptions' => KeaktifanPertemuanKelompok::options(), + 'peranDalamKelompokOptions' => PeranDalamKelompok::options(), + 'manfaatKelompokTaniOptions' => ManfaatKelompokTani::options(), + 'statusKartuTaniOptions' => StatusKartuTani::options(), + 'bisaBeliPupukBersubsidiOptions' => BisaBeliPupukBersubsidi::options(), + 'statusRekeningTabunganOptions' => StatusRekeningTabungan::options(), + 'statusRekeningTidakPunyaValue' => StatusRekeningTabungan::TIDAK_PUNYA_REKENING->value, + 'pengalamanKreditKebunOptions' => PengalamanKreditKebun::options(), + 'pengalamanKreditPerluAlasanValues' => [ + PengalamanKreditKebun::TIDAK_PERNAH_MENCOBA->value, + PengalamanKreditKebun::PERNAH_COBA_DITOLAK->value, + ], + 'alasanKreditDitolakOptions' => AlasanKreditDitolak::options(), + 'alasanKreditLainnyaValue' => AlasanKreditDitolak::LAINNYA->value, + 'kondisiAsetProduktifOptions' => KondisiAsetProduktif::options(), + 'kondisiAsetTidakAdaValue' => KondisiAsetProduktif::TIDAK_ADA->value, + 'jenisAsetProduktifOptions' => JenisAsetProduktif::options(), + 'jenisAsetLainnyaValue' => JenisAsetProduktif::LAINNYA->value, + 'keterlibatanProgramKeuanganFormalOptions' => KeterlibatanProgramKeuanganFormal::options(), + 'statusProgramKeuanganFormalOptions' => StatusProgramKeuanganFormal::options(), + 'programKeuanganFormalRows' => [ + 'pkh' => 'PKH', + 'blt' => 'BLT', + 'kur' => 'KUR', + 'kredit_koperasi_resmi' => 'Kredit koperasi resmi', + 'credit_union_cu' => 'Credit Union (CU)', + 'pinjaman_bumdes' => 'Pinjaman BUMDes', + 'modal_hibah_dinas_pertanian' => 'Modal-hibah dinas pertanian', + 'lainnya' => 'Lainnya', + ], + 'pernahBantuanNgoPerusahaanOptions' => PernahBantuanNgoPerusahaan::options(), + 'pernahBantuanNgoPerusahaanPernahValue' => PernahBantuanNgoPerusahaan::PERNAH->value, + 'keterikatanHutangPanenOptions' => KeterikatanHutangPanen::options(), + 'pinjamanTokohAdatPanenOptions' => PinjamanTokohAdatPanen::options(), + 'pinjamanTokohAdatAdaValue' => PinjamanTokohAdatPanen::ADA->value, + 'praktikIjonOptions' => PraktikIjon::options(), + 'tekananJualSegeraOptions' => TekananJualSegera::options(), + 'tekananJualSegeraAdaValue' => TekananJualSegera::ADA->value, + 'kebebasanMemilihPembeliOptions' => KebebasanMemilihPembeli::options(), + 'kebebasanMemilihPembeliCukupBebasValue' => KebebasanMemilihPembeli::CUKUP_BEBAS_SESEKALI_PINDAH->value, + 'minatPembeliHargaStabilOptions' => MinatPembeliHargaStabil::options(), ]; } diff --git a/app/Http/Controllers/Web/Produktivitas/SurveyProduktivitasController.php b/app/Http/Controllers/Web/Produktivitas/SurveyProduktivitasController.php index 9968982..cb9ba6a 100644 --- a/app/Http/Controllers/Web/Produktivitas/SurveyProduktivitasController.php +++ b/app/Http/Controllers/Web/Produktivitas/SurveyProduktivitasController.php @@ -14,7 +14,7 @@ class SurveyProduktivitasController extends Controller public function store($petaniId, Request $request) { $petani = Petani::findOrFail($petaniId); - dd($request->all()); + // dd($request->all()); $validated = $request->validate([ 'produktivitas_komoditas' => ['required', 'array'], 'produktivitas_komoditas.*.komoditas_id' => ['nullable', 'exists:master_komoditas,id'], diff --git a/app/Models/Pertanian/Petani.php b/app/Models/Pertanian/Petani.php index b7a2184..94ae083 100644 --- a/app/Models/Pertanian/Petani.php +++ b/app/Models/Pertanian/Petani.php @@ -206,7 +206,22 @@ class Petani extends Model $this->enumValue($sosialEkonomi->skor_kemampuan_menabung), $this->enumValue($sosialEkonomi->skor_kecukupan_penghasilan), $this->enumValue($sosialEkonomi->skor_kejelasan_status_lahan), - ])->filter(fn ($value) => !is_null($value) && $value !== ''); + $this->enumValue($sosialEkonomi->kemauan_mencoba_praktik_baru), + $this->enumValue($sosialEkonomi->pemahaman_mutu_harga), + $this->enumValue($sosialEkonomi->panutan_petani_sukses), + $this->enumValue($sosialEkonomi->kemauan_ikut_program), + $this->enumValue($sosialEkonomi->orientasi_rencana_jangka_panjang), + $this->enumValue($sosialEkonomi->keaktifan_pertemuan_kelompok), + $this->enumValue($sosialEkonomi->peran_dalam_kelompok), + $this->enumValue($sosialEkonomi->manfaat_kelompok_tani), + $this->enumValue($sosialEkonomi->status_rekening_tabungan), + $this->enumValue($sosialEkonomi->pengalaman_kredit_kebun), + $this->enumValue($sosialEkonomi->kondisi_aset_produktif), + $this->enumValue($sosialEkonomi->keterlibatan_program_keuangan_formal), + $this->enumValue($sosialEkonomi->keterikatan_hutang_panen), + $this->enumValue($sosialEkonomi->praktik_ijon), + $this->enumValue($sosialEkonomi->kebebasan_memilih_pembeli), + ])->filter(fn ($value) => !is_null($value) && $value !== '' && (int) $value > 0); if ($nilai->isEmpty()) { return null; diff --git a/app/Models/Pertanian/SosialEkonomi.php b/app/Models/Pertanian/SosialEkonomi.php index f3e2a1a..a6300a6 100644 --- a/app/Models/Pertanian/SosialEkonomi.php +++ b/app/Models/Pertanian/SosialEkonomi.php @@ -2,13 +2,42 @@ namespace App\Models\Pertanian; -use App\Enums\PihakMembantuKonflik; -use App\Enums\SkorKecukupanPenghasilan; -use App\Enums\SkorKejelasanStatusLahan; -use App\Enums\SkorKemampuanMenabung; -use App\Enums\SkorPeriodePaceklik; -use App\Enums\StatusKepemilikanLahanSosialEkonomi; -use App\Enums\StatusKonflik; +use App\Enums\SosialEkonomi\AlasanKreditDitolak; +use App\Enums\SosialEkonomi\BisaBeliPupukBersubsidi; +use App\Enums\SosialEkonomi\JenisAsetProduktif; +use App\Enums\SosialEkonomi\KemauanIkutProgram; +use App\Enums\SosialEkonomi\KemauanMencobaPraktikBaru; +use App\Enums\SosialEkonomi\KeaktifanPertemuanKelompok; +use App\Enums\SosialEkonomi\KedekatanSesamaAnggota; +use App\Enums\SosialEkonomi\KebebasanMemilihPembeli; +use App\Enums\SosialEkonomi\KeterikatanHutangPanen; +use App\Enums\SosialEkonomi\KeterlibatanProgramKeuanganFormal; +use App\Enums\SosialEkonomi\KondisiAsetProduktif; +use App\Enums\SosialEkonomi\ManfaatKelompokTani; +use App\Enums\SosialEkonomi\MinatPembeliHargaStabil; +use App\Enums\SosialEkonomi\OrientasiRencanaJangkaPanjang; +use App\Enums\SosialEkonomi\PanutanPetaniSukses; +use App\Enums\SosialEkonomi\PemahamanMutuHarga; +use App\Enums\SosialEkonomi\PengetahuanHargaHasilOlah; +use App\Enums\SosialEkonomi\PengalamanKreditKebun; +use App\Enums\SosialEkonomi\PeranDalamKelompok; +use App\Enums\SosialEkonomi\PernahBantuanNgoPerusahaan; +use App\Enums\SosialEkonomi\PernahJualHargaLebihTinggi; +use App\Enums\SosialEkonomi\PinjamanTokohAdatPanen; +use App\Enums\SosialEkonomi\PihakMembantuKonflik; +use App\Enums\SosialEkonomi\PraktikIjon; +use App\Enums\SosialEkonomi\SkorKecukupanPenghasilan; +use App\Enums\SosialEkonomi\SkorKejelasanStatusLahan; +use App\Enums\SosialEkonomi\SkorKemampuanMenabung; +use App\Enums\SosialEkonomi\SkorPeriodePaceklik; +use App\Enums\SosialEkonomi\StatusKartuTani; +use App\Enums\SosialEkonomi\StatusKepemilikanLahanSosialEkonomi; +use App\Enums\SosialEkonomi\StatusKonflik; +use App\Enums\SosialEkonomi\StatusProgramKeuanganFormal; +use App\Enums\SosialEkonomi\StatusRekeningTabungan; +use App\Enums\SosialEkonomi\TekananJualSegera; +use App\Enums\SosialEkonomi\TerdaftarKelompokTani; +use App\Enums\SosialEkonomi\UsahaMutuTambahanHarga; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; @@ -43,6 +72,60 @@ class SosialEkonomi extends Model 'pihak_membantu_konflik_nama', 'tahun_bantuan_konflik', 'status_konflik', + 'kemauan_mencoba_praktik_baru', + 'alasan_mencoba_praktik_baru', + 'hambatan_mengubah_cara_bertani', + 'pemahaman_mutu_harga', + 'contoh_pemahaman_mutu_harga', + 'pengetahuan_harga_hasil_olah', + 'pernah_jual_harga_lebih_tinggi', + 'penyebab_harga_lebih_tinggi', + 'usaha_mutu_tambahan_harga', + 'alasan_usaha_mutu_tambahan_harga', + 'panutan_petani_sukses', + 'nama_lokasi_panutan', + 'kemauan_ikut_program', + 'harapan_program', + 'orientasi_rencana_jangka_panjang', + 'rencana_jangka_panjang', + 'terdaftar_kelompok_tani', + 'nama_kelompok_tani', + 'lama_bergabung_kelompok_tahun', + 'kedekatan_sesama_anggota', + 'keaktifan_pertemuan_kelompok', + 'topik_biasa_dibahas', + 'peran_dalam_kelompok', + 'manfaat_kelompok_tani', + 'status_kartu_tani', + 'bisa_beli_pupuk_bersubsidi', + 'manfaat_lain_kartu_tani', + 'status_rekening_tabungan', + 'nama_bank', + 'pengalaman_kredit_kebun', + 'alasan_kredit_ditolak', + 'alasan_kredit_ditolak_lainnya', + 'kondisi_aset_produktif', + 'jenis_aset_produktif', + 'jenis_aset_produktif_lainnya', + 'keterangan_kondisi_aset', + 'keterlibatan_program_keuangan_formal', + 'status_program_keuangan_formal', + 'program_keuangan_formal_lainnya_nama', + 'pernah_bantuan_ngo_perusahaan', + 'detail_bantuan_ngo_perusahaan', + 'keterikatan_hutang_panen', + 'pinjaman_tokoh_adat_panen', + 'keterangan_pinjaman_tokoh_adat', + 'total_hutang_rupiah', + 'total_hutang_setara_kg_panen', + 'total_hutang_tidak_bersedia', + 'praktik_ijon', + 'tekanan_jual_segera', + 'penyebab_tekanan_jual_segera', + 'kebebasan_memilih_pembeli', + 'alasan_tidak_bebas_memilih_pembeli', + 'minat_pembeli_harga_stabil', + 'alasan_minat_pembeli_harga_stabil', 'created_by', 'updated_by', 'deleted_by', @@ -64,6 +147,40 @@ class SosialEkonomi extends Model 'pihak_membantu_konflik' => PihakMembantuKonflik::class, 'tahun_bantuan_konflik' => 'integer', 'status_konflik' => StatusKonflik::class, + 'kemauan_mencoba_praktik_baru' => KemauanMencobaPraktikBaru::class, + 'pemahaman_mutu_harga' => PemahamanMutuHarga::class, + 'pengetahuan_harga_hasil_olah' => PengetahuanHargaHasilOlah::class, + 'pernah_jual_harga_lebih_tinggi' => PernahJualHargaLebihTinggi::class, + 'usaha_mutu_tambahan_harga' => UsahaMutuTambahanHarga::class, + 'panutan_petani_sukses' => PanutanPetaniSukses::class, + 'kemauan_ikut_program' => KemauanIkutProgram::class, + 'orientasi_rencana_jangka_panjang' => OrientasiRencanaJangkaPanjang::class, + 'terdaftar_kelompok_tani' => TerdaftarKelompokTani::class, + 'lama_bergabung_kelompok_tahun' => 'integer', + 'kedekatan_sesama_anggota' => KedekatanSesamaAnggota::class, + 'keaktifan_pertemuan_kelompok' => KeaktifanPertemuanKelompok::class, + 'peran_dalam_kelompok' => PeranDalamKelompok::class, + 'manfaat_kelompok_tani' => ManfaatKelompokTani::class, + 'status_kartu_tani' => StatusKartuTani::class, + 'bisa_beli_pupuk_bersubsidi' => BisaBeliPupukBersubsidi::class, + 'status_rekening_tabungan' => StatusRekeningTabungan::class, + 'pengalaman_kredit_kebun' => PengalamanKreditKebun::class, + 'alasan_kredit_ditolak' => 'array', + 'kondisi_aset_produktif' => KondisiAsetProduktif::class, + 'jenis_aset_produktif' => 'array', + 'keterlibatan_program_keuangan_formal' => KeterlibatanProgramKeuanganFormal::class, + 'status_program_keuangan_formal' => 'array', + 'pernah_bantuan_ngo_perusahaan' => PernahBantuanNgoPerusahaan::class, + 'detail_bantuan_ngo_perusahaan' => 'array', + 'keterikatan_hutang_panen' => KeterikatanHutangPanen::class, + 'pinjaman_tokoh_adat_panen' => PinjamanTokohAdatPanen::class, + 'total_hutang_rupiah' => 'integer', + 'total_hutang_setara_kg_panen' => 'float', + 'total_hutang_tidak_bersedia' => 'boolean', + 'praktik_ijon' => PraktikIjon::class, + 'tekanan_jual_segera' => TekananJualSegera::class, + 'kebebasan_memilih_pembeli' => KebebasanMemilihPembeli::class, + 'minat_pembeli_harga_stabil' => MinatPembeliHargaStabil::class, ]; public function petani(): BelongsTo diff --git a/database/migrations/2026_07_09_000001_add_fields_to_sosial_ekonomi_table.php b/database/migrations/2026_07_09_000001_add_fields_to_sosial_ekonomi_table.php new file mode 100644 index 0000000..5276785 --- /dev/null +++ b/database/migrations/2026_07_09_000001_add_fields_to_sosial_ekonomi_table.php @@ -0,0 +1,153 @@ +tinyInteger('kemauan_mencoba_praktik_baru')->nullable()->after('status_konflik'); + $table->text('alasan_mencoba_praktik_baru')->nullable()->after('kemauan_mencoba_praktik_baru'); + $table->text('hambatan_mengubah_cara_bertani')->nullable()->after('alasan_mencoba_praktik_baru'); + + $table->tinyInteger('pemahaman_mutu_harga')->nullable()->after('hambatan_mengubah_cara_bertani'); + $table->text('contoh_pemahaman_mutu_harga')->nullable()->after('pemahaman_mutu_harga'); + $table->string('pengetahuan_harga_hasil_olah')->nullable()->after('contoh_pemahaman_mutu_harga'); + $table->string('pernah_jual_harga_lebih_tinggi')->nullable()->after('pengetahuan_harga_hasil_olah'); + $table->text('penyebab_harga_lebih_tinggi')->nullable()->after('pernah_jual_harga_lebih_tinggi'); + $table->string('usaha_mutu_tambahan_harga')->nullable()->after('penyebab_harga_lebih_tinggi'); + $table->text('alasan_usaha_mutu_tambahan_harga')->nullable()->after('usaha_mutu_tambahan_harga'); + + $table->tinyInteger('panutan_petani_sukses')->nullable()->after('alasan_usaha_mutu_tambahan_harga'); + $table->text('nama_lokasi_panutan')->nullable()->after('panutan_petani_sukses'); + + $table->tinyInteger('kemauan_ikut_program')->nullable()->after('nama_lokasi_panutan'); + $table->text('harapan_program')->nullable()->after('kemauan_ikut_program'); + + $table->tinyInteger('orientasi_rencana_jangka_panjang')->nullable()->after('harapan_program'); + $table->text('rencana_jangka_panjang')->nullable()->after('orientasi_rencana_jangka_panjang'); + + // Keanggotaan Kelompok Fields + $table->string('terdaftar_kelompok_tani')->nullable()->after('rencana_jangka_panjang'); + $table->string('nama_kelompok_tani')->nullable()->after('terdaftar_kelompok_tani'); + $table->unsignedInteger('lama_bergabung_kelompok_tahun')->nullable()->after('nama_kelompok_tani'); + $table->string('kedekatan_sesama_anggota')->nullable()->after('lama_bergabung_kelompok_tahun'); + + $table->tinyInteger('keaktifan_pertemuan_kelompok')->nullable()->after('kedekatan_sesama_anggota'); + $table->text('topik_biasa_dibahas')->nullable()->after('keaktifan_pertemuan_kelompok'); + + $table->tinyInteger('peran_dalam_kelompok')->nullable()->after('topik_biasa_dibahas'); + $table->tinyInteger('manfaat_kelompok_tani')->nullable()->after('peran_dalam_kelompok'); + + $table->string('status_kartu_tani')->nullable()->after('manfaat_kelompok_tani'); + $table->string('bisa_beli_pupuk_bersubsidi')->nullable()->after('status_kartu_tani'); + $table->text('manfaat_lain_kartu_tani')->nullable()->after('bisa_beli_pupuk_bersubsidi'); + + // Akses Keuangan Fields + $table->tinyInteger('status_rekening_tabungan')->nullable()->after('manfaat_lain_kartu_tani'); + $table->string('nama_bank')->nullable()->after('status_rekening_tabungan'); + + $table->tinyInteger('pengalaman_kredit_kebun')->nullable()->after('nama_bank'); + $table->json('alasan_kredit_ditolak')->nullable()->after('pengalaman_kredit_kebun'); + $table->string('alasan_kredit_ditolak_lainnya')->nullable()->after('alasan_kredit_ditolak'); + + $table->tinyInteger('kondisi_aset_produktif')->nullable()->after('alasan_kredit_ditolak_lainnya'); + $table->json('jenis_aset_produktif')->nullable()->after('kondisi_aset_produktif'); + $table->string('jenis_aset_produktif_lainnya')->nullable()->after('jenis_aset_produktif'); + $table->text('keterangan_kondisi_aset')->nullable()->after('jenis_aset_produktif_lainnya'); + + $table->tinyInteger('keterlibatan_program_keuangan_formal')->nullable()->after('keterangan_kondisi_aset'); + $table->json('status_program_keuangan_formal')->nullable()->after('keterlibatan_program_keuangan_formal'); + $table->string('program_keuangan_formal_lainnya_nama')->nullable()->after('status_program_keuangan_formal'); + + $table->string('pernah_bantuan_ngo_perusahaan')->nullable()->after('program_keuangan_formal_lainnya_nama'); + $table->json('detail_bantuan_ngo_perusahaan')->nullable()->after('pernah_bantuan_ngo_perusahaan'); + + // Keterikatan Hutang Fields + $table->tinyInteger('keterikatan_hutang_panen')->nullable()->after('detail_bantuan_ngo_perusahaan'); + $table->string('pinjaman_tokoh_adat_panen')->nullable()->after('keterikatan_hutang_panen'); + $table->text('keterangan_pinjaman_tokoh_adat')->nullable()->after('pinjaman_tokoh_adat_panen'); + $table->unsignedBigInteger('total_hutang_rupiah')->nullable()->after('keterangan_pinjaman_tokoh_adat'); + $table->decimal('total_hutang_setara_kg_panen', 12, 2)->nullable()->after('total_hutang_rupiah'); + $table->boolean('total_hutang_tidak_bersedia')->nullable()->after('total_hutang_setara_kg_panen'); + $table->tinyInteger('praktik_ijon')->nullable()->after('total_hutang_tidak_bersedia'); + $table->string('tekanan_jual_segera')->nullable()->after('praktik_ijon'); + $table->text('penyebab_tekanan_jual_segera')->nullable()->after('tekanan_jual_segera'); + + $table->tinyInteger('kebebasan_memilih_pembeli')->nullable()->after('penyebab_tekanan_jual_segera'); + $table->text('alasan_tidak_bebas_memilih_pembeli')->nullable()->after('kebebasan_memilih_pembeli'); + $table->string('minat_pembeli_harga_stabil')->nullable()->after('alasan_tidak_bebas_memilih_pembeli'); + $table->text('alasan_minat_pembeli_harga_stabil')->nullable()->after('minat_pembeli_harga_stabil'); + }); + } + + public function down(): void + { + Schema::table('sosial_ekonomi', function (Blueprint $table) { + $table->dropColumn([ + // Sosial Budaya + 'kemauan_mencoba_praktik_baru', + 'alasan_mencoba_praktik_baru', + 'hambatan_mengubah_cara_bertani', + 'pemahaman_mutu_harga', + 'contoh_pemahaman_mutu_harga', + 'pengetahuan_harga_hasil_olah', + 'pernah_jual_harga_lebih_tinggi', + 'penyebab_harga_lebih_tinggi', + 'usaha_mutu_tambahan_harga', + 'alasan_usaha_mutu_tambahan_harga', + 'panutan_petani_sukses', + 'nama_lokasi_panutan', + 'kemauan_ikut_program', + 'harapan_program', + 'orientasi_rencana_jangka_panjang', + 'rencana_jangka_panjang', + // Keanggotaan Kelompok + 'terdaftar_kelompok_tani', + 'nama_kelompok_tani', + 'lama_bergabung_kelompok_tahun', + 'kedekatan_sesama_anggota', + 'keaktifan_pertemuan_kelompok', + 'topik_biasa_dibahas', + 'peran_dalam_kelompok', + 'manfaat_kelompok_tani', + 'status_kartu_tani', + 'bisa_beli_pupuk_bersubsidi', + 'manfaat_lain_kartu_tani', + // Akses Keuangan + 'status_rekening_tabungan', + 'nama_bank', + 'pengalaman_kredit_kebun', + 'alasan_kredit_ditolak', + 'alasan_kredit_ditolak_lainnya', + 'kondisi_aset_produktif', + 'jenis_aset_produktif', + 'jenis_aset_produktif_lainnya', + 'keterangan_kondisi_aset', + 'keterlibatan_program_keuangan_formal', + 'status_program_keuangan_formal', + 'program_keuangan_formal_lainnya_nama', + 'pernah_bantuan_ngo_perusahaan', + 'detail_bantuan_ngo_perusahaan', + // Keterikatan Hutang + 'keterikatan_hutang_panen', + 'pinjaman_tokoh_adat_panen', + 'keterangan_pinjaman_tokoh_adat', + 'total_hutang_rupiah', + 'total_hutang_setara_kg_panen', + 'total_hutang_tidak_bersedia', + 'praktik_ijon', + 'tekanan_jual_segera', + 'penyebab_tekanan_jual_segera', + 'kebebasan_memilih_pembeli', + 'alasan_tidak_bebas_memilih_pembeli', + 'minat_pembeli_harga_stabil', + 'alasan_minat_pembeli_harga_stabil', + ]); + }); + } +}; diff --git a/resources/views/produktivitas/petani/sosial-ekonomi/edit.blade.php b/resources/views/produktivitas/petani/sosial-ekonomi/edit.blade.php index df75a1f..3ce6e62 100644 --- a/resources/views/produktivitas/petani/sosial-ekonomi/edit.blade.php +++ b/resources/views/produktivitas/petani/sosial-ekonomi/edit.blade.php @@ -20,30 +20,29 @@
@include('produktivitas.petani.header', ['petani' => $petani]) -
+ @csrf - @if($sosialEkonomi) - @method('PUT') - @endif + @method('PUT') +
Komposisi Anggota Keluarga
- + @error('jumlah_tanggungan')
{{ $message }}
@enderror
- + @error('anak_masih_sekolah')
{{ $message }}
@enderror
- + @error('yang_ikut_bekerja')
{{ $message }}
@enderror
@@ -62,6 +61,7 @@ Komoditas Pendapatan Periode + Aksi @@ -98,18 +98,23 @@
+ + + @endfor
-
-
Pendapatan dari Komoditas Lain
+
Pendapatan dari Komoditas Lainnya
@@ -117,6 +122,7 @@ + @@ -154,14 +160,19 @@ + @endfor
Komoditas Pendapatan PeriodeAksi
+ +
-
@@ -172,6 +183,7 @@ Jenis Pekerjaan Estimasi per Bulan + Aksi @@ -188,13 +200,18 @@
+ + + @endfor
-
@@ -203,7 +220,7 @@
@php $skorPeriodePaceklikValue = old('skor_periode_paceklik', $sosialEkonomi?->skor_periode_paceklik?->value); @endphp - + @foreach($periodePaceklikOptions as $option)
@@ -213,12 +230,12 @@ @error('skor_periode_paceklik')
{{ $message }}
@enderror
- + @error('bulan_paceklik')
{{ $message }}
@enderror
- + @error('sumber_penghasilan_paceklik')
{{ $message }}
@enderror
@@ -227,7 +244,7 @@
Biaya Produksi dan Tabungan
- + @php $biayaKebunValue = old('total_estimasi_biaya_kebun_per_musim', $sosialEkonomi?->total_estimasi_biaya_kebun_per_musim) @endphp
Rp @@ -237,7 +254,7 @@
@php $skorKemampuanMenabungValue = old('skor_kemampuan_menabung', $sosialEkonomi?->skor_kemampuan_menabung?->value); @endphp - + @foreach($kemampuanMenabungOptions as $option)
@@ -247,7 +264,7 @@ @error('skor_kemampuan_menabung')
{{ $message }}
@enderror
- + @php $tabunganValue = old('estimasi_tabungan_per_bulan', $sosialEkonomi?->estimasi_tabungan_per_bulan) @endphp
Rp @@ -261,7 +278,7 @@
@php $skorKecukupanPenghasilanValue = old('skor_kecukupan_penghasilan', $sosialEkonomi?->skor_kecukupan_penghasilan?->value); @endphp - + @foreach($kecukupanPenghasilanOptions as $option)
@@ -271,7 +288,7 @@ @error('skor_kecukupan_penghasilan')
{{ $message }}
@enderror
- + @error('alasan_kecukupan_penghasilan')
{{ $message }}
@enderror
@@ -280,7 +297,7 @@
Kondisi Aset & Lahan - Kejelasan Hak Kelola
- + @@ -304,7 +321,7 @@ @php $adaSertifikatValue = old('ada_sertifikat_dokumen', is_null($sosialEkonomi?->ada_sertifikat_dokumen) ? null : (int) $sosialEkonomi->ada_sertifikat_dokumen); @endphp - +
@@ -319,7 +336,7 @@ @php $adaSengketaValue = old('ada_sengketa', is_null($sosialEkonomi?->ada_sengketa) ? null : (int) $sosialEkonomi->ada_sengketa); @endphp - +
@@ -333,12 +350,12 @@
- + @error('keterangan_sengketa')
{{ $message }}
@enderror
- + @error('pihak_membantu_konflik_nama')
{{ $message }}
@enderror
- + @error('tahun_bantuan_konflik')
{{ $message }}
@enderror
- + + + +
+
+
Kemauan Mencoba Praktik Baru
+
+
+ @php $kemauanMencobaPraktikBaruValue = old('kemauan_mencoba_praktik_baru', $sosialEkonomi?->kemauan_mencoba_praktik_baru?->value); @endphp + + @foreach($kemauanMencobaPraktikBaruOptions as $option) +
+ + +
+ @endforeach + @error('kemauan_mencoba_praktik_baru')
{{ $message }}
@enderror +
+
+ + + @error('alasan_mencoba_praktik_baru')
{{ $message }}
@enderror +
+
+ +
Hambatan Mengubah Cara Bertani
+
+
+ + + @error('hambatan_mengubah_cara_bertani')
{{ $message }}
@enderror +
+
+ +
Pemahaman Mutu & Harga
+
+
+ @php $pemahamanMutuHargaValue = old('pemahaman_mutu_harga', $sosialEkonomi?->pemahaman_mutu_harga?->value); @endphp + + @foreach($pemahamanMutuHargaOptions as $option) +
+ + +
+ @endforeach + @error('pemahaman_mutu_harga')
{{ $message }}
@enderror +
+
+ + + @error('contoh_pemahaman_mutu_harga')
{{ $message }}
@enderror +
+
+ + + @error('pengetahuan_harga_hasil_olah')
{{ $message }}
@enderror +
+
+ + + @error('pernah_jual_harga_lebih_tinggi')
{{ $message }}
@enderror +
+
+ + + @error('penyebab_harga_lebih_tinggi')
{{ $message }}
@enderror +
+
+ + + @error('usaha_mutu_tambahan_harga')
{{ $message }}
@enderror +
+
+ + + @error('alasan_usaha_mutu_tambahan_harga')
{{ $message }}
@enderror +
+
+ +
Panutan di Sekitar Petani
+
+
+ @php $panutanPetaniSuksesValue = old('panutan_petani_sukses', $sosialEkonomi?->panutan_petani_sukses?->value); @endphp + + @foreach($panutanPetaniSuksesOptions as $option) +
+ + +
+ @endforeach + @error('panutan_petani_sukses')
{{ $message }}
@enderror +
+
+ + + @error('nama_lokasi_panutan')
{{ $message }}
@enderror +
+
+ +
Kemauan Terlibat dalam Program
+
+
+ @php $kemauanIkutProgramValue = old('kemauan_ikut_program', $sosialEkonomi?->kemauan_ikut_program?->value); @endphp + + @foreach($kemauanIkutProgramOptions as $option) +
+ + +
+ @endforeach + @error('kemauan_ikut_program')
{{ $message }}
@enderror +
+
+ + + @error('harapan_program')
{{ $message }}
@enderror +
+
+ +
Rencana & Harapan Jangka Panjang
+
+
+ @php $orientasiRencanaJangkaPanjangValue = old('orientasi_rencana_jangka_panjang', $sosialEkonomi?->orientasi_rencana_jangka_panjang?->value); @endphp + + @foreach($orientasiRencanaJangkaPanjangOptions as $option) +
+ + +
+ @endforeach + @error('orientasi_rencana_jangka_panjang')
{{ $message }}
@enderror +
+
+ + + @error('rencana_jangka_panjang')
{{ $message }}
@enderror +
+
+ +
+ +
+
+
+ + +
+ @csrf + @method('PUT') + + + + +
+
+
Status Keanggotaan
+
+
+ @php $terdaftarKelompokTaniValue = old('terdaftar_kelompok_tani', $sosialEkonomi?->terdaftar_kelompok_tani?->value); @endphp + + @foreach($terdaftarKelompokTaniOptions as $option) +
+ + +
+ @endforeach + @error('terdaftar_kelompok_tani')
{{ $message }}
@enderror +
+
+ + + @error('nama_kelompok_tani')
{{ $message }}
@enderror +
+
+ + + @error('lama_bergabung_kelompok_tahun')
{{ $message }}
@enderror +
+
+ + + @error('kedekatan_sesama_anggota')
{{ $message }}
@enderror +
+
+ +
Keaktifan dalam Kelompok
+
+
+ @php $keaktifanPertemuanKelompokValue = old('keaktifan_pertemuan_kelompok', $sosialEkonomi?->keaktifan_pertemuan_kelompok?->value); @endphp + + @foreach($keaktifanPertemuanKelompokOptions as $option) +
+ + +
+ @endforeach + @error('keaktifan_pertemuan_kelompok')
{{ $message }}
@enderror +
+
+ + + @error('topik_biasa_dibahas')
{{ $message }}
@enderror +
+
+ +
Peran dalam Kelompok
+
+
+ @php $peranDalamKelompokValue = old('peran_dalam_kelompok', $sosialEkonomi?->peran_dalam_kelompok?->value); @endphp + + @foreach($peranDalamKelompokOptions as $option) +
+ + +
+ @endforeach + @error('peran_dalam_kelompok')
{{ $message }}
@enderror +
+
+ @php $manfaatKelompokTaniValue = old('manfaat_kelompok_tani', $sosialEkonomi?->manfaat_kelompok_tani?->value); @endphp + + @foreach($manfaatKelompokTaniOptions as $option) +
+ + +
+ @endforeach + @error('manfaat_kelompok_tani')
{{ $message }}
@enderror +
+
+ +
Kartu Tani
+
+
+ + + @error('status_kartu_tani')
{{ $message }}
@enderror +
+
+ + + @error('bisa_beli_pupuk_bersubsidi')
{{ $message }}
@enderror +
+
+ + + @error('manfaat_lain_kartu_tani')
{{ $message }}
@enderror +
+
+ +
+ +
+
+
+
+ +
+ @csrf + @method('PUT') + + + + +
+
+
Kepemilikan Akses ke Lembaga Keuangan Formal
+
+
+ @php $statusRekeningTabunganValue = old('status_rekening_tabungan', $sosialEkonomi?->status_rekening_tabungan?->value); @endphp + + @foreach($statusRekeningTabunganOptions as $option) +
+ + +
+ @endforeach + @error('status_rekening_tabungan')
{{ $message }}
@enderror +
+
+ + + @error('nama_bank')
{{ $message }}
@enderror +
+
+ +
Pengalaman Pengajuan Kredit
+
+
+ @php $pengalamanKreditKebunValue = old('pengalaman_kredit_kebun', $sosialEkonomi?->pengalaman_kredit_kebun?->value); @endphp + + @foreach($pengalamanKreditKebunOptions as $option) +
+ + +
+ @endforeach + @error('pengalaman_kredit_kebun')
{{ $message }}
@enderror +
+
+ @php + $alasanKreditValues = old('alasan_kredit_ditolak', $sosialEkonomi?->alasan_kredit_ditolak ?? []); + $alasanKreditValues = is_array($alasanKreditValues) ? $alasanKreditValues : []; + @endphp + + @foreach($alasanKreditDitolakOptions as $option) +
+ + +
+ @endforeach + @error('alasan_kredit_ditolak')
{{ $message }}
@enderror + + @error('alasan_kredit_ditolak_lainnya')
{{ $message }}
@enderror +
+
+ +
Kepemilikan Aset Produktif
+
+
+ @php $kondisiAsetProduktifValue = old('kondisi_aset_produktif', $sosialEkonomi?->kondisi_aset_produktif?->value); @endphp + + @foreach($kondisiAsetProduktifOptions as $option) +
+ + +
+ @endforeach + @error('kondisi_aset_produktif')
{{ $message }}
@enderror +
+
+ @php + $jenisAsetValues = old('jenis_aset_produktif', $sosialEkonomi?->jenis_aset_produktif ?? []); + $jenisAsetValues = is_array($jenisAsetValues) ? $jenisAsetValues : []; + @endphp + + @foreach($jenisAsetProduktifOptions as $option) +
+ + +
+ @endforeach + @error('jenis_aset_produktif')
{{ $message }}
@enderror + + @error('jenis_aset_produktif_lainnya')
{{ $message }}
@enderror +
+
+ + + @error('keterangan_kondisi_aset')
{{ $message }}
@enderror +
+
+ +
Akses terhadap Program Pelayanan Keuangan Formal
+
+
+ @php $keterlibatanProgramKeuanganFormalValue = old('keterlibatan_program_keuangan_formal', $sosialEkonomi?->keterlibatan_program_keuangan_formal?->value); @endphp + + @foreach($keterlibatanProgramKeuanganFormalOptions as $option) +
+ + +
+ @endforeach + @error('keterlibatan_program_keuangan_formal')
{{ $message }}
@enderror +
+
+ @php + $statusProgramValues = old('status_program_keuangan_formal', $sosialEkonomi?->status_program_keuangan_formal ?? []); + $statusProgramValues = is_array($statusProgramValues) ? $statusProgramValues : []; + @endphp +
+ + + + + @foreach($statusProgramKeuanganFormalOptions as $statusOption) + + @endforeach + + + + @foreach($programKeuanganFormalRows as $programKey => $programLabel) + + + @foreach($statusProgramKeuanganFormalOptions as $statusOption) + + @endforeach + + @endforeach + +
Program{{ $statusOption['label'] }}
+ @if($programKey === 'lainnya') + + @error('program_keuangan_formal_lainnya_nama')
{{ $message }}
@enderror + @else + {{ $programLabel }} + @endif +
+
+ +
+
+
+ @error('status_program_keuangan_formal')
{{ $message }}
@enderror +
+
+ +
Akses Terhadap Bantuan
+
+
+ @php $pernahBantuanNgoPerusahaanValue = old('pernah_bantuan_ngo_perusahaan', $sosialEkonomi?->pernah_bantuan_ngo_perusahaan?->value); @endphp + + @foreach($pernahBantuanNgoPerusahaanOptions as $option) +
+ + +
+ @endforeach + @error('pernah_bantuan_ngo_perusahaan')
{{ $message }}
@enderror +
+
+ @php + $detailBantuanValues = old('detail_bantuan_ngo_perusahaan', $sosialEkonomi?->detail_bantuan_ngo_perusahaan ?? []); + $detailBantuanValues = is_array($detailBantuanValues) ? $detailBantuanValues : []; + @endphp +
+ + + + + + + + + + + @for($i = 0; $i < 2; $i++) + + + + + + + @endfor + +
Nama LembagaBentuk BantuanFrekuensiTahun Terakhir
+ + @error("detail_bantuan_ngo_perusahaan.$i.nama_lembaga")
{{ $message }}
@enderror +
+ + @error("detail_bantuan_ngo_perusahaan.$i.bentuk_bantuan")
{{ $message }}
@enderror +
+
+ + kali/tahun + @error("detail_bantuan_ngo_perusahaan.$i.frekuensi")
{{ $message }}
@enderror +
+
+ + @error("detail_bantuan_ngo_perusahaan.$i.tahun_terakhir")
{{ $message }}
@enderror +
+
+
+
+ +
+ +
+
+
+
+ +
+ @csrf + @method('PUT') + + + + +
+
+
Keterikatan hutang
+
+
+ @php $keterikatanHutangPanenValue = old('keterikatan_hutang_panen', $sosialEkonomi?->keterikatan_hutang_panen?->value); @endphp + + @foreach($keterikatanHutangPanenOptions as $option) +
+ + +
+ @endforeach + @error('keterikatan_hutang_panen')
{{ $message }}
@enderror +
+
+ @php $pinjamanTokohAdatPanenValue = old('pinjaman_tokoh_adat_panen', $sosialEkonomi?->pinjaman_tokoh_adat_panen?->value); @endphp + + @foreach($pinjamanTokohAdatPanenOptions as $option) +
+ + +
+ @endforeach + @error('pinjaman_tokoh_adat_panen')
{{ $message }}
@enderror + + @error('keterangan_pinjaman_tokoh_adat')
{{ $message }}
@enderror +
+
+ + @php $totalHutangValue = old('total_hutang_rupiah', $sosialEkonomi?->total_hutang_rupiah) @endphp +
+ Rp + + @error('total_hutang_rupiah')
{{ $message }}
@enderror +
+
+
+ +
+ + kg + @error('total_hutang_setara_kg_panen')
{{ $message }}
@enderror +
+
+
+
+ total_hutang_tidak_bersedia) ? 'checked' : '' }}> + +
+
+
+ @php $praktikIjonValue = old('praktik_ijon', $sosialEkonomi?->praktik_ijon?->value); @endphp + + @foreach($praktikIjonOptions as $option) +
+ + +
+ @endforeach + @error('praktik_ijon')
{{ $message }}
@enderror +
+
+ + @foreach($tekananJualSegeraOptions as $option) +
+ tekanan_jual_segera?->value) === $option['value'] ? 'checked' : '' }}> + +
+ @endforeach + @error('tekanan_jual_segera')
{{ $message }}
@enderror + + @error('penyebab_tekanan_jual_segera')
{{ $message }}
@enderror +
+
+ +
Persepsi Kebebasan Menjual Hasil Panen
+
+
+ @php $kebebasanMemilihPembeliValue = old('kebebasan_memilih_pembeli', $sosialEkonomi?->kebebasan_memilih_pembeli?->value); @endphp + + @foreach($kebebasanMemilihPembeliOptions as $option) +
+ + +
+ @endforeach + @error('kebebasan_memilih_pembeli')
{{ $message }}
@enderror +
+
+ + + @error('alasan_tidak_bebas_memilih_pembeli')
{{ $message }}
@enderror +
+
+ + + @error('minat_pembeli_harga_stabil')
{{ $message }}
@enderror +
+
+ + + @error('alasan_minat_pembeli_harga_stabil')
{{ $message }}
@enderror +
+
+ +
+
@@ -387,8 +1049,20 @@ 'use strict'; $(document).ready(function () { const pihakMembantuTanpaBantuan = @json($pihakMembantuTanpaBantuanValue); + const pernahJualHargaLebihTinggiPernah = @json($pernahJualHargaLebihTinggiPernahValue); + const panutanPetaniSuksesTidakAda = String(@json($panutanPetaniSuksesTidakAdaValue)); + const terdaftarKelompokTaniYa = @json($terdaftarKelompokTaniYaValue); + const statusRekeningTidakPunya = String(@json($statusRekeningTidakPunyaValue)); + const pengalamanKreditPerluAlasan = @json($pengalamanKreditPerluAlasanValues).map(String); + const alasanKreditLainnya = @json($alasanKreditLainnyaValue); + const kondisiAsetTidakAda = String(@json($kondisiAsetTidakAdaValue)); + const jenisAsetLainnya = @json($jenisAsetLainnyaValue); + const pernahBantuanNgoPerusahaanPernah = @json($pernahBantuanNgoPerusahaanPernahValue); + const pinjamanTokohAdatAda = @json($pinjamanTokohAdatAdaValue); + const tekananJualSegeraAda = @json($tekananJualSegeraAdaValue); + const kebebasanMemilihPembeliCukupBebas = Number(@json($kebebasanMemilihPembeliCukupBebasValue)); - $('#status-kepemilikan-lahan, #pihak-membantu, #status-konflik, .sosial-ekonomi-komoditas').select2(); + $('#status-kepemilikan-lahan, #pihak-membantu, #status-konflik, #pengetahuan-harga-hasil-olah, #pernah-jual-harga-lebih-tinggi, #usaha-mutu-tambahan-harga, #kedekatan-sesama-anggota, #status-kartu-tani, #bisa-beli-pupuk-bersubsidi, #minat-pembeli-stabil, .sosial-ekonomi-komoditas').select2(); function syncKomoditasLainnyaOptions() { const selectedUtama = $('.sosial-ekonomi-komoditas-utama') @@ -428,6 +1102,78 @@ return Boolean(triggerValue); } + function isPendapatanKomoditasGroup(group) { + return group === 'komoditas-utama' || group === 'komoditas-lainnya'; + } + + function clearPendapatanRowValidation($row) { + $row.find('.is-invalid').removeClass('is-invalid'); + $row.find('.select2-selection').removeClass('is-invalid'); + $row.find('.pendapatan-row-feedback').remove(); + } + + function showPendapatanRowValidation($element, message) { + const $cell = $element.closest('td'); + + if ($cell.find('.pendapatan-row-feedback').length) { + return; + } + + $cell.append(`
${message}
`); + } + + function validatePendapatanKomoditasRow($row) { + const $komoditas = $row.find('.sosial-ekonomi-komoditas').first(); + const $pendapatan = $row.find('.currency-input').first(); + const hasKomoditas = Boolean($komoditas.val()); + const hasPendapatan = Boolean(onlyDigits($pendapatan.val())); + const hasPeriode = $row.find('input[type="radio"]:checked').length > 0; + + clearPendapatanRowValidation($row); + $komoditas.toggleClass('is-invalid', !hasKomoditas); + $komoditas.next('.select2').find('.select2-selection').toggleClass('is-invalid', !hasKomoditas); + $pendapatan.toggleClass('is-invalid', !hasPendapatan); + $row.find('input[type="radio"]').toggleClass('is-invalid', !hasPeriode); + + if (!hasKomoditas) { + showPendapatanRowValidation($komoditas, 'Komoditas wajib diisi.'); + } + + if (!hasPendapatan) { + showPendapatanRowValidation($pendapatan, 'Pendapatan wajib diisi.'); + } + + if (!hasPeriode) { + showPendapatanRowValidation($row.find('input[type="radio"]').first(), 'Periode wajib dipilih.'); + } + + return hasKomoditas && hasPendapatan && hasPeriode; + } + + function canAddPendapatanRow(group) { + if (!isPendapatanKomoditasGroup(group)) { + return true; + } + + let isValid = true; + let $firstInvalidRow = null; + + $('.pendapatan-row[data-group="' + group + '"]:visible').each(function () { + const $row = $(this); + + if (!validatePendapatanKomoditasRow($row)) { + isValid = false; + $firstInvalidRow = $firstInvalidRow || $row; + } + }); + + if ($firstInvalidRow) { + $firstInvalidRow.find('.is-invalid').first().trigger('focus'); + } + + return isValid; + } + function setupPendapatanRows(group) { const $rows = $('.pendapatan-row[data-group="' + group + '"]'); @@ -470,6 +1216,10 @@ } function showNextPendapatanRow(group) { + if (!canAddPendapatanRow(group)) { + return; + } + const visibleRows = $('.pendapatan-row[data-group="' + group + '"]:visible').length; const maxRows = maxPendapatanRows(group); @@ -570,6 +1320,11 @@
+ + + `); } @@ -589,6 +1344,11 @@
+ + + `); } @@ -604,6 +1364,153 @@ } } + function syncPernahJualHargaLebihTinggiFields() { + const isPernah = $('#pernah-jual-harga-lebih-tinggi').val() === pernahJualHargaLebihTinggiPernah; + const $field = $('#penyebab-harga-lebih-tinggi'); + + $field.prop('disabled', !isPernah); + + if (!isPernah) { + $field.val(''); + } + } + + function syncPanutanFields() { + const isTidakAda = $('input[name="panutan_petani_sukses"]:checked').val() === panutanPetaniSuksesTidakAda; + const $field = $('#nama-lokasi-panutan'); + + $field.prop('disabled', isTidakAda); + + if (isTidakAda) { + $field.val(''); + } + } + + function syncTerdaftarKelompokFields() { + const isTerdaftar = $('input[name="terdaftar_kelompok_tani"]:checked').val() === terdaftarKelompokTaniYa; + const $fields = $('#nama-kelompok-tani, #lama-bergabung-kelompok, #kedekatan-sesama-anggota'); + + $fields.prop('disabled', !isTerdaftar); + + if (!isTerdaftar) { + $fields.val(''); + $('#kedekatan-sesama-anggota').trigger('change.select2'); + } + } + + function syncStatusRekeningFields() { + const isTidakPunya = $('input[name="status_rekening_tabungan"]:checked').val() === statusRekeningTidakPunya; + const $field = $('#nama-bank'); + + $field.prop('disabled', isTidakPunya); + + if (isTidakPunya) { + $field.val(''); + } + } + + function syncPengalamanKreditFields() { + const perluAlasan = pengalamanKreditPerluAlasan.includes($('input[name="pengalaman_kredit_kebun"]:checked').val()); + const $fields = $('input[name="alasan_kredit_ditolak[]"], #alasan-kredit-lainnya'); + + $fields.prop('disabled', !perluAlasan); + + if (!perluAlasan) { + $('input[name="alasan_kredit_ditolak[]"]').prop('checked', false); + $('#alasan-kredit-lainnya').val(''); + } + + syncAlasanKreditLainnyaField(); + } + + function syncAlasanKreditLainnyaField() { + const isLainnya = $('input[name="alasan_kredit_ditolak[]"][value="' + alasanKreditLainnya + '"]').is(':checked'); + $('#alasan-kredit-lainnya').prop('disabled', !isLainnya); + + if (!isLainnya) { + $('#alasan-kredit-lainnya').val(''); + } + } + + function syncAsetProduktifFields() { + const isTidakAda = $('input[name="kondisi_aset_produktif"]:checked').val() === kondisiAsetTidakAda; + const $fields = $('input[name="jenis_aset_produktif[]"], #jenis-aset-lainnya, #keterangan-kondisi-aset'); + + $fields.prop('disabled', isTidakAda); + + if (isTidakAda) { + $('input[name="jenis_aset_produktif[]"]').prop('checked', false); + $('#jenis-aset-lainnya, #keterangan-kondisi-aset').val(''); + } + + syncJenisAsetLainnyaField(); + } + + function syncJenisAsetLainnyaField() { + const isLainnya = $('input[name="jenis_aset_produktif[]"][value="' + jenisAsetLainnya + '"]').is(':checked'); + $('#jenis-aset-lainnya').prop('disabled', !isLainnya); + + if (!isLainnya) { + $('#jenis-aset-lainnya').val(''); + } + } + + function syncBantuanNgoFields() { + const isPernah = $('input[name="pernah_bantuan_ngo_perusahaan"]:checked').val() === pernahBantuanNgoPerusahaanPernah; + const $fields = $('[name^="detail_bantuan_ngo_perusahaan["]'); + + $fields.prop('disabled', !isPernah); + + if (!isPernah) { + $fields.val(''); + } + } + + function syncPinjamanTokohAdatFields() { + const isAda = $('input[name="pinjaman_tokoh_adat_panen"]:checked').val() === pinjamanTokohAdatAda; + const $field = $('#keterangan-pinjaman-tokoh-adat'); + + $field.prop('disabled', !isAda); + + if (!isAda) { + $field.val(''); + } + } + + function syncTotalHutangFields() { + const isTidakBersedia = $('#total-hutang-tidak-bersedia').is(':checked'); + const $fields = $('#total-hutang-rupiah, #total-hutang-kg'); + + $fields.prop('disabled', isTidakBersedia); + + if (isTidakBersedia) { + $fields.val(''); + } + } + + function syncTekananJualFields() { + const isAda = $('input[name="tekanan_jual_segera"]:checked').val() === tekananJualSegeraAda; + const $field = $('#penyebab-tekanan-jual'); + + $field.prop('disabled', !isAda); + + if (!isAda) { + $field.val(''); + } + } + + function syncKebebasanPembeliFields() { + const value = Number($('input[name="kebebasan_memilih_pembeli"]:checked').val() || 0); + const needsReason = value > 0 && value < kebebasanMemilihPembeliCukupBebas; + const $field = $('#alasan-tidak-bebas'); + + $field.prop('disabled', !needsReason); + + if (!needsReason) { + $field.val(''); + } + } + function onlyDigits(value) { return String(value || '').replace(/\D/g, ''); } @@ -614,10 +1521,31 @@ return digits.replace(/\B(?=(\d{3})+(?!\d))/g, '.'); } + function clearPendapatanRow($row) { + $row.find('select').val('').trigger('change'); + $row.find('input[type="text"], input[type="number"]').val(''); + $row.find('input[type="radio"], input[type="checkbox"]').prop('checked', false); + clearPendapatanRowValidation($row); + } + $(document).on('change', '.sosial-ekonomi-komoditas-utama', syncKomoditasLainnyaOptions); + $(document).on('input change', '.pendapatan-row input, .pendapatan-row select', function () { + clearPendapatanRowValidation($(this).closest('.pendapatan-row')); + }); $('.add-pendapatan-row').on('click', function () { showNextPendapatanRow($(this).data('group')); }); + $(document).on('click', '.delete-pendapatan-row', function () { + const $row = $(this).closest('.pendapatan-row'); + const group = $row.data('group'); + + clearPendapatanRow($row); + if (Number($row.data('row-index')) !== 0) { + $row.addClass('d-none'); + } + syncKomoditasLainnyaOptions(); + syncAddPendapatanButton(group); + }); $(document).on('input', '.currency-input', function () { const cursorAtEnd = this.selectionStart === this.value.length; this.value = formatRupiah(this.value); @@ -632,9 +1560,33 @@ }); }); $('#pihak-membantu').on('change', syncPihakMembantuFields); + $('#pernah-jual-harga-lebih-tinggi').on('change', syncPernahJualHargaLebihTinggiFields); + $('input[name="panutan_petani_sukses"]').on('change', syncPanutanFields); + $('input[name="terdaftar_kelompok_tani"]').on('change', syncTerdaftarKelompokFields); + $('input[name="status_rekening_tabungan"]').on('change', syncStatusRekeningFields); + $('input[name="pengalaman_kredit_kebun"]').on('change', syncPengalamanKreditFields); + $('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="pernah_bantuan_ngo_perusahaan"]').on('change', syncBantuanNgoFields); + $('input[name="pinjaman_tokoh_adat_panen"]').on('change', syncPinjamanTokohAdatFields); + $('#total-hutang-tidak-bersedia').on('change', syncTotalHutangFields); + $('input[name="tekanan_jual_segera"]').on('change', syncTekananJualFields); + $('input[name="kebebasan_memilih_pembeli"]').on('change', syncKebebasanPembeliFields); syncKomoditasLainnyaOptions(); setupAllPendapatanRows(); syncPihakMembantuFields(); + syncPernahJualHargaLebihTinggiFields(); + syncPanutanFields(); + syncTerdaftarKelompokFields(); + syncStatusRekeningFields(); + syncPengalamanKreditFields(); + syncAsetProduktifFields(); + syncBantuanNgoFields(); + syncPinjamanTokohAdatFields(); + syncTotalHutangFields(); + syncTekananJualFields(); + syncKebebasanPembeliFields(); }); @endpush diff --git a/resources/views/produktivitas/petani/sosial-ekonomi/index.blade.php b/resources/views/produktivitas/petani/sosial-ekonomi/index.blade.php index df75a1f..b709b03 100644 --- a/resources/views/produktivitas/petani/sosial-ekonomi/index.blade.php +++ b/resources/views/produktivitas/petani/sosial-ekonomi/index.blade.php @@ -20,30 +20,28 @@
@include('produktivitas.petani.header', ['petani' => $petani]) - + @csrf - @if($sosialEkonomi) - @method('PUT') - @endif +
Komposisi Anggota Keluarga
- + @error('jumlah_tanggungan')
{{ $message }}
@enderror
- + @error('anak_masih_sekolah')
{{ $message }}
@enderror
- + @error('yang_ikut_bekerja')
{{ $message }}
@enderror
@@ -62,6 +60,7 @@ Komoditas Pendapatan Periode + Aksi @@ -98,18 +97,23 @@
+ + + @endfor
-
-
Pendapatan dari Komoditas Lain
+
Pendapatan dari Komoditas Lainnya
@@ -117,6 +121,7 @@ + @@ -154,14 +159,19 @@ + @endfor
Komoditas Pendapatan PeriodeAksi
+ +
-
@@ -172,6 +182,7 @@ Jenis Pekerjaan Estimasi per Bulan + Aksi @@ -188,13 +199,18 @@
+ + + @endfor
-
@@ -203,7 +219,7 @@
@php $skorPeriodePaceklikValue = old('skor_periode_paceklik', $sosialEkonomi?->skor_periode_paceklik?->value); @endphp - + @foreach($periodePaceklikOptions as $option)
@@ -213,12 +229,12 @@ @error('skor_periode_paceklik')
{{ $message }}
@enderror
- + @error('bulan_paceklik')
{{ $message }}
@enderror
- + @error('sumber_penghasilan_paceklik')
{{ $message }}
@enderror
@@ -227,7 +243,7 @@
Biaya Produksi dan Tabungan
- + @php $biayaKebunValue = old('total_estimasi_biaya_kebun_per_musim', $sosialEkonomi?->total_estimasi_biaya_kebun_per_musim) @endphp
Rp @@ -237,7 +253,7 @@
@php $skorKemampuanMenabungValue = old('skor_kemampuan_menabung', $sosialEkonomi?->skor_kemampuan_menabung?->value); @endphp - + @foreach($kemampuanMenabungOptions as $option)
@@ -247,7 +263,7 @@ @error('skor_kemampuan_menabung')
{{ $message }}
@enderror
- + @php $tabunganValue = old('estimasi_tabungan_per_bulan', $sosialEkonomi?->estimasi_tabungan_per_bulan) @endphp
Rp @@ -261,7 +277,7 @@
@php $skorKecukupanPenghasilanValue = old('skor_kecukupan_penghasilan', $sosialEkonomi?->skor_kecukupan_penghasilan?->value); @endphp - + @foreach($kecukupanPenghasilanOptions as $option)
@@ -271,7 +287,7 @@ @error('skor_kecukupan_penghasilan')
{{ $message }}
@enderror
- + @error('alasan_kecukupan_penghasilan')
{{ $message }}
@enderror
@@ -280,7 +296,7 @@
Kondisi Aset & Lahan - Kejelasan Hak Kelola
- + @@ -304,7 +320,7 @@ @php $adaSertifikatValue = old('ada_sertifikat_dokumen', is_null($sosialEkonomi?->ada_sertifikat_dokumen) ? null : (int) $sosialEkonomi->ada_sertifikat_dokumen); @endphp - +
@@ -319,7 +335,7 @@ @php $adaSengketaValue = old('ada_sengketa', is_null($sosialEkonomi?->ada_sengketa) ? null : (int) $sosialEkonomi->ada_sengketa); @endphp - +
@@ -333,12 +349,12 @@
- + @error('keterangan_sengketa')
{{ $message }}
@enderror
- + @error('pihak_membantu_konflik_nama')
{{ $message }}
@enderror
- + @error('tahun_bantuan_konflik')
{{ $message }}
@enderror
- + + + +
+
+
Kemauan Mencoba Praktik Baru
+
+
+ @php $kemauanMencobaPraktikBaruValue = old('kemauan_mencoba_praktik_baru', $sosialEkonomi?->kemauan_mencoba_praktik_baru?->value); @endphp + + @foreach($kemauanMencobaPraktikBaruOptions as $option) +
+ + +
+ @endforeach + @error('kemauan_mencoba_praktik_baru')
{{ $message }}
@enderror +
+
+ + + @error('alasan_mencoba_praktik_baru')
{{ $message }}
@enderror +
+
+ +
Hambatan Mengubah Cara Bertani
+
+
+ + + @error('hambatan_mengubah_cara_bertani')
{{ $message }}
@enderror +
+
+ +
Pemahaman Mutu & Harga
+
+
+ @php $pemahamanMutuHargaValue = old('pemahaman_mutu_harga', $sosialEkonomi?->pemahaman_mutu_harga?->value); @endphp + + @foreach($pemahamanMutuHargaOptions as $option) +
+ + +
+ @endforeach + @error('pemahaman_mutu_harga')
{{ $message }}
@enderror +
+
+ + + @error('contoh_pemahaman_mutu_harga')
{{ $message }}
@enderror +
+
+ + + @error('pengetahuan_harga_hasil_olah')
{{ $message }}
@enderror +
+
+ + + @error('pernah_jual_harga_lebih_tinggi')
{{ $message }}
@enderror +
+
+ + + @error('penyebab_harga_lebih_tinggi')
{{ $message }}
@enderror +
+
+ + + @error('usaha_mutu_tambahan_harga')
{{ $message }}
@enderror +
+
+ + + @error('alasan_usaha_mutu_tambahan_harga')
{{ $message }}
@enderror +
+
+ +
Panutan di Sekitar Petani
+
+
+ @php $panutanPetaniSuksesValue = old('panutan_petani_sukses', $sosialEkonomi?->panutan_petani_sukses?->value); @endphp + + @foreach($panutanPetaniSuksesOptions as $option) +
+ + +
+ @endforeach + @error('panutan_petani_sukses')
{{ $message }}
@enderror +
+
+ + + @error('nama_lokasi_panutan')
{{ $message }}
@enderror +
+
+ +
Kemauan Terlibat dalam Program
+
+
+ @php $kemauanIkutProgramValue = old('kemauan_ikut_program', $sosialEkonomi?->kemauan_ikut_program?->value); @endphp + + @foreach($kemauanIkutProgramOptions as $option) +
+ + +
+ @endforeach + @error('kemauan_ikut_program')
{{ $message }}
@enderror +
+
+ + + @error('harapan_program')
{{ $message }}
@enderror +
+
+ +
Rencana & Harapan Jangka Panjang
+
+
+ @php $orientasiRencanaJangkaPanjangValue = old('orientasi_rencana_jangka_panjang', $sosialEkonomi?->orientasi_rencana_jangka_panjang?->value); @endphp + + @foreach($orientasiRencanaJangkaPanjangOptions as $option) +
+ + +
+ @endforeach + @error('orientasi_rencana_jangka_panjang')
{{ $message }}
@enderror +
+
+ + + @error('rencana_jangka_panjang')
{{ $message }}
@enderror +
+
+ +
+ +
+
+
+ + +
+ @csrf + + + + +
+
+
Status Keanggotaan
+
+
+ @php $terdaftarKelompokTaniValue = old('terdaftar_kelompok_tani', $sosialEkonomi?->terdaftar_kelompok_tani?->value); @endphp + + @foreach($terdaftarKelompokTaniOptions as $option) +
+ + +
+ @endforeach + @error('terdaftar_kelompok_tani')
{{ $message }}
@enderror +
+
+ + + @error('nama_kelompok_tani')
{{ $message }}
@enderror +
+
+ + + @error('lama_bergabung_kelompok_tahun')
{{ $message }}
@enderror +
+
+ + + @error('kedekatan_sesama_anggota')
{{ $message }}
@enderror +
+
+ +
Keaktifan dalam Kelompok
+
+
+ @php $keaktifanPertemuanKelompokValue = old('keaktifan_pertemuan_kelompok', $sosialEkonomi?->keaktifan_pertemuan_kelompok?->value); @endphp + + @foreach($keaktifanPertemuanKelompokOptions as $option) +
+ + +
+ @endforeach + @error('keaktifan_pertemuan_kelompok')
{{ $message }}
@enderror +
+
+ + + @error('topik_biasa_dibahas')
{{ $message }}
@enderror +
+
+ +
Peran dalam Kelompok
+
+
+ @php $peranDalamKelompokValue = old('peran_dalam_kelompok', $sosialEkonomi?->peran_dalam_kelompok?->value); @endphp + + @foreach($peranDalamKelompokOptions as $option) +
+ + +
+ @endforeach + @error('peran_dalam_kelompok')
{{ $message }}
@enderror +
+
+ @php $manfaatKelompokTaniValue = old('manfaat_kelompok_tani', $sosialEkonomi?->manfaat_kelompok_tani?->value); @endphp + + @foreach($manfaatKelompokTaniOptions as $option) +
+ + +
+ @endforeach + @error('manfaat_kelompok_tani')
{{ $message }}
@enderror +
+
+ +
Kartu Tani
+
+
+ + + @error('status_kartu_tani')
{{ $message }}
@enderror +
+
+ + + @error('bisa_beli_pupuk_bersubsidi')
{{ $message }}
@enderror +
+
+ + + @error('manfaat_lain_kartu_tani')
{{ $message }}
@enderror +
+
+ +
+ +
+
+
+
+ +
+ @csrf + + + + +
+
+
Kepemilikan Akses ke Lembaga Keuangan Formal
+
+
+ @php $statusRekeningTabunganValue = old('status_rekening_tabungan', $sosialEkonomi?->status_rekening_tabungan?->value); @endphp + + @foreach($statusRekeningTabunganOptions as $option) +
+ + +
+ @endforeach + @error('status_rekening_tabungan')
{{ $message }}
@enderror +
+
+ + + @error('nama_bank')
{{ $message }}
@enderror +
+
+ +
Pengalaman Pengajuan Kredit
+
+
+ @php $pengalamanKreditKebunValue = old('pengalaman_kredit_kebun', $sosialEkonomi?->pengalaman_kredit_kebun?->value); @endphp + + @foreach($pengalamanKreditKebunOptions as $option) +
+ + +
+ @endforeach + @error('pengalaman_kredit_kebun')
{{ $message }}
@enderror +
+
+ @php + $alasanKreditValues = old('alasan_kredit_ditolak', $sosialEkonomi?->alasan_kredit_ditolak ?? []); + $alasanKreditValues = is_array($alasanKreditValues) ? $alasanKreditValues : []; + @endphp + + @foreach($alasanKreditDitolakOptions as $option) +
+ + +
+ @endforeach + @error('alasan_kredit_ditolak')
{{ $message }}
@enderror + + @error('alasan_kredit_ditolak_lainnya')
{{ $message }}
@enderror +
+
+ +
Kepemilikan Aset Produktif
+
+
+ @php $kondisiAsetProduktifValue = old('kondisi_aset_produktif', $sosialEkonomi?->kondisi_aset_produktif?->value); @endphp + + @foreach($kondisiAsetProduktifOptions as $option) +
+ + +
+ @endforeach + @error('kondisi_aset_produktif')
{{ $message }}
@enderror +
+
+ @php + $jenisAsetValues = old('jenis_aset_produktif', $sosialEkonomi?->jenis_aset_produktif ?? []); + $jenisAsetValues = is_array($jenisAsetValues) ? $jenisAsetValues : []; + @endphp + + @foreach($jenisAsetProduktifOptions as $option) +
+ + +
+ @endforeach + @error('jenis_aset_produktif')
{{ $message }}
@enderror + + @error('jenis_aset_produktif_lainnya')
{{ $message }}
@enderror +
+
+ + + @error('keterangan_kondisi_aset')
{{ $message }}
@enderror +
+
+ +
Akses terhadap Program Pelayanan Keuangan Formal
+
+
+ @php $keterlibatanProgramKeuanganFormalValue = old('keterlibatan_program_keuangan_formal', $sosialEkonomi?->keterlibatan_program_keuangan_formal?->value); @endphp + + @foreach($keterlibatanProgramKeuanganFormalOptions as $option) +
+ + +
+ @endforeach + @error('keterlibatan_program_keuangan_formal')
{{ $message }}
@enderror +
+
+ @php + $statusProgramValues = old('status_program_keuangan_formal', $sosialEkonomi?->status_program_keuangan_formal ?? []); + $statusProgramValues = is_array($statusProgramValues) ? $statusProgramValues : []; + @endphp +
+ + + + + @foreach($statusProgramKeuanganFormalOptions as $statusOption) + + @endforeach + + + + @foreach($programKeuanganFormalRows as $programKey => $programLabel) + + + @foreach($statusProgramKeuanganFormalOptions as $statusOption) + + @endforeach + + @endforeach + +
Program{{ $statusOption['label'] }}
+ @if($programKey === 'lainnya') + + @error('program_keuangan_formal_lainnya_nama')
{{ $message }}
@enderror + @else + {{ $programLabel }} + @endif +
+
+ +
+
+
+ @error('status_program_keuangan_formal')
{{ $message }}
@enderror +
+
+ +
Akses Terhadap Bantuan
+
+
+ @php $pernahBantuanNgoPerusahaanValue = old('pernah_bantuan_ngo_perusahaan', $sosialEkonomi?->pernah_bantuan_ngo_perusahaan?->value); @endphp + + @foreach($pernahBantuanNgoPerusahaanOptions as $option) +
+ + +
+ @endforeach + @error('pernah_bantuan_ngo_perusahaan')
{{ $message }}
@enderror +
+
+ @php + $detailBantuanValues = old('detail_bantuan_ngo_perusahaan', $sosialEkonomi?->detail_bantuan_ngo_perusahaan ?? []); + $detailBantuanValues = is_array($detailBantuanValues) ? $detailBantuanValues : []; + @endphp +
+ + + + + + + + + + + @for($i = 0; $i < 2; $i++) + + + + + + + @endfor + +
Nama LembagaBentuk BantuanFrekuensiTahun Terakhir
+ + @error("detail_bantuan_ngo_perusahaan.$i.nama_lembaga")
{{ $message }}
@enderror +
+ + @error("detail_bantuan_ngo_perusahaan.$i.bentuk_bantuan")
{{ $message }}
@enderror +
+
+ + kali/tahun + @error("detail_bantuan_ngo_perusahaan.$i.frekuensi")
{{ $message }}
@enderror +
+
+ + @error("detail_bantuan_ngo_perusahaan.$i.tahun_terakhir")
{{ $message }}
@enderror +
+
+
+
+ +
+ +
+
+
+
+ +
+ @csrf + + + + +
+
+
Keterikatan hutang
+
+
+ @php $keterikatanHutangPanenValue = old('keterikatan_hutang_panen', $sosialEkonomi?->keterikatan_hutang_panen?->value); @endphp + + @foreach($keterikatanHutangPanenOptions as $option) +
+ + +
+ @endforeach + @error('keterikatan_hutang_panen')
{{ $message }}
@enderror +
+
+ @php $pinjamanTokohAdatPanenValue = old('pinjaman_tokoh_adat_panen', $sosialEkonomi?->pinjaman_tokoh_adat_panen?->value); @endphp + + @foreach($pinjamanTokohAdatPanenOptions as $option) +
+ + +
+ @endforeach + @error('pinjaman_tokoh_adat_panen')
{{ $message }}
@enderror + + @error('keterangan_pinjaman_tokoh_adat')
{{ $message }}
@enderror +
+
+ + @php $totalHutangValue = old('total_hutang_rupiah', $sosialEkonomi?->total_hutang_rupiah) @endphp +
+ Rp + + @error('total_hutang_rupiah')
{{ $message }}
@enderror +
+
+
+ +
+ + kg + @error('total_hutang_setara_kg_panen')
{{ $message }}
@enderror +
+
+
+
+ total_hutang_tidak_bersedia) ? 'checked' : '' }}> + +
+
+
+ @php $praktikIjonValue = old('praktik_ijon', $sosialEkonomi?->praktik_ijon?->value); @endphp + + @foreach($praktikIjonOptions as $option) +
+ + +
+ @endforeach + @error('praktik_ijon')
{{ $message }}
@enderror +
+
+ + @foreach($tekananJualSegeraOptions as $option) +
+ tekanan_jual_segera?->value) === $option['value'] ? 'checked' : '' }}> + +
+ @endforeach + @error('tekanan_jual_segera')
{{ $message }}
@enderror + + @error('penyebab_tekanan_jual_segera')
{{ $message }}
@enderror +
+
+ +
Persepsi Kebebasan Menjual Hasil Panen
+
+
+ @php $kebebasanMemilihPembeliValue = old('kebebasan_memilih_pembeli', $sosialEkonomi?->kebebasan_memilih_pembeli?->value); @endphp + + @foreach($kebebasanMemilihPembeliOptions as $option) +
+ + +
+ @endforeach + @error('kebebasan_memilih_pembeli')
{{ $message }}
@enderror +
+
+ + + @error('alasan_tidak_bebas_memilih_pembeli')
{{ $message }}
@enderror +
+
+ + + @error('minat_pembeli_harga_stabil')
{{ $message }}
@enderror +
+
+ + + @error('alasan_minat_pembeli_harga_stabil')
{{ $message }}
@enderror +
+
+ +
+
@@ -387,8 +1045,20 @@ 'use strict'; $(document).ready(function () { const pihakMembantuTanpaBantuan = @json($pihakMembantuTanpaBantuanValue); + const pernahJualHargaLebihTinggiPernah = @json($pernahJualHargaLebihTinggiPernahValue); + const panutanPetaniSuksesTidakAda = String(@json($panutanPetaniSuksesTidakAdaValue)); + const terdaftarKelompokTaniYa = @json($terdaftarKelompokTaniYaValue); + const statusRekeningTidakPunya = String(@json($statusRekeningTidakPunyaValue)); + const pengalamanKreditPerluAlasan = @json($pengalamanKreditPerluAlasanValues).map(String); + const alasanKreditLainnya = @json($alasanKreditLainnyaValue); + const kondisiAsetTidakAda = String(@json($kondisiAsetTidakAdaValue)); + const jenisAsetLainnya = @json($jenisAsetLainnyaValue); + const pernahBantuanNgoPerusahaanPernah = @json($pernahBantuanNgoPerusahaanPernahValue); + const pinjamanTokohAdatAda = @json($pinjamanTokohAdatAdaValue); + const tekananJualSegeraAda = @json($tekananJualSegeraAdaValue); + const kebebasanMemilihPembeliCukupBebas = Number(@json($kebebasanMemilihPembeliCukupBebasValue)); - $('#status-kepemilikan-lahan, #pihak-membantu, #status-konflik, .sosial-ekonomi-komoditas').select2(); + $('#status-kepemilikan-lahan, #pihak-membantu, #status-konflik, #pengetahuan-harga-hasil-olah, #pernah-jual-harga-lebih-tinggi, #usaha-mutu-tambahan-harga, #kedekatan-sesama-anggota, #status-kartu-tani, #bisa-beli-pupuk-bersubsidi, #minat-pembeli-stabil, .sosial-ekonomi-komoditas').select2(); function syncKomoditasLainnyaOptions() { const selectedUtama = $('.sosial-ekonomi-komoditas-utama') @@ -428,6 +1098,78 @@ return Boolean(triggerValue); } + function isPendapatanKomoditasGroup(group) { + return group === 'komoditas-utama' || group === 'komoditas-lainnya'; + } + + function clearPendapatanRowValidation($row) { + $row.find('.is-invalid').removeClass('is-invalid'); + $row.find('.select2-selection').removeClass('is-invalid'); + $row.find('.pendapatan-row-feedback').remove(); + } + + function showPendapatanRowValidation($element, message) { + const $cell = $element.closest('td'); + + if ($cell.find('.pendapatan-row-feedback').length) { + return; + } + + $cell.append(`
${message}
`); + } + + function validatePendapatanKomoditasRow($row) { + const $komoditas = $row.find('.sosial-ekonomi-komoditas').first(); + const $pendapatan = $row.find('.currency-input').first(); + const hasKomoditas = Boolean($komoditas.val()); + const hasPendapatan = Boolean(onlyDigits($pendapatan.val())); + const hasPeriode = $row.find('input[type="radio"]:checked').length > 0; + + clearPendapatanRowValidation($row); + $komoditas.toggleClass('is-invalid', !hasKomoditas); + $komoditas.next('.select2').find('.select2-selection').toggleClass('is-invalid', !hasKomoditas); + $pendapatan.toggleClass('is-invalid', !hasPendapatan); + $row.find('input[type="radio"]').toggleClass('is-invalid', !hasPeriode); + + if (!hasKomoditas) { + showPendapatanRowValidation($komoditas, 'Komoditas wajib diisi.'); + } + + if (!hasPendapatan) { + showPendapatanRowValidation($pendapatan, 'Pendapatan wajib diisi.'); + } + + if (!hasPeriode) { + showPendapatanRowValidation($row.find('input[type="radio"]').first(), 'Periode wajib dipilih.'); + } + + return hasKomoditas && hasPendapatan && hasPeriode; + } + + function canAddPendapatanRow(group) { + if (!isPendapatanKomoditasGroup(group)) { + return true; + } + + let isValid = true; + let $firstInvalidRow = null; + + $('.pendapatan-row[data-group="' + group + '"]:visible').each(function () { + const $row = $(this); + + if (!validatePendapatanKomoditasRow($row)) { + isValid = false; + $firstInvalidRow = $firstInvalidRow || $row; + } + }); + + if ($firstInvalidRow) { + $firstInvalidRow.find('.is-invalid').first().trigger('focus'); + } + + return isValid; + } + function setupPendapatanRows(group) { const $rows = $('.pendapatan-row[data-group="' + group + '"]'); @@ -470,6 +1212,10 @@ } function showNextPendapatanRow(group) { + if (!canAddPendapatanRow(group)) { + return; + } + const visibleRows = $('.pendapatan-row[data-group="' + group + '"]:visible').length; const maxRows = maxPendapatanRows(group); @@ -570,6 +1316,11 @@
+ + + `); } @@ -589,6 +1340,11 @@
+ + + `); } @@ -604,6 +1360,153 @@ } } + function syncPernahJualHargaLebihTinggiFields() { + const isPernah = $('#pernah-jual-harga-lebih-tinggi').val() === pernahJualHargaLebihTinggiPernah; + const $field = $('#penyebab-harga-lebih-tinggi'); + + $field.prop('disabled', !isPernah); + + if (!isPernah) { + $field.val(''); + } + } + + function syncPanutanFields() { + const isTidakAda = $('input[name="panutan_petani_sukses"]:checked').val() === panutanPetaniSuksesTidakAda; + const $field = $('#nama-lokasi-panutan'); + + $field.prop('disabled', isTidakAda); + + if (isTidakAda) { + $field.val(''); + } + } + + function syncTerdaftarKelompokFields() { + const isTerdaftar = $('input[name="terdaftar_kelompok_tani"]:checked').val() === terdaftarKelompokTaniYa; + const $fields = $('#nama-kelompok-tani, #lama-bergabung-kelompok, #kedekatan-sesama-anggota'); + + $fields.prop('disabled', !isTerdaftar); + + if (!isTerdaftar) { + $fields.val(''); + $('#kedekatan-sesama-anggota').trigger('change.select2'); + } + } + + function syncStatusRekeningFields() { + const isTidakPunya = $('input[name="status_rekening_tabungan"]:checked').val() === statusRekeningTidakPunya; + const $field = $('#nama-bank'); + + $field.prop('disabled', isTidakPunya); + + if (isTidakPunya) { + $field.val(''); + } + } + + function syncPengalamanKreditFields() { + const perluAlasan = pengalamanKreditPerluAlasan.includes($('input[name="pengalaman_kredit_kebun"]:checked').val()); + const $fields = $('input[name="alasan_kredit_ditolak[]"], #alasan-kredit-lainnya'); + + $fields.prop('disabled', !perluAlasan); + + if (!perluAlasan) { + $('input[name="alasan_kredit_ditolak[]"]').prop('checked', false); + $('#alasan-kredit-lainnya').val(''); + } + + syncAlasanKreditLainnyaField(); + } + + function syncAlasanKreditLainnyaField() { + const isLainnya = $('input[name="alasan_kredit_ditolak[]"][value="' + alasanKreditLainnya + '"]').is(':checked'); + $('#alasan-kredit-lainnya').prop('disabled', !isLainnya); + + if (!isLainnya) { + $('#alasan-kredit-lainnya').val(''); + } + } + + function syncAsetProduktifFields() { + const isTidakAda = $('input[name="kondisi_aset_produktif"]:checked').val() === kondisiAsetTidakAda; + const $fields = $('input[name="jenis_aset_produktif[]"], #jenis-aset-lainnya, #keterangan-kondisi-aset'); + + $fields.prop('disabled', isTidakAda); + + if (isTidakAda) { + $('input[name="jenis_aset_produktif[]"]').prop('checked', false); + $('#jenis-aset-lainnya, #keterangan-kondisi-aset').val(''); + } + + syncJenisAsetLainnyaField(); + } + + function syncJenisAsetLainnyaField() { + const isLainnya = $('input[name="jenis_aset_produktif[]"][value="' + jenisAsetLainnya + '"]').is(':checked'); + $('#jenis-aset-lainnya').prop('disabled', !isLainnya); + + if (!isLainnya) { + $('#jenis-aset-lainnya').val(''); + } + } + + function syncBantuanNgoFields() { + const isPernah = $('input[name="pernah_bantuan_ngo_perusahaan"]:checked').val() === pernahBantuanNgoPerusahaanPernah; + const $fields = $('[name^="detail_bantuan_ngo_perusahaan["]'); + + $fields.prop('disabled', !isPernah); + + if (!isPernah) { + $fields.val(''); + } + } + + function syncPinjamanTokohAdatFields() { + const isAda = $('input[name="pinjaman_tokoh_adat_panen"]:checked').val() === pinjamanTokohAdatAda; + const $field = $('#keterangan-pinjaman-tokoh-adat'); + + $field.prop('disabled', !isAda); + + if (!isAda) { + $field.val(''); + } + } + + function syncTotalHutangFields() { + const isTidakBersedia = $('#total-hutang-tidak-bersedia').is(':checked'); + const $fields = $('#total-hutang-rupiah, #total-hutang-kg'); + + $fields.prop('disabled', isTidakBersedia); + + if (isTidakBersedia) { + $fields.val(''); + } + } + + function syncTekananJualFields() { + const isAda = $('input[name="tekanan_jual_segera"]:checked').val() === tekananJualSegeraAda; + const $field = $('#penyebab-tekanan-jual'); + + $field.prop('disabled', !isAda); + + if (!isAda) { + $field.val(''); + } + } + + function syncKebebasanPembeliFields() { + const value = Number($('input[name="kebebasan_memilih_pembeli"]:checked').val() || 0); + const needsReason = value > 0 && value < kebebasanMemilihPembeliCukupBebas; + const $field = $('#alasan-tidak-bebas'); + + $field.prop('disabled', !needsReason); + + if (!needsReason) { + $field.val(''); + } + } + function onlyDigits(value) { return String(value || '').replace(/\D/g, ''); } @@ -614,10 +1517,31 @@ return digits.replace(/\B(?=(\d{3})+(?!\d))/g, '.'); } + function clearPendapatanRow($row) { + $row.find('select').val('').trigger('change'); + $row.find('input[type="text"], input[type="number"]').val(''); + $row.find('input[type="radio"], input[type="checkbox"]').prop('checked', false); + clearPendapatanRowValidation($row); + } + $(document).on('change', '.sosial-ekonomi-komoditas-utama', syncKomoditasLainnyaOptions); + $(document).on('input change', '.pendapatan-row input, .pendapatan-row select', function () { + clearPendapatanRowValidation($(this).closest('.pendapatan-row')); + }); $('.add-pendapatan-row').on('click', function () { showNextPendapatanRow($(this).data('group')); }); + $(document).on('click', '.delete-pendapatan-row', function () { + const $row = $(this).closest('.pendapatan-row'); + const group = $row.data('group'); + + clearPendapatanRow($row); + if (Number($row.data('row-index')) !== 0) { + $row.addClass('d-none'); + } + syncKomoditasLainnyaOptions(); + syncAddPendapatanButton(group); + }); $(document).on('input', '.currency-input', function () { const cursorAtEnd = this.selectionStart === this.value.length; this.value = formatRupiah(this.value); @@ -632,9 +1556,33 @@ }); }); $('#pihak-membantu').on('change', syncPihakMembantuFields); + $('#pernah-jual-harga-lebih-tinggi').on('change', syncPernahJualHargaLebihTinggiFields); + $('input[name="panutan_petani_sukses"]').on('change', syncPanutanFields); + $('input[name="terdaftar_kelompok_tani"]').on('change', syncTerdaftarKelompokFields); + $('input[name="status_rekening_tabungan"]').on('change', syncStatusRekeningFields); + $('input[name="pengalaman_kredit_kebun"]').on('change', syncPengalamanKreditFields); + $('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="pernah_bantuan_ngo_perusahaan"]').on('change', syncBantuanNgoFields); + $('input[name="pinjaman_tokoh_adat_panen"]').on('change', syncPinjamanTokohAdatFields); + $('#total-hutang-tidak-bersedia').on('change', syncTotalHutangFields); + $('input[name="tekanan_jual_segera"]').on('change', syncTekananJualFields); + $('input[name="kebebasan_memilih_pembeli"]').on('change', syncKebebasanPembeliFields); syncKomoditasLainnyaOptions(); setupAllPendapatanRows(); syncPihakMembantuFields(); + syncPernahJualHargaLebihTinggiFields(); + syncPanutanFields(); + syncTerdaftarKelompokFields(); + syncStatusRekeningFields(); + syncPengalamanKreditFields(); + syncAsetProduktifFields(); + syncBantuanNgoFields(); + syncPinjamanTokohAdatFields(); + syncTotalHutangFields(); + syncTekananJualFields(); + syncKebebasanPembeliFields(); }); @endpush