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 @@