diff --git a/app/Enums/KategoriPendapatanKomoditas.php b/app/Enums/KategoriPendapatanKomoditas.php new file mode 100644 index 0000000..98b3cdc --- /dev/null +++ b/app/Enums/KategoriPendapatanKomoditas.php @@ -0,0 +1,14 @@ +value; + } + + 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/PraktikBudidaya/FrekuensiPemangkasanPendamping.php b/app/Enums/PraktikBudidaya/FrekuensiPemangkasanPendamping.php new file mode 100644 index 0000000..f6b87b7 --- /dev/null +++ b/app/Enums/PraktikBudidaya/FrekuensiPemangkasanPendamping.php @@ -0,0 +1,31 @@ + 'Tidak pernah memangkas sama sekali', + self::TIDAK_RUTIN => 'Memangkas, tapi tidak rutin dan tidak tahu tekniknya', + self::SATU_KALI_TAHUN => 'Memangkas 1 kali/tahun, tahu jenis tekniknya', + self::DUA_KALI_TAHUN => 'Memangkas 2 kali/tahun, tahu jenis tekniknya', + self::LEBIH_DUA_KALI_TAHUN => 'Memangkas lebih dari 2 kali/tahun dengan teknik yang tepat dan pohon penaung juga dipangkas rutin', + }; + } + + public static function options(): array + { + return collect(self::cases())->map(fn ($case) => [ + 'value' => $case->value, + 'label' => $case->label(), + ])->toArray(); + } +} diff --git a/app/Enums/PraktikBudidaya/FrekuensiPemangkasanUtama.php b/app/Enums/PraktikBudidaya/FrekuensiPemangkasanUtama.php new file mode 100644 index 0000000..0444c65 --- /dev/null +++ b/app/Enums/PraktikBudidaya/FrekuensiPemangkasanUtama.php @@ -0,0 +1,31 @@ + 'Tidak pernah memangkas sama sekali', + self::TIDAK_RUTIN => 'Memangkas, tapi tidak rutin dan tidak tahu tekniknya', + self::SATU_KALI_TAHUN => 'Memangkas 1 kali/tahun, tahu jenis tekniknya', + self::DUA_KALI_TAHUN => 'Memangkas 2 kali/tahun, tahu jenis tekniknya', + self::LEBIH_DUA_KALI_TAHUN => 'Memangkas lebih dari 2 kali/tahun dengan teknik yang tepat dan pohon penaung juga dipangkas rutin', + }; + } + + public static function options(): array + { + return collect(self::cases())->map(fn ($case) => [ + 'value' => $case->value, + 'label' => $case->label(), + ])->toArray(); + } +} diff --git a/app/Enums/PraktikBudidaya/FrekuensiSanitasiLahan.php b/app/Enums/PraktikBudidaya/FrekuensiSanitasiLahan.php new file mode 100644 index 0000000..6b62d14 --- /dev/null +++ b/app/Enums/PraktikBudidaya/FrekuensiSanitasiLahan.php @@ -0,0 +1,31 @@ + 'Tidak pernah', + self::SESEKALI => 'Sesekali, tidak terjadwal', + self::SETIAP_PANEN => 'Setiap panen, tapi tidak menyeluruh', + self::RUTIN_TIDAK_TERJADWAL => 'Rutin, tapi tanpa jadwal yang jelas', + self::RUTIN_TERJADWAL => 'Rutin terjadwal dan menyeluruh', + }; + } + + public static function options(): array + { + return collect(self::cases())->map(fn ($case) => [ + 'value' => $case->value, + 'label' => $case->label(), + ])->toArray(); + } +} diff --git a/app/Enums/PraktikBudidaya/IntensitasSeranganHamaPenyakit.php b/app/Enums/PraktikBudidaya/IntensitasSeranganHamaPenyakit.php new file mode 100644 index 0000000..36ef04f --- /dev/null +++ b/app/Enums/PraktikBudidaya/IntensitasSeranganHamaPenyakit.php @@ -0,0 +1,34 @@ + 'Ringan - hanya beberapa tanaman terdampak', + self::SEDANG => 'Sedang - sebagian tanaman terdampak', + self::PARAH => 'Parah - sebagian besar tanaman terdampak', + self::BERVARIASI => 'Bervariasi - tergantung musim', + }; + } + + public static function values(): array + { + return collect(self::cases())->map(fn ($case) => $case->value)->toArray(); + } + + public static function options(): array + { + return collect(self::cases())->map(fn ($case) => [ + 'value' => $case->value, + 'label' => $case->label(), + ])->toArray(); + } +} diff --git a/app/Enums/PraktikBudidaya/JenisPupuk.php b/app/Enums/PraktikBudidaya/JenisPupuk.php new file mode 100644 index 0000000..7291364 --- /dev/null +++ b/app/Enums/PraktikBudidaya/JenisPupuk.php @@ -0,0 +1,29 @@ + 'Tidak memberi pupuk', + self::ORGANIK => 'Pupuk organik (kompos/kandang)', + self::KIMIA => 'Pupuk kimia', + self::KEDUANYA => 'Keduanya', + }; + } + + public static function options(): array + { + return collect(self::cases())->map(fn ($case) => [ + 'value' => $case->value, + 'label' => $case->label(), + ])->toArray(); + } +} diff --git a/app/Enums/PraktikBudidaya/KebutuhanAirPerMusim.php b/app/Enums/PraktikBudidaya/KebutuhanAirPerMusim.php new file mode 100644 index 0000000..86f1a98 --- /dev/null +++ b/app/Enums/PraktikBudidaya/KebutuhanAirPerMusim.php @@ -0,0 +1,27 @@ + 'Tidak butuh, hujan cukup', + self::KURANG => 'Kurang, sering kekurangan air', + self::CUKUP => 'Cukup terpenuhi', + }; + } + + public static function options(): array + { + return collect(self::cases())->map(fn ($case) => [ + 'value' => $case->value, + 'label' => $case->label(), + ])->toArray(); + } +} diff --git a/app/Enums/PraktikBudidaya/KondisiPengelolaanAir.php b/app/Enums/PraktikBudidaya/KondisiPengelolaanAir.php new file mode 100644 index 0000000..a5d88f7 --- /dev/null +++ b/app/Enums/PraktikBudidaya/KondisiPengelolaanAir.php @@ -0,0 +1,31 @@ + 'Kebutuhan air kurang terpenuhi, sering kekurangan air, tidak ada upaya mengatasinya', + self::KURANG_TIDAK_SUDAH_BERUPAYA => 'Kebutuhan air kurang terpenuhi, sering kekurangan air, tapi sudah mencoba mengandalkan sumber lain (sumur/sungai) walau belum cukup', + self::CUKUP_DARI_HUJAN => 'Kebutuhan air cukup terpenuhi hanya dari hujan, tanpa sistem irigasi tambahan', + self::CUKUP_IRIGASI_PINJAM => 'Kebutuhan air cukup terpenuhi, ada sistem irigasi tambahan (sungai/mata air/sumur) tapi pinjam', + self::CUKUP_IRIGASI_SENDIRI => 'Kebutuhan air cukup terpenuhi, punya akses irigasi sendiri (sungai/mata air/sumur) yang dikelola baik', + }; + } + + public static function options(): array + { + return collect(self::cases())->map(fn ($case) => [ + 'value' => $case->value, + 'label' => $case->label(), + ])->toArray(); + } +} diff --git a/app/Enums/PraktikBudidaya/MetodePenangananHamaPenyakit.php b/app/Enums/PraktikBudidaya/MetodePenangananHamaPenyakit.php new file mode 100644 index 0000000..9936527 --- /dev/null +++ b/app/Enums/PraktikBudidaya/MetodePenangananHamaPenyakit.php @@ -0,0 +1,36 @@ + 'Tidak ada penanganan', + self::CARA_TRADISIONAL => 'Cara tradisional (doa/ritual)', + self::PESTISIDA_SANITASI => 'Pestisida atau sanitasi', + self::KOMBINASI => 'Kombinasi pestisada dan sanitasi', + self::PHT => 'Pengendalian hama terpadu(PHT)', + }; + } + + public static function values(): array + { + return collect(self::cases())->map(fn ($case) => $case->value)->toArray(); + } + + public static function options(): array + { + return collect(self::cases())->map(fn ($case) => [ + 'value' => $case->value, + 'label' => $case->label(), + ])->toArray(); + } +} diff --git a/app/Enums/PraktikBudidaya/PemahamanManfaatKonservasi.php b/app/Enums/PraktikBudidaya/PemahamanManfaatKonservasi.php new file mode 100644 index 0000000..b1637bd --- /dev/null +++ b/app/Enums/PraktikBudidaya/PemahamanManfaatKonservasi.php @@ -0,0 +1,25 @@ + 'Ya, tahu manfaatnya', + self::TIDAK_PAHAM => 'Dilakukan tapi tidak tahu manfaatnya, kebiasaan turun-temurun', + }; + } + + public static function options(): array + { + return collect(self::cases())->map(fn ($case) => [ + 'value' => $case->value, + 'label' => $case->label(), + ])->toArray(); + } +} diff --git a/app/Enums/PraktikBudidaya/PemberianPupuk.php b/app/Enums/PraktikBudidaya/PemberianPupuk.php new file mode 100644 index 0000000..58b5922 --- /dev/null +++ b/app/Enums/PraktikBudidaya/PemberianPupuk.php @@ -0,0 +1,31 @@ + 'Tidak pernah memberi pupuk', + self::JENIS_DOSIS_WAKTU_TIDAK_MENENTU => 'Memberi pupuk, tapi jenis/dosis tidak menentu, waktu sembarangan', + self::JENIS_SESUAI_DOSIS_TIDAK_MENENTU => 'Memberi pupuk dengan jenis yang sesuai (organik/kimia/keduanya), tapi dosis atau waktu belum tepat', + self::JENIS_DOSIS_SESUAI_WAKTU_CUKUP_TEPAT => 'Memberi pupuk dengan jenis dan dosis yang sesuai, waktu cukup tepat', + self::JENIS_DOSIS_SESUAI_WAKTU_TEPAT => 'Memberi pupuk rutin dengan jenis tepat, dosis tepat, dan waktu tepat sesuai kebutuhan tanaman', + }; + } + + public static function options(): array + { + return collect(self::cases())->map(fn ($case) => [ + 'value' => $case->value, + 'label' => $case->label(), + ])->toArray(); + } +} diff --git a/app/Enums/PraktikBudidaya/PenangananGulma.php b/app/Enums/PraktikBudidaya/PenangananGulma.php new file mode 100644 index 0000000..586ee35 --- /dev/null +++ b/app/Enums/PraktikBudidaya/PenangananGulma.php @@ -0,0 +1,31 @@ + 'Dibiarkan di kebun', + self::DICABUT => 'Dikumpulkan dan dibuang', + self::DISEMPROT => 'Dijadikan kompos', + self::RUTIN_DICABUT_TANPA_JADWAL => 'Dikumpulkan dan dibuang', + self::RUTIN_TERJADWAL => 'Dijadikan kompos', + }; + } + + public static function options(): array + { + return collect(self::cases())->map(fn ($case) => [ + 'value' => $case->value, + 'label' => $case->label(), + ])->toArray(); + } +} diff --git a/app/Enums/PraktikBudidaya/PenangananSisaBuahRanting.php b/app/Enums/PraktikBudidaya/PenangananSisaBuahRanting.php new file mode 100644 index 0000000..93832d6 --- /dev/null +++ b/app/Enums/PraktikBudidaya/PenangananSisaBuahRanting.php @@ -0,0 +1,27 @@ + 'Dibiarkan di kebun', + self::DIKUMPULKAN => 'Dikumpulkan dan dibuang', + self::KOMPOS => 'Dijadikan kompos', + }; + } + + public static function options(): array + { + return collect(self::cases())->map(fn ($case) => [ + 'value' => $case->value, + 'label' => $case->label(), + ])->toArray(); + } +} diff --git a/app/Enums/PraktikBudidaya/PenyerbukanManual.php b/app/Enums/PraktikBudidaya/PenyerbukanManual.php new file mode 100644 index 0000000..8b6a07e --- /dev/null +++ b/app/Enums/PraktikBudidaya/PenyerbukanManual.php @@ -0,0 +1,27 @@ + 'Selalu, setiap musim berbunga', + self::KADANG_KADANG => 'Kadang-kadang, tergantung kondisi', + self::TIDAK_PERNAH => 'Tidak pernah', + }; + } + + public static function options(): array + { + return collect(self::cases())->map(fn ($case) => [ + 'value' => $case->value, + 'label' => $case->label(), + ])->toArray(); + } +} diff --git a/app/Enums/PraktikBudidaya/TenagaKerja.php b/app/Enums/PraktikBudidaya/TenagaKerja.php new file mode 100644 index 0000000..90adbd6 --- /dev/null +++ b/app/Enums/PraktikBudidaya/TenagaKerja.php @@ -0,0 +1,34 @@ + 'Dikerjakan Sendiri', + self::DIBANTU_ANGGOTA_KELUARGA => 'Dibantu Anggota Keluarga', + self::UPAH_TENAGA_KERJA => 'Upah Tenaga Kerja', + self::GOTONG_ROYONG => 'Gotong Royong/Swadaya Komunitas', + }; + } + + public static function values(): array + { + return collect(self::cases())->map(fn ($case) => $case->value)->toArray(); + } + + public static function options(): array + { + return collect(self::cases())->map(fn ($case) => [ + 'value' => $case->value, + 'label' => $case->label(), + ])->toArray(); + } +} diff --git a/app/Enums/PraktikBudidaya/WaktuKemunculanTerparahHamaPenyakit.php b/app/Enums/PraktikBudidaya/WaktuKemunculanTerparahHamaPenyakit.php new file mode 100644 index 0000000..791d0da --- /dev/null +++ b/app/Enums/PraktikBudidaya/WaktuKemunculanTerparahHamaPenyakit.php @@ -0,0 +1,34 @@ + 'Musim hujan', + self::KEMARAU => 'Musim kemarau', + self::SEPANJANG_TAHUN => 'Sepanjang tahun', + self::TIDAK_TENTU => 'Tidak tentu', + }; + } + + public static function values(): array + { + return collect(self::cases())->map(fn ($case) => $case->value)->toArray(); + } + + public static function options(): array + { + return collect(self::cases())->map(fn ($case) => [ + 'value' => $case->value, + 'label' => $case->label(), + ])->toArray(); + } +} diff --git a/app/Enums/SkorKecukupanPenghasilan.php b/app/Enums/SkorKecukupanPenghasilan.php new file mode 100644 index 0000000..d359b3a --- /dev/null +++ b/app/Enums/SkorKecukupanPenghasilan.php @@ -0,0 +1,36 @@ + 'Sangat tidak cukup', + self::KURANG_SERING_BERHUTANG => 'Kurang, sering berhutang', + self::CUKUP_PAS_PASAN => 'Cukup pas-pasan', + self::CUKUP_ADA_SISA => 'Cukup, kadang ada sisa', + self::LEBIH_DARI_CUKUP => 'Lebih dari cukup', + }; + } + + 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/SkorKejelasanStatusLahan.php b/app/Enums/SkorKejelasanStatusLahan.php new file mode 100644 index 0000000..ad7662a --- /dev/null +++ b/app/Enums/SkorKejelasanStatusLahan.php @@ -0,0 +1,36 @@ + 'Tidak ada dokumen & ada sengketa', + self::ADA_DOKUMEN_MASIH_SENGKETA => 'Ada dokumen tapi masih sengketa', + self::PERNAH_SENGKETA_SELESAI => 'Pernah sengketa, sudah selesai', + self::LAHAN_ADAT_TANPA_SENGKETA => 'Lahan adat/keluarga/perhutanan sosial tanpa sengketa', + self::BERSERTIFIKAT_TANPA_SENGKETA => 'Bersertifikat & tidak ada sengketa', + }; + } + + 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/SkorKemampuanMenabung.php b/app/Enums/SkorKemampuanMenabung.php new file mode 100644 index 0000000..6297708 --- /dev/null +++ b/app/Enums/SkorKemampuanMenabung.php @@ -0,0 +1,36 @@ + 'Tidak bisa sama sekali', + self::PERNAH_TERPAKAI => 'Pernah tapi selalu terpakai', + self::KADANG_KADANG => 'Kadang-kadang', + self::BISA_TIDAK_TETAP => 'Bisa tapi tidak tetap', + self::RUTIN_TETAP => 'Rutin & jumlah tetap', + }; + } + + 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/SkorPeriodePaceklik.php b/app/Enums/SkorPeriodePaceklik.php new file mode 100644 index 0000000..3524bb4 --- /dev/null +++ b/app/Enums/SkorPeriodePaceklik.php @@ -0,0 +1,36 @@ + '>4 bulan', + self::TIGA_SAMPAI_EMPAT_BULAN => '3-4 bulan', + self::SATU_SAMPAI_DUA_BULAN => '1-2 bulan', + self::SEBENTAR_TIDAK_MENENTU => 'Sebentar & tidak menentu', + self::TIDAK_ADA_STABIL => 'Tidak ada, stabil', + }; + } + + 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/StatusKepemilikanLahanSosialEkonomi.php new file mode 100644 index 0000000..935ef44 --- /dev/null +++ b/app/Enums/StatusKepemilikanLahanSosialEkonomi.php @@ -0,0 +1,30 @@ +value; + } + + 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/StatusKonflik.php b/app/Enums/StatusKonflik.php new file mode 100644 index 0000000..eb6b62e --- /dev/null +++ b/app/Enums/StatusKonflik.php @@ -0,0 +1,27 @@ +value; + } + + 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/Dashboard/DistribusiController.php b/app/Http/Controllers/Web/Dashboard/DistribusiController.php new file mode 100644 index 0000000..6d15a5a --- /dev/null +++ b/app/Http/Controllers/Web/Dashboard/DistribusiController.php @@ -0,0 +1,20 @@ + ['nullable', 'min:16', 'max:16'], 'file_kk' => ['nullable', 'image', 'mimes:jpeg,jpg,png', 'max:2048'], 'foto' => ['nullable', 'image', 'mimes:jpeg,jpg,png', 'max:2048'], - 'nomor_telepon' => ['nullable', 'numeric', 'max:20'], + 'nomor_telepon' => ['nullable', 'digits_between:11,13'], + ], [ + 'nomor_telepon.digits_between' => 'Nomor telepon harus berupa angka 11 sampai 13 digit.', ]); if ($request->hasFile('file_ktp')) { @@ -162,7 +164,9 @@ class PetaniController extends Controller 'kk' => ['nullable', 'min:16', 'max:16'], 'file_kk' => ['nullable', 'file', 'mimes:jpeg,jpg,png,pdf', 'max:2048'], 'foto' => ['nullable', 'file', 'mimes:jpeg,jpg,png', 'max:2048'], - 'nomor_telepon' => ['nullable', 'numeric', 'max:20'], + 'nomor_telepon' => ['nullable', 'digits_between:11,13'], + ], [ + 'nomor_telepon.digits_between' => 'Nomor telepon harus berupa angka 11 sampai 13 digit.', ]); if ($request->hasFile('file_ktp')) { diff --git a/app/Http/Controllers/Web/Produktivitas/PraktikBudidayaController.php b/app/Http/Controllers/Web/Produktivitas/PraktikBudidayaController.php index cee7c7b..643524d 100644 --- a/app/Http/Controllers/Web/Produktivitas/PraktikBudidayaController.php +++ b/app/Http/Controllers/Web/Produktivitas/PraktikBudidayaController.php @@ -5,8 +5,19 @@ namespace App\Http\Controllers\Web\Produktivitas; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use Illuminate\Support\Facades\Gate; +use Illuminate\Support\Facades\Validator; +use Illuminate\Support\Str; +use Illuminate\Validation\Rules\Enum; use App\Models\Pertanian\Petani; +use App\Models\Pertanian\PraktikBudidaya; + +use App\Enums\PraktikBudidaya\TenagaKerja; +use App\Enums\PraktikBudidaya\FrekuensiPemangkasanUtama; +use App\Enums\PraktikBudidaya\FrekuensiPemangkasanPendamping; +use App\Enums\PraktikBudidaya\PemberianPupuk; +use App\Enums\PraktikBudidaya\JenisPupuk; +use App\Enums\PraktikBudidaya\PenyerbukanManual; class PraktikBudidayaController extends Controller { @@ -16,9 +27,245 @@ class PraktikBudidayaController extends Controller abort(403); } + $defaultTeknikPemangkasan = [ + 'Pemangkasan bentuk', + 'Pemangkasan produksi', + 'Pemangkasan peremajaan', + 'Tidak tahu jenis pemangkasannya — dilakukan berdasarkan kebiasaan', + ]; + + $defaultAlasanTidakPenyerbukan = [ + 'Tidak tahu caranya', + 'Tidak ada tenaga/waktu', + 'Mengandalkan penyerbuk alami', + ]; + + $defaultFrekuensiPemupukan = [ + '1 kali/tahun', + '2 kali/tahun', + 'Lebih dari 2 kali/tahun', + ]; + + $defaultWaktuPemberianPupuk = [ + 'Awal musim hujan', + 'Akhir musim hujan', + 'Sebelum berbunga', + 'Sebelum Setelah Panen', + 'Tidak Menentu', + ]; + + $defaultCaraPemberianPupuk = [ + 'Ditabur di sekitar pohon', + 'Dibenamkan dalam lubang/parit', + 'Dicairkan/dikocor', + 'Disemprotkan ke daun', + ]; + + $defaultSumberAir = [ + 'Sungai/mata air', + 'Sumur', + 'Mengandalkan hujan saja', + ]; + + $defaultSistemIrigasi = [ + 'Tidak ada irigasi', + 'Milik sendiri', + 'Milik komunitas/kelompok tani', + 'Milik pemerintah', + ]; + $title = 'Petani - Praktik Budidaya'; $petani = Petani::findOrFail($petaniId); + $praktikBudidaya = PraktikBudidaya::where('petani_id', $petaniId)->latest()->first(); + + $teknikPemangkasan = $praktikBudidaya->teknik_pemangkasan ?? []; + $teknikPemangkasanLainnya = collect($teknikPemangkasan) + ->first(fn ($item) => !in_array($item, $defaultTeknikPemangkasan)); + + $alasanTidakPenyerbukan = $praktikBudidaya->deskripsi_tidak_penyerbukan ?? ''; + $alasanTidakPenyerbukanLainnya = collect(explode(', ', $alasanTidakPenyerbukan)) + ->first(fn ($item) => !in_array($item, $defaultAlasanTidakPenyerbukan)); + + $frekuensiPemupukan = $praktikBudidaya->frekuensi_pemupukan ?? ''; + $frekuensiPemupukanLainnya = collect(explode(', ', $frekuensiPemupukan)) + ->first(fn ($item) => !in_array($item, $defaultFrekuensiPemupukan)); + + $waktuPemberianPupuk = $praktikBudidaya->waktu_pemberian_pupuk ?? ''; + $waktuPemberianPupukLainnya = collect(explode(', ', $waktuPemberianPupuk)) + ->first(fn ($item) => !in_array($item, $defaultWaktuPemberianPupuk)); + + $caraPemberianPupuk = $praktikBudidaya->cara_pemberian_pupuk ?? ''; + $caraPemberianPupukLainnya = collect(explode(', ', $caraPemberianPupuk)) + ->first(fn ($item) => !in_array($item, $defaultCaraPemberianPupuk)); + + $sumberAir = $praktikBudidaya->sumber_air ?? ''; + $sumberAirLainnya = collect(explode(', ', $sumberAir)) + ->first(fn ($item) => !in_array($item, $defaultSumberAir)); + + $sistemIrigasi = $praktikBudidaya->sistem_irigasi ?? ''; + $sistemIrigasiLainnya = collect(explode(', ', $sistemIrigasi)) + ->first(fn ($item) => !in_array($item, $defaultSistemIrigasi)); - return view('produktivitas.petani.praktik-budidaya.add', compact('title', 'petani')); + if (!empty($praktikBudidaya)) { + return view('produktivitas.petani.praktik-budidaya.edit', compact('title', 'petani', 'praktikBudidaya', 'teknikPemangkasanLainnya', 'alasanTidakPenyerbukanLainnya', 'frekuensiPemupukanLainnya', 'waktuPemberianPupukLainnya', 'caraPemberianPupukLainnya', 'sumberAirLainnya', 'sistemIrigasiLainnya')); + } + + return view('produktivitas.petani.praktik-budidaya.add', compact('title', 'petani', 'teknikPemangkasanLainnya', 'alasanTidakPenyerbukanLainnya', 'frekuensiPemupukanLainnya', 'waktuPemberianPupukLainnya', 'caraPemberianPupukLainnya')); + } + + public function store($petaniId, Request $request) + { + if (!Gate::any(['super_admin', 'admin', 'fasilitator'])) { + abort(403); + } + + $validatedData = $request->validate([ + 'tenaga_kerja' => ['nullable', 'string', new Enum(TenagaKerja::class)], + 'frekuensi_pemangkasan_komoditas_utama' => ['nullable', 'int', new Enum(FrekuensiPemangkasanUtama::class)], + 'teknik_pemangkasan' => ['nullable', 'array'], + 'teknik_pemangkasan_lainnya' => ['nullable', 'string'], + 'frekuensi_pemangkasan_pohon_penaung' => ['nullable', 'string', new Enum(FrekuensiPemangkasanPendamping::class)], + + 'penyerbukan_manual' => ['nullable', 'string', new Enum(PenyerbukanManual::class)], + 'alasan_tidak_penyerbukan' => ['nullable', 'string'], + 'alasan_tidak_penyerbukan_lainnya' => ['nullable', 'string'], + 'tingkat_keberhasilan_penyerbukan' => ['nullable', 'string'], + 'pemberian_pupuk' => ['nullable', 'int', new Enum(PemberianPupuk::class)], + 'jenis_pupuk' => ['nullable', 'string', new Enum(JenisPupuk::class)], + 'frekuensi_pemupukan' => ['nullable', 'string'], + 'frekuensi_pemupukan_lainnya' => ['nullable', 'string'], + 'estimasi_dosis_pupuk_organik' => ['nullable', 'string'], + 'estimasi_dosis_pupuk_anorganik' => ['nullable', 'string'], + 'waktu_pemberian_pupuk' => ['nullable', 'string'], + 'waktu_pemberian_pupuk_lainnya' => ['nullable', 'string'], + 'cara_pemberian_pupuk' => ['nullable', 'string'], + 'cara_pemberian_pupuk_lainnya' => ['nullable', 'string'], + ]); + + $teknik_pemangkasan = $request->teknik_pemangkasan ?? []; + + if (($key = array_search('Lainnya', $teknik_pemangkasan)) !== false) { + unset($teknik_pemangkasan[$key]); + + if (!empty($request->teknik_pemangkasan_lainnya)) { + $teknik_pemangkasan[] = $request->teknik_pemangkasan_lainnya; + } + } + + $teknik_pemangkasan = array_values($teknik_pemangkasan); + + $petani = Petani::findOrFail($petaniId); + + $praktikBudidaya = $petani->praktik_budidaya()->create([ + 'petani_id' => $petani->id, + 'uid' => 'PB-' . strtoupper(Str::random(10)), + 'tenaga_kerja' => $validatedData['tenaga_kerja'], + 'frekuensi_pemangkasan_utama' => $validatedData['frekuensi_pemangkasan_komoditas_utama'], + + 'teknik_pemangkasan' => $teknik_pemangkasan, + + 'frekuensi_pemangkasan_penaung' => $validatedData['frekuensi_pemangkasan_pohon_penaung'], + 'penyerbukan_manual' => $validatedData['penyerbukan_manual'] ?? null, + 'deskripsi_penyerbukan_manual' => $validatedData['alasan_tidak_penyerbukan'] ?? null, + 'tingkat_keberhasilan_penyerbukan' => $validatedData['tingkat_keberhasilan_penyerbukan'] ?? null, + 'pemberian_pupuk' => $validatedData['pemberian_pupuk'] ?? null, + 'jenis_pupuk' => $validatedData['jenis_pupuk'] ?? null, + 'frekuensi_pemberian_pupuk' => ($validatedData['frekuensi_pemupukan'] ?? null) === 'Lainnya' ? ($validatedData['frekuensi_pemupukan_lainnya'] ?? null) : ($validatedData['frekuensi_pemupukan'] ?? null), + 'estimasi_dosis_pupuk_organik' => $validatedData['estimasi_dosis_pupuk_organik'] ?? null, + 'estimasi_dosis_pupuk_anorganik' => $validatedData['estimasi_dosis_pupuk_anorganik'] ?? null, + 'waktu_pemberian_pupuk' => ($validatedData['waktu_pemberian_pupuk'] ?? null) === 'Lainnya' ? ($validatedData['waktu_pemberian_pupuk_lainnya'] ?? null) : ($validatedData['waktu_pemberian_pupuk'] ?? null), + 'cara_pemberian_pupuk' => ($validatedData['cara_pemberian_pupuk'] ?? null) === 'Lainnya' ? ($validatedData['cara_pemberian_pupuk_lainnya'] ?? null) : ($validatedData['cara_pemberian_pupuk'] ?? null), + ]); + + return redirect()->route('petani.praktik-budidaya.edit', [$petani->id , $praktikBudidaya->id]) + ->with('success', 'Data praktik budidaya berhasil disimpan.'); + } + + public function edit($petaniId, $praktikBudidayaId) + { + if (!Gate::any(['super_admin', 'admin', 'fasilitator'])) { + abort(403); + } + + $defaultTeknikPemangkasan = [ + 'Pemangkasan bentuk', + 'Pemangkasan produksi', + 'Pemangkasan peremajaan', + 'Tidak tahu jenis pemangkasannya — dilakukan berdasarkan kebiasaan', + ]; + + $defaultAlasanTidakPenyerbukan = [ + 'Tidak tahu caranya', + 'Tidak ada tenaga/waktu', + 'Mengandalkan penyerbuk alami', + ]; + + $defaultFrekuensiPemupukan = [ + '1 kali/tahun', + '2 kali/tahun', + 'Lebih dari 2 kali/tahun', + ]; + + $defaultWaktuPemberianPupuk = [ + 'Awal musim hujan', + 'Akhir musim hujan', + 'Sebelum berbunga', + 'Sebelum Setelah Panen', + 'Tidak Menentu', + ]; + + $defaultCaraPemberianPupuk = [ + 'Ditabur di sekitar pohon', + 'Dibenamkan dalam lubang/parit', + 'Dicairkan/dikocor', + 'Disemprotkan ke daun', + ]; + + $defaultSumberAir = [ + 'Sungai/mata air', + 'Sumur', + 'Mengandalkan hujan saja', + ]; + + $defaultSistemIrigasi = [ + 'Tidak ada irigasi', + 'Milik sendiri', + 'Milik komunitas/kelompok tani', + 'Milik pemerintah', + ]; + + $title = 'Petani - Praktik Budidaya'; + $petani = Petani::findOrFail($petaniId); + $praktikBudidaya = PraktikBudidaya::where('petani_id', $petaniId)->where('id', $praktikBudidayaId)->latest()->first(); + + $teknikPemangkasan = $praktikBudidaya->teknik_pemangkasan ?? []; + $teknikPemangkasanLainnya = collect($teknikPemangkasan) + ->first(fn ($item) => !in_array($item, $defaultTeknikPemangkasan)); + + $alasanTidakPenyerbukan = $praktikBudidaya->deskripsi_tidak_penyerbukan ?? ''; + $alasanTidakPenyerbukanLainnya = collect(explode(', ', $alasanTidakPenyerbukan)) + ->first(fn ($item) => !in_array($item, $defaultAlasanTidakPenyerbukan)); + + $frekuensiPemupukan = $praktikBudidaya->frekuensi_pemupukan ?? ''; + $frekuensiPemupukanLainnya = collect(explode(', ', $frekuensiPemupukan)) + ->first(fn ($item) => !in_array($item, $defaultFrekuensiPemupukan)); + + $waktuPemberianPupuk = $praktikBudidaya->waktu_pemberian_pupuk ?? ''; + $waktuPemberianPupukLainnya = collect(explode(', ', $waktuPemberianPupuk)) + ->first(fn ($item) => !in_array($item, $defaultWaktuPemberianPupuk)); + + $caraPemberianPupuk = $praktikBudidaya->cara_pemberian_pupuk ?? ''; + $caraPemberianPupukLainnya = collect(explode(', ', $caraPemberianPupuk)) + ->first(fn ($item) => !in_array($item, $defaultCaraPemberianPupuk)); + + $sumberAir = $praktikBudidaya->sumber_air ?? ''; + $sumberAirLainnya = collect(explode(', ', $sumberAir)) + ->first(fn ($item) => !in_array($item, $defaultSumberAir)); + + $sistemIrigasi = $praktikBudidaya->sistem_irigasi ?? ''; + $sistemIrigasiLainnya = collect(explode(', ', $sistemIrigasi)) + ->first(fn ($item) => !in_array($item, $defaultSistemIrigasi)); + + return view('produktivitas.petani.praktik-budidaya.edit', compact('title', 'petani', 'praktikBudidaya', 'teknikPemangkasanLainnya', 'alasanTidakPenyerbukanLainnya', 'frekuensiPemupukanLainnya', 'waktuPemberianPupukLainnya', 'caraPemberianPupukLainnya', 'sumberAirLainnya', 'sistemIrigasiLainnya')); } } diff --git a/app/Http/Controllers/Web/Produktivitas/SosialEkonomiController.php b/app/Http/Controllers/Web/Produktivitas/SosialEkonomiController.php index 6834594..632dcb3 100644 --- a/app/Http/Controllers/Web/Produktivitas/SosialEkonomiController.php +++ b/app/Http/Controllers/Web/Produktivitas/SosialEkonomiController.php @@ -3,6 +3,15 @@ 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\Models\Pertanian\Komoditas; use App\Models\Pertanian\Lahan; use App\Models\Pertanian\Petani; @@ -32,14 +41,14 @@ class SosialEkonomiController extends Controller $pendapatanLuarPertanian = $sosialEkonomi?->pendapatanLuarPertanian?->values() ?? collect(); $komoditasPetani = $this->komoditasPetani($petani); - return view('produktivitas.petani.sosial-ekonomi.index', compact( + return view('produktivitas.petani.sosial-ekonomi.index', array_merge(compact( 'petani', 'sosialEkonomi', 'pendapatanKomoditasUtama', 'pendapatanKomoditasLainnya', 'pendapatanLuarPertanian', 'komoditasPetani' - )); + ), $this->sosialEkonomiOptions())); } public function index(Request $request, Petani $petani) @@ -87,14 +96,14 @@ class SosialEkonomiController extends Controller return response()->json($sosialEkonomi); } - return view($view, compact( + return view($view, array_merge(compact( 'petani', 'sosialEkonomi', 'komoditasPetani', 'pendapatanKomoditasUtama', 'pendapatanKomoditasLainnya', 'pendapatanLuarPertanian', - )); + ), $this->sosialEkonomiOptions())); } public function store(Request $request, ?Petani $petani = null): JsonResponse|RedirectResponse @@ -214,29 +223,29 @@ class SosialEkonomiController extends Controller 'jumlah_tanggungan' => ['nullable', 'integer', 'min:0'], 'anak_masih_sekolah' => ['nullable', 'integer', 'min:0'], 'yang_ikut_bekerja' => ['nullable', 'integer', 'min:0'], - 'skor_periode_paceklik' => ['nullable', 'integer', 'min:1', 'max:5'], + 'skor_periode_paceklik' => ['nullable', 'integer', Rule::in(SkorPeriodePaceklik::values())], 'bulan_paceklik' => ['nullable', 'string', 'max:255'], 'sumber_penghasilan_paceklik' => ['nullable', 'string'], 'total_estimasi_biaya_kebun_per_musim' => ['nullable', 'integer', 'min:0'], - 'skor_kemampuan_menabung' => ['nullable', 'integer', 'min:1', 'max:5'], + 'skor_kemampuan_menabung' => ['nullable', 'integer', Rule::in(SkorKemampuanMenabung::values())], 'estimasi_tabungan_per_bulan' => ['nullable', 'integer', 'min:0'], - 'skor_kecukupan_penghasilan' => ['nullable', 'integer', 'min:1', 'max:5'], + 'skor_kecukupan_penghasilan' => ['nullable', 'integer', Rule::in(SkorKecukupanPenghasilan::values())], 'alasan_kecukupan_penghasilan' => ['nullable', 'string'], - 'status_kepemilikan_lahan' => ['nullable', 'string', 'max:255'], - 'skor_kejelasan_status_lahan' => ['nullable', 'integer', 'min:1', 'max:5'], + 'status_kepemilikan_lahan' => ['nullable', 'string', Rule::in(StatusKepemilikanLahanSosialEkonomi::values())], + 'skor_kejelasan_status_lahan' => ['nullable', 'integer', Rule::in(SkorKejelasanStatusLahan::values())], 'ada_sertifikat_dokumen' => ['nullable', 'boolean'], 'ada_sengketa' => ['nullable', 'boolean'], 'keterangan_sengketa' => ['nullable', 'string'], - 'pihak_membantu_konflik' => ['nullable', 'string', 'max:255'], + 'pihak_membantu_konflik' => ['nullable', 'string', Rule::in(PihakMembantuKonflik::values())], 'pihak_membantu_konflik_nama' => ['nullable', 'string', 'max:255'], 'tahun_bantuan_konflik' => ['nullable', 'integer', 'digits:4'], - 'status_konflik' => ['nullable', 'string', 'max:255'], + 'status_konflik' => ['nullable', 'string', Rule::in(StatusKonflik::values())], 'pendapatan_komoditas' => ['nullable', 'array'], - 'pendapatan_komoditas.*.kategori' => ['required_with:pendapatan_komoditas', 'string', 'in:utama,lainnya'], + 'pendapatan_komoditas.*.kategori' => ['required_with:pendapatan_komoditas', 'string', Rule::in(KategoriPendapatanKomoditas::values())], 'pendapatan_komoditas.*.komoditas' => ['nullable', 'string', 'max:255'], 'pendapatan_komoditas.*.pendapatan' => ['nullable', 'integer', 'min:0'], - 'pendapatan_komoditas.*.periode' => ['nullable', 'string', 'in:musim,tahun'], + 'pendapatan_komoditas.*.periode' => ['nullable', 'string', Rule::in(PeriodePendapatan::values())], 'pendapatan_luar_pertanian' => ['nullable', 'array'], 'pendapatan_luar_pertanian.*.jenis_pekerjaan' => ['nullable', 'string', 'max:255'], @@ -253,7 +262,9 @@ class SosialEkonomiController extends Controller ]) ->all(); - if (($payload['pihak_membantu_konflik'] ?? null) === 'Tidak ada-selesaikan sendiri') { + $payload = $this->normalizeSkorPayload($payload); + + if (($payload['pihak_membantu_konflik'] ?? null) === PihakMembantuKonflik::TIDAK_ADA_SELESAIKAN_SENDIRI->value) { $payload['pihak_membantu_konflik_nama'] = null; $payload['tahun_bantuan_konflik'] = null; } @@ -261,6 +272,22 @@ class SosialEkonomiController extends Controller return $payload; } + private function normalizeSkorPayload(array $payload): array + { + foreach ([ + 'skor_periode_paceklik', + 'skor_kemampuan_menabung', + 'skor_kecukupan_penghasilan', + 'skor_kejelasan_status_lahan', + ] as $field) { + if (array_key_exists($field, $payload) && !is_null($payload[$field]) && $payload[$field] !== '') { + $payload[$field] = (int) $payload[$field]; + } + } + + return $payload; + } + private function syncPendapatanKomoditas(SosialEkonomi $sosialEkonomi, array $items): void { $sosialEkonomi->pendapatanKomoditas()->delete(); @@ -333,4 +360,18 @@ class SosialEkonomiController extends Controller ->get(); } + private function sosialEkonomiOptions(): array + { + return [ + 'periodePaceklikOptions' => SkorPeriodePaceklik::options(), + 'kemampuanMenabungOptions' => SkorKemampuanMenabung::options(), + 'kecukupanPenghasilanOptions' => SkorKecukupanPenghasilan::options(), + 'kejelasanStatusLahanOptions' => SkorKejelasanStatusLahan::options(), + 'statusKepemilikanLahanOptions' => StatusKepemilikanLahanSosialEkonomi::options(), + 'pihakMembantuKonflikOptions' => PihakMembantuKonflik::options(), + 'pihakMembantuTanpaBantuanValue' => PihakMembantuKonflik::TIDAK_ADA_SELESAIKAN_SENDIRI->value, + 'statusKonflikOptions' => StatusKonflik::options(), + ]; + } + } diff --git a/app/Models/Pertanian/Petani.php b/app/Models/Pertanian/Petani.php index 54668c2..8c0bd08 100644 --- a/app/Models/Pertanian/Petani.php +++ b/app/Models/Pertanian/Petani.php @@ -6,6 +6,7 @@ use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Relations\BelongsTo; +use Illuminate\Database\Eloquent\Relations\HasOne; use Carbon\Carbon; use App\Models\Wilayah\DesaKelurahan; @@ -22,7 +23,7 @@ class Petani extends Model 'uid', 'nama', - 'telepon', + 'nomor_telepon', 'alamat', 'kk', @@ -74,4 +75,9 @@ class Petani extends Model { return $this->belongsTo(User::class, 'user_id'); } + + public function praktik_budidaya(): HasOne + { + return $this->hasOne(PraktikBudidaya::class, 'petani_id'); + } } diff --git a/app/Models/Pertanian/SosialEkonomi.php b/app/Models/Pertanian/SosialEkonomi.php index b87be0e..f3e2a1a 100644 --- a/app/Models/Pertanian/SosialEkonomi.php +++ b/app/Models/Pertanian/SosialEkonomi.php @@ -2,6 +2,13 @@ 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 Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; @@ -45,15 +52,18 @@ class SosialEkonomi extends Model 'jumlah_tanggungan' => 'integer', 'anak_masih_sekolah' => 'integer', 'yang_ikut_bekerja' => 'integer', - 'skor_periode_paceklik' => 'integer', + 'skor_periode_paceklik' => SkorPeriodePaceklik::class, 'total_estimasi_biaya_kebun_per_musim' => 'integer', - 'skor_kemampuan_menabung' => 'integer', + 'skor_kemampuan_menabung' => SkorKemampuanMenabung::class, 'estimasi_tabungan_per_bulan' => 'integer', - 'skor_kecukupan_penghasilan' => 'integer', - 'skor_kejelasan_status_lahan' => 'integer', + 'skor_kecukupan_penghasilan' => SkorKecukupanPenghasilan::class, + 'status_kepemilikan_lahan' => StatusKepemilikanLahanSosialEkonomi::class, + 'skor_kejelasan_status_lahan' => SkorKejelasanStatusLahan::class, 'ada_sertifikat_dokumen' => 'boolean', 'ada_sengketa' => 'boolean', + 'pihak_membantu_konflik' => PihakMembantuKonflik::class, 'tahun_bantuan_konflik' => 'integer', + 'status_konflik' => StatusKonflik::class, ]; public function petani(): BelongsTo diff --git a/database/migrations/2026_06_29_141634_create_praktik_budidaya_table.php b/database/migrations/2026_06_29_141634_create_praktik_budidaya_table.php new file mode 100644 index 0000000..4c1fa6b --- /dev/null +++ b/database/migrations/2026_06_29_141634_create_praktik_budidaya_table.php @@ -0,0 +1,178 @@ +id(); + $table->string('uid')->unique(); + // K2 PRAKTIK BUDIDAYA + // 2.2 Persiapan Lahan & Penanaman + $table->foreignID('petani_id')->constrained('petani')->onDelete('cascade'); + $table->string('tenaga_kerja')->nullable(); + // 2.3 Frekuensi Pemangkasan + $table->integer('frekuensi_pemangkasan_utama')->nullable(); + $table->jsonb('teknik_pemangkasan')->nullable(); + $table->string('frekuensi_pemangkasan_penaung')->nullable(); + $table->string('penyerbukan_manual')->nullable(); + $table->string('deskripsi_penyerbukan_manual')->nullable(); + $table->string('tingkat_keberhasilan_penyerbukan')->nullable(); + // 2.4 Praktik Pemupukan + $table->integer('pemberian_pupuk')->nullable(); + $table->string('jenis_pupuk')->nullable(); + $table->string('frekuensi_pemberian_pupuk')->nullable(); + $table->decimal('estimasi_dosis_pupuk_organik', 10, 2)->nullable(); + $table->decimal('estimasi_dosis_pupuk_anorganik', 10, 2)->nullable(); + $table->string('waktu_pemberian_pupuk')->nullable(); + $table->string('cara_pemberian_pupuk')->nullable(); + // 2.5 Pengendalian Organisme Pengganggu Tumbuhan (OPT) + $table->integer('metode_penanganan_opt')->nullable(); + $table->string('jenis_hama')->nullable(); + $table->string('jenis_penyakit')->nullable(); + $table->string('intensitas_serangan')->nullable(); + $table->string('waktu_kemunculan_terparah')->nullable(); + $table->string('metode_paling_sering_dilakukan')->nullable(); + $table->integer('volume_obat_obatan_permusim')->nullable(); + $table->string('satuan_volume_obat_obatan')->nullable(); + // 2.6 Sanitasi Kebun + $table->integer('frekuensi_sanitasi_lahan')->nullable(); + $table->string('penanganan_sisa_buah_ranting')->nullable(); + $table->integer('penanganan_gulma')->nullable(); + // 2.7 Pengelolaan Air & irigasi + $table->integer('kondisi_pengelolaan_air')->nullable(); + $table->string('sumber_air')->nullable(); + $table->string('sistem_irigasi')->nullable(); + $table->string('kebutuhan_air_permusim')->nullable(); + + // 2.8 Praktik konservasi tanah + $table->string('praktik_konservasi_tanah')->nullable(); + $table->string('pemahaman_manfaat_konservasi_tanah')->nullable(); + $table->integer('nilai_konservasi_tanah')->nullable(); + + // 2.9 Struktur Biaya Produksi Per Musim + $table->decimal('upah_tenaga_kerja', 10, 2)->nullable(); + $table->decimal('biaya_bibit', 10, 2)->nullable(); + $table->decimal('biaya_pupuk', 10, 2)->nullable(); + $table->decimal('biaya_obat_obatan', 10, 2)->nullable(); + $table->decimal('biaya_sewa_alat', 10, 2)->nullable(); + $table->decimal('biaya_penyediaan_air', 10, 2)->nullable(); + $table->decimal('biaya_lainnya', 10, 2)->nullable(); + $table->decimal('total_estimasi_biaya', 10, 2)->nullable(); + + // K4 Produktivitas + // 4.3 Kehilangan Akibat OPT + $table->string('estimasi_kehilangan_akibat_opt')->nullable(); + $table->string('estimasi_kehilangan_akibat_hama_penyakit')->nullable(); + + $table->foreignId('created_by')->nullable()->constrained('users')->onDelete('set null'); + $table->foreignId('updated_by')->nullable()->constrained('users')->onDelete('set null'); + $table->foreignId('deleted_by')->nullable()->constrained('users')->onDelete('set null'); + $table->timestamps(); + $table->softDeletes(); + }); + + Schema::create('panen', function (Blueprint $table) { + $table->id(); + $table->string('uid')->unique(); + $table->foreignId('petani_id')->nullable()->constrained('petani')->onDelete('set null'); + + // K3 PANEN & PENANGANAN AWAL + // 3.1 Cara Menetukan Kematangan + $table->integer('cara_menetukan_kematangan')->nullable(); + // 3.2 Frekuensi Panen + $table->integer('frekuensi_panen_pertahun')->nullable(); + $table->string('bulan_panen_utama')->nullable(); + // 3.4 Hasil Panen Aktual + $table->decimal('hasil_komoditas_utama_permusim_kg', 10, 2)->nullable(); + $table->decimal('hasil_komoditas_lainnya_permusim_kg', 10, 2)->nullable(); + $table->string('tujuan_panen')->nullable(); + // 3.5 Penanganan Awal Setelah Panen + $table->integer('praktik_sortasi')->nullable(); + $table->string('bentuk_sortasi')->nullable(); + // 3.8 Hasil Panen Reject & Estimasi Biaya Panen + $table->integer('hasil_panen_reject')->nullable(); + $table->string('jumlah_panen_reject')->nullable(); + $table->string('tindakan_terhadap_panen_reject')->nullable(); + $table->decimal('estimasi_biaya_panen', 10, 2)->nullable(); + $table->decimal('upah_tenaga_panen', 10, 2)->nullable(); + $table->decimal('biaya_pengangkutan', 10, 2)->nullable(); + $table->decimal('biaya_wadah', 10, 2)->nullable(); + $table->decimal('biaya_sewa_alat', 10, 2)->nullable(); + $table->decimal('biaya_lainnya', 10, 2)->nullable(); + $table->decimal('total_estimasi_biaya_panen', 10, 2)->nullable(); + // K4 Produktivitas + // 4.3 Kehilangan Akibat OPT + $table->string('estimasi_kehilangan_akibat_opt')->nullable(); + $table->string('estimasi_kehilangan_akibat_hama_penyakit')->nullable(); + + $table->foreignId('created_by')->nullable()->constrained('users')->onDelete('set null'); + $table->foreignId('updated_by')->nullable()->constrained('users')->onDelete('set null'); + $table->foreignId('deleted_by')->nullable()->constrained('users')->onDelete('set null'); + $table->timestamps(); + $table->softDeletes(); + }); + + Schema::create('produktivitas', function (Blueprint $table) { + $table->id(); + $table->string('uid')->unique(); + $table->foreignId('petani_id')->nullable()->constrained('petani')->onDelete('set null'); + $table->foreignId('komoditas_id')->nullable()->constrained('master_komoditas')->onDelete('set null'); + $table->foreignId('jenis_komoditas_id')->nullable()->constrained('jenis_komoditas')->onDelete('set null'); + $table->foreignId('varietas_id')->nullable()->constrained('master_varietas')->onDelete('set null'); + $table->decimal('kuantitas_pertahun', 10, 2)->nullable(); + $table->foreignId('created_by')->nullable()->constrained('users')->onDelete('set null'); + $table->foreignId('updated_by')->nullable()->constrained('users')->onDelete('set null'); + $table->foreignId('deleted_by')->nullable()->constrained('users')->onDelete('set null'); + $table->timestamps(); + $table->softDeletes(); + }); + + Schema::create('pelatihan', function (Blueprint $table) { + $table->id(); + $table->string('uid')->unique(); + $table->foreignId('petani_id')->nullable()->constrained('petani')->onDelete('set null'); + $table->string('jenis_pelatihan'); + $table->string('penyelenggara'); + $table->date('tahun_pelaksanaan'); + $table->foreignId('created_by')->nullable()->constrained('users')->onDelete('set null'); + $table->foreignId('updated_by')->nullable()->constrained('users')->onDelete('set null'); + $table->foreignId('deleted_by')->nullable()->constrained('users')->onDelete('set null'); + $table->timestamps(); + $table->softDeletes(); + }); + + Schema::create('sertifikasi', function (Blueprint $table) { + $table->id(); + $table->string('uid')->unique(); + $table->foreignId('petani_id')->nullable()->constrained('petani')->onDelete('set null'); + $table->string('jenis_sertifikasi'); + $table->string('lembaga_penerbit'); + $table->date('tahun_pelaksanaan'); + $table->boolean('is_aktif')->default(false); + $table->foreignId('created_by')->nullable()->constrained('users')->onDelete('set null'); + $table->foreignId('updated_by')->nullable()->constrained('users')->onDelete('set null'); + $table->foreignId('deleted_by')->nullable()->constrained('users')->onDelete('set null'); + $table->timestamps(); + $table->softDeletes(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('praktik_budidaya'); + Schema::dropIfExists('pelatihan'); + Schema::dropIfExists('sertifikasi'); + Schema::dropIfExists('produktivitas'); + } +}; diff --git a/resources/views/dashboard/distribusi.blade.php b/resources/views/dashboard/distribusi.blade.php new file mode 100644 index 0000000..1b88102 --- /dev/null +++ b/resources/views/dashboard/distribusi.blade.php @@ -0,0 +1,16 @@ +@extends('layout.main') + +@section('content') +
+
+
+
{{ $title }}
+
+
+

+ Dashboard distribusi sedang disiapkan. +

+
+
+
+@endsection diff --git a/resources/views/produktivitas/petani/add.blade.php b/resources/views/produktivitas/petani/add.blade.php index c42e23a..0a1aa2d 100644 --- a/resources/views/produktivitas/petani/add.blade.php +++ b/resources/views/produktivitas/petani/add.blade.php @@ -12,16 +12,13 @@ @endif
- - - @include('produktivitas.petani.header', ['petani' => null]) - -
-
- +
+
Tambah Petani Baru
+
+
@csrf
@@ -35,7 +32,7 @@ width="120" alt="User avatar" />
@@ -157,7 +154,7 @@
+ placeholder="Cth: 081234567890" value="{{ old('nomor_telepon') }}" minlength="11" maxlength="13" /> @error('nomor_telepon')
{{ $message }}
@enderror
@@ -183,7 +180,7 @@
- +
@@ -191,7 +188,6 @@
-
@endsection @@ -278,7 +274,7 @@ status_perkawinan: { required: true }, file_ktp: { accept: "image/png, image/jpeg, image/jpg" }, file_kk: { accept: "image/png, image/jpeg, image/jpg" }, - nomor_telepon: { required: false, digits: true, maxlength: 20 } + nomor_telepon: { required: false, digits: true, minlength: 11, maxlength: 13 } }, messages: { nama: { required: "Nama petani wajib diisi" }, @@ -296,7 +292,11 @@ status_perkawinan: { required: "Status perkawinan wajib diisi" }, file_ktp: { accept: "Format file tidak valid. Harap unggah file berupa gambar (PNG, JPEG, JPG)" }, file_kk: { accept: "Format file tidak valid. Harap unggah file berupa gambar (PNG, JPEG, JPG)" }, - nomor_telepon: { digits: "Nomor telepon harus berupa angka", maxlength: "Nomor telepon maksimal 20 digit" } + nomor_telepon: { + digits: "Nomor telepon harus berupa angka", + minlength: "Nomor telepon minimal 11 digit", + maxlength: "Nomor telepon maksimal 13 digit" + } }, errorElement: 'div', errorPlacement: function (error, element) { @@ -312,4 +312,4 @@ }); }); -@endpush \ No newline at end of file +@endpush diff --git a/resources/views/produktivitas/petani/akses-pasar/index.blade.php b/resources/views/produktivitas/petani/akses-pasar/index.blade.php index 0f3184e..f4ede0c 100644 --- a/resources/views/produktivitas/petani/akses-pasar/index.blade.php +++ b/resources/views/produktivitas/petani/akses-pasar/index.blade.php @@ -32,7 +32,7 @@
Pengalaman Saluran Lain
-
+
+ @error('alasan_berhenti')
{{ $message }}
@enderror +
+ +
@php($saluran = old('saluran_terdahulu', $aksesPasar?->saluran_terdahulu ?? [])) + @error('saluran_terdahulu_lainnya')
{{ $message }}
@enderror
- -
- - - @error('alasan_berhenti')
{{ $message }}
@enderror -
HARGA DI SETIAP TITIK
@@ -124,40 +124,58 @@
PELUANG NILAI TAMBAH
-
Praktik Fermentasi
-

Apakah sudah ada praktik fermentasi atau pengolahan pascapanen yang Ibu/Bapak lakukan, bagaimana prosesnya dilakukan?

- -
-
- - - @error('praktik_fermentasi')
{{ $message }}
@enderror + +
+ +
+
Detail Praktik Fermentasi
+

Apakah sudah ada praktik fermentasi atau pengolahan pascapanen yang Ibu/Bapak lakukan?

-
- - - @error('proses_fermentasi')
{{ $message }}
@enderror -
+
+
+
+ +
+
+ + @error('praktik_fermentasi')
{{ $message }}
@enderror +
+
-
- - - @error('model_fermentasi_memungkinkan')
{{ $message }}
@enderror +
+
+ +
+
+ + @error('proses_fermentasi')
{{ $message }}
@enderror +
+
+ +
+
+ +
+
+ + @error('model_fermentasi_memungkinkan')
{{ $message }}
@enderror +
+
AKSES PASAR PREMIUM
Kesadaran Pasar Premium*
-
+
@error('sumber_info_premium')
{{ $message }}
@enderror diff --git a/resources/views/produktivitas/petani/edit.blade.php b/resources/views/produktivitas/petani/edit.blade.php index 2848cba..a61b21c 100644 --- a/resources/views/produktivitas/petani/edit.blade.php +++ b/resources/views/produktivitas/petani/edit.blade.php @@ -159,7 +159,7 @@
+ placeholder="Cth: 081234567890" value="{{ old('nomor_telepon', $petani->nomor_telepon) }}" minlength="11" maxlength="13" /> @error('nomor_telepon')
{{ $message }}
@enderror
@@ -303,7 +303,7 @@ status_perkawinan: { required: true }, file_ktp: { accept: "image/png, image/jpeg, image/jpg" }, file_kk: { accept: "image/png, image/jpeg, image/jpg" }, - nomor_telepon: { required: false, digits: true, maxlength: 20 } + nomor_telepon: { required: false, digits: true, minlength: 11, maxlength: 13 } }, messages: { nama: { required: "Nama petani wajib diisi" }, @@ -321,7 +321,11 @@ status_perkawinan: { required: "Status perkawinan wajib diisi" }, file_ktp: { accept: "Format file tidak valid. Harap unggah file berupa gambar (PNG, JPEG, JPG)" }, file_kk: { accept: "Format file tidak valid. Harap unggah file berupa gambar (PNG, JPEG, JPG)" }, - nomor_telepon: { digits: "Nomor telepon harus berupa angka", maxlength: "Nomor telepon maksimal 20 digit" } + nomor_telepon: { + digits: "Nomor telepon harus berupa angka", + minlength: "Nomor telepon minimal 11 digit", + maxlength: "Nomor telepon maksimal 13 digit" + } }, errorElement: 'div', @@ -338,4 +342,4 @@ }); }); -@endpush \ No newline at end of file +@endpush diff --git a/resources/views/produktivitas/petani/header.blade.php b/resources/views/produktivitas/petani/header.blade.php index 05a0152..c764ab2 100644 --- a/resources/views/produktivitas/petani/header.blade.php +++ b/resources/views/produktivitas/petani/header.blade.php @@ -1,68 +1,60 @@ -
-
-
-
-
Profil Petani
-
-
-
-
- Avatar +
+ +
+
+
+
Profil Petani
+
+
+ Avatar
-
{{ $petani ? $petani->nama : 'Tambah Petani Baru' }}
- {{ $petani ? ($petani->jenis_kelamin == 1 ? 'Laki-laki' : 'Perempuan') : 'Jenis Kelamin' }} - Komoditas: {{ $petani ? $petani->komoditas?->nama : 'Komoditas' }} +
{{ $petani ? $petani->nama : 'Tambah Petani Baru' }}
+ {{ $petani ? ($petani->jenis_kelamin == 1 ? 'Laki-laki' : 'Perempuan') : 'Jenis Kelamin' }} + Komoditas: {{ $petani ? $petani->komoditas?->nama : 'Komoditas' }}
-
Domisili
-

Alamat: {{ $petani ? $petani->alamat : 'Alamat' }}

-

{{ $petani ? $petani->desaKelurahan->nama : 'Desa/Kelurahan' }}, {{ $petani ? $petani->desaKelurahan->kecamatan->nama : 'Kecamatan' }}, {{ $petani ? $petani->desaKelurahan->kecamatan->kabupatenKota->nama : 'Kabupaten/Kota' }}, {{ $petani ? $petani->desaKelurahan->kecamatan->kabupatenKota->provinsi->nama : 'Provinsi' }}

+ +
Domisili
+

Alamat: {{ $petani ? $petani->alamat : 'Alamat' }}

+

{{ $petani ? $petani->desaKelurahan->nama : 'Desa/Kelurahan' }}, {{ $petani ? $petani->desaKelurahan->kecamatan->nama : 'Kecamatan' }}, {{ $petani ? $petani->desaKelurahan->kecamatan->kabupatenKota->nama : 'Kabupaten/Kota' }}, {{ $petani ? $petani->desaKelurahan->kecamatan->kabupatenKota->provinsi->nama : 'Provinsi' }}

-
-
-
-
-
-
-
+ +
+ +
+
+
+
-

Segmentasi

-

Penggerak

+

In-store Sales

+

$5,345.43

- Pemerhati Teknis + 5k orders+5.7%

- +
-
-
+
-

Lahan

-

15600 m2

-

- 100 tanaman kopiSehat -

+

In-store Sales

+
$5,345.43
+

5k orders+5.7%

- - - - - +
-
-
+

Praktik Budidaya

2 kali

@@ -142,8 +134,48 @@
+ +
+
+
+
+
+
+
+

In-store Sales

+
$5,345.43
+

5k orders+5.7%

+
+ +
+
+
+
+
+

In-store Sales

+
$5,345.43
+

5k orders+5.7%

+
+ +
+
+
+
+
+

In-store Sales

+
$5,345.43
+

5k orders+5.7%

+
+ +
+
+
+
+
+
+
-
+
- @push('scripts') +@push('scripts') +@endpush \ No newline at end of file diff --git a/resources/views/produktivitas/petani/praktik-budidaya/add.blade.php b/resources/views/produktivitas/petani/praktik-budidaya/add.blade.php index 6ccdfda..0537add 100644 --- a/resources/views/produktivitas/petani/praktik-budidaya/add.blade.php +++ b/resources/views/produktivitas/petani/praktik-budidaya/add.blade.php @@ -1,6 +1,12 @@ @extends('layout.main') @section('content') +@use('App\Enums\PraktikBudidaya\TenagaKerja') +@use('App\Enums\PraktikBudidaya\FrekuensiPemangkasanUtama') +@use('App\Enums\PraktikBudidaya\FrekuensiPemangkasanPendamping') +@use('App\Enums\PraktikBudidaya\PenyerbukanManual') +@use('App\Enums\PraktikBudidaya\PemberianPupuk') +@use('App\Enums\PraktikBudidaya\JenisPupuk')
@if ($errors->any())
@@ -11,213 +17,486 @@
@endif -
- - -
- @include('produktivitas.petani.header', ['petani' => $petani]) - -
-
- -
Persiapan Lahan & Tanaman
-
-
- - - @error('tenaga_kerja')
{{ $message }}
@enderror +
+ @csrf +
+
+
Persiapan Lahan & Tanaman
+
+
+ + + @error('tenaga_kerja')
{{ $message }}
@enderror +
-
-
Praktik Pemangkasan & Penyerbukan
-
-
- - - @error('frekuensi_pemangkasan_komoditas_utama')
{{ $message }}
@enderror +
Praktik Pemangkasan & Penyerbukan
+
+
+ + + @error('frekuensi_pemangkasan_komoditas_utama')
{{ $message }}
@enderror +
+
+ +
+ teknik_pemangkasan, true))) && in_array('bentuk', old('teknik_pemangkasan', json_decode($petani->teknik_pemangkasan, true)))) ? 'checked' : '' }}> + +
+
+ teknik_pemangkasan, true))) && in_array('produksi', old('teknik_pemangkasan', json_decode($petani->teknik_pemangkasan, true)))) ? 'checked' : '' }}> + +
+
+ teknik_pemangkasan, true))) && in_array('peremajaan', old('teknik_pemangkasan', json_decode($petani->teknik_pemangkasan, true)))) ? 'checked' : '' }}> + +
+
+ teknik_pemangkasan, true))) && in_array('kebiasaan', old('teknik_pemangkasan', json_decode($petani->teknik_pemangkasan, true)))) ? 'checked' : '' }}> + +
+
+ + + +
+ @error('teknik_pemangkasan') +
{{ $message }}
+ @enderror +
+
+ + + @error('frekuensi_pemangkasan_pohon_penaung')
{{ $message }}
@enderror +
-
- - -
- teknik_pemangkasan, true))) && in_array('bentuk', old('teknik_pemangkasan', json_decode($petani->teknik_pemangkasan, true)))) ? 'checked' : '' }}> - +
+
+ + + @error('penyerbukan_manual') +
{{ $message }}
+ @enderror
- -
- teknik_pemangkasan, true))) && in_array('produksi', old('teknik_pemangkasan', json_decode($petani->teknik_pemangkasan, true)))) ? 'checked' : '' }}> - -
- -
- teknik_pemangkasan, true))) && in_array('peremajaan', old('teknik_pemangkasan', json_decode($petani->teknik_pemangkasan, true)))) ? 'checked' : '' }}> - -
- -
- teknik_pemangkasan, true))) && in_array('kebiasaan', old('teknik_pemangkasan', json_decode($petani->teknik_pemangkasan, true)))) ? 'checked' : '' }}> - -
- -
- teknik_pemangkasan, true))) && in_array('lainnya', old('teknik_pemangkasan', json_decode($petani->teknik_pemangkasan, true)))) ? 'checked' : '' }}> +
+ - +
+ alasan_tidak_penyerbukan) == 'Tidak tahu caranya' ? 'checked' : '' }}> + +
+ +
+ alasan_tidak_penyerbukan) == 'Tidak ada tenaga/waktu' ? 'checked' : '' }}> + +
+ +
+ alasan_tidak_penyerbukan) == 'Mengandalkan penyerbuk alami' ? 'checked' : '' }}> + +
+ +
+ + + + + +
+ + @error('alasan_tidak_penyerbukan') +
{{ $message }}
+ @enderror +
+
+ - -
+
+ tingkat_keberhasilan_penyerbukan) == 'Tinggi, sebagian besar bunga berhasil menjadi buah' ? 'checked' : '' }}> + +
- @error('teknik_pemangkasan') -
{{ $message }}
- @enderror +
+ tingkat_keberhasilan_penyerbukan) == 'Sedang, sekitar separuh bunga berhasil menjadi buah' ? 'checked' : '' }}> + +
+ +
+ tingkat_keberhasilan_penyerbukan) == 'Rendah, hanya sedikit bunga yang berhasil menjadi buah' ? 'checked' : '' }}> + +
+ + @error('tingkat_keberhasilan_penyerbukan') +
{{ $message }}
+ @enderror +
-
- - - @error('frekuensi_pemangkasan_pohon_penaung')
{{ $message }}
@enderror -
-
-
-
- - -
- penyerbukan_manual) == 'Selalu, setiap musim berbunga' ? 'checked' : '' }}> - +
Praktik Pemupukan
+
+
+ + + @error('pemberian_pupuk')
{{ $message }}
@enderror
- -
- penyerbukan_manual) == 'Kadang-kadang, tergantung kondisi' ? 'checked' : '' }}> - +
+ + + @error('jenis_pupuk')
{{ $message }}
@enderror
- -
- penyerbukan_manual) == 'Tidak pernah' ? 'checked' : '' }}> - -
- - @error('penyerbukan_manual') -
{{ $message }}
- @enderror -
-
- - -
- alasan_tidak_penyerbukan) == 'Tidak tahu caranya' ? 'checked' : '' }}> - -
- -
- alasan_tidak_penyerbukan) == 'Tidak ada tenaga/waktu' ? 'checked' : '' }}> - -
- -
- alasan_tidak_penyerbukan) == 'Mengandalkan penyerbuk alami' ? 'checked' : '' }}> - -
- -
- alasan_tidak_penyerbukan) == 'lainnya' ? 'checked' : '' }}> +
+ - - - -
+
+ frekuensi_pemupukan) == '1 kali/tahun' ? 'checked' : '' }}> + +
- @error('alasan_tidak_penyerbukan') -
{{ $message }}
- @enderror +
+ frekuensi_pemupukan) == '2 kali/tahun' ? 'checked' : '' }}> + +
+ +
+ frekuensi_pemupukan) == 'Lebih dari 2 kali/tahun' ? 'checked' : '' }}> + +
+ +
+ + + + + +
+ + @error('frekuensi_pemupukan') +
{{ $message }}
+ @enderror +
+
+ + +
+ + + Kg +
+ + @error('estimasi_dosis_pupuk_organik') +
{{ $message }}
+ @enderror +
+
+ + +
+ + + Kg +
+ + @error('estimasi_dosis_pupuk_anorganik') +
{{ $message }}
+ @enderror +
+
+ + +
+ waktu_pemberian_pupuk) == 'Awal musim hujan' ? 'checked' : '' }}> + +
+ +
+ waktu_pemberian_pupuk) == 'Akhir musim hujan' ? 'checked' : '' }}> + +
+ +
+ waktu_pemberian_pupuk) == 'Sebelum berbunga' ? 'checked' : '' }}> + +
+ +
+ waktu_pemberian_pupuk) == 'Sebelum Setelah Panen' ? 'checked' : '' }}> + +
+ +
+ waktu_pemberian_pupuk) == 'Tidak Menentu' ? 'checked' : '' }}> + +
+ +
+ + + + + +
+ + @error('waktu_pemberian_pupuk') +
{{ $message }}
+ @enderror +
+
+ + +
+ cara_pemberian_pupuk) == 'Ditabur di sekitar pohon' ? 'checked' : '' }}> + +
+ +
+ cara_pemberian_pupuk) == 'Dibenamkan dalam lubang/parit' ? 'checked' : '' }}> + +
+ +
+ cara_pemberian_pupuk) == 'Dicairkan/dikocor' ? 'checked' : '' }}> + +
+ +
+ cara_pemberian_pupuk) == 'Disemprotkan ke daun' ? 'checked' : '' }}> + +
+ +
+ + + + + +
+ + @error('cara_pemberian_pupuk') +
{{ $message }}
+ @enderror +
+
+
+
-
-
-
-
+
@@ -228,66 +507,26 @@ 'use strict'; $(document).ready(function () { - $('#edit-petani-jenis-kelamin, #edit-petani-pendidikan-terakhir, #edit-petani-pekerjaan-utama, #edit-petani-komoditas, #edit-petani-pekerjaan-sampingan, #edit-petani-komoditas-sampingan, #edit-petani-status-pernikahan, #edit-petani-status-keluarga, #edit-petani-petani-pengumpul').select2(); + $('#tenaga-kerja, #frekuensi-pemangkasan-komoditas-utama, #frekuensi-pemangkasan-pohon-penaung, #penyerbukan-manual, #pemberian-pupuk, #jenis-pupuk').select2(); - $('#edit-petani-provinsi').select2().change(function(e) { - e.preventDefault(); - var provinsiId = $(this).val(); - $('#edit-petani-kabupaten').prop('disabled', !provinsiId).val('').trigger('change'); - $('#edit-petani-kecamatan').prop('disabled', true).val('').trigger('change'); - $('#edit-petani-desa').prop('disabled', true).val('').trigger('change'); + const $switch = $('input[name="disimpan_untuk_diri_sendiri"]'); + const $text = $('#switch-text'); - if (provinsiId) { - $.ajax({ - url: '{{ route("kabupatenkota.byprovinsi", ":id") }}'.replace(':id', provinsiId), - method: 'GET', - success: function(data) { - $('#edit-petani-kabupaten').empty().append(''); - data.forEach(function(kabupaten) { - $('#edit-petani-kabupaten').append(''); - }); - } - }); + function updateSwitchText() { + if ($switch.is(':checked')) { + $text + .text('Ya, Sebagian Disimpan') + .removeClass('text-muted text-danger') + // .addClass('text-success'); + } else { + $text + .text('Tidak, Semua Dijual') + .removeClass('text-success') + // .addClass('text-muted'); } - }); - $('#edit-petani-kabupaten').select2().change(function(e) { - e.preventDefault(); - var kabupatenId = $(this).val(); - $('#edit-petani-kecamatan').prop('disabled', !kabupatenId).val('').trigger('change'); - $('#edit-petani-desa').prop('disabled', true).val('').trigger('change'); - - if (kabupatenId) { - $.ajax({ - url: '{{ route("kecamatan.bykabupatenkota", ":id") }}'.replace(':id', kabupatenId), - method: 'GET', - success: function(data) { - $('#edit-petani-kecamatan').empty().append(''); - data.forEach(function(kecamatan) { - $('#edit-petani-kecamatan').append(''); - }); - } - }); - } - }); - $('#edit-petani-kecamatan').select2().change(function(e) { - e.preventDefault(); - var kecamatanId = $(this).val(); - $('#edit-petani-desa').prop('disabled', !kecamatanId).val('').trigger('change'); - - if (kecamatanId) { - $.ajax({ - url: '{{ route("desakelurahan.bykecamatan", ":id") }}'.replace(':id', kecamatanId), - method: 'GET', - success: function(data) { - $('#edit-petani-desa').empty().append(''); - data.forEach(function(desa) { - $('#edit-petani-desa').append(''); - }); - } - }); - } - }); - $('#edit-petani-desa').select2(); + } + updateSwitchText(); + $switch.on('change', updateSwitchText); $('#editPetaniForm').validate({ diff --git a/resources/views/produktivitas/petani/praktik-budidaya/edit.blade.php b/resources/views/produktivitas/petani/praktik-budidaya/edit.blade.php new file mode 100644 index 0000000..f7f61f1 --- /dev/null +++ b/resources/views/produktivitas/petani/praktik-budidaya/edit.blade.php @@ -0,0 +1,1437 @@ +@extends('layout.main') + +@section('content') +@use('App\Enums\PraktikBudidaya\TenagaKerja') +@use('App\Enums\PraktikBudidaya\FrekuensiPemangkasanUtama') +@use('App\Enums\PraktikBudidaya\FrekuensiPemangkasanPendamping') +@use('App\Enums\PraktikBudidaya\PenyerbukanManual') +@use('App\Enums\PraktikBudidaya\PemberianPupuk') +@use('App\Enums\PraktikBudidaya\JenisPupuk') +@use('App\Enums\PraktikBudidaya\MetodePenangananHamaPenyakit') +@use('App\Enums\PraktikBudidaya\IntensitasSeranganHamaPenyakit') +@use('App\Enums\PraktikBudidaya\WaktuKemunculanTerparahHamaPenyakit') +@use('App\Enums\PraktikBudidaya\FrekuensiSanitasiLahan') +@use('App\Enums\PraktikBudidaya\PenangananSisaBuahRanting') +@use('App\Enums\PraktikBudidaya\PenangananGulma') +@use('App\Enums\PraktikBudidaya\KondisiPengelolaanAir') +@use('App\Enums\PraktikBudidaya\KebutuhanAirPermusim') +@use('App\Enums\PraktikBudidaya\PemahamanManfaatKonservasi') +
+ @if ($errors->any()) +
+
    + @foreach ($errors->all() as $error) +
  • {{ $error }}
  • + @endforeach +
+
+ @endif +
+
+ @include('produktivitas.petani.header', ['petani' => $petani]) +
+ @csrf + @method('PUT') +
+
+
Persiapan Lahan & Tanaman
+
+
+ + + @error('tenaga_kerja')
{{ $message }}
@enderror +
+
+
Praktik Pemangkasan & Penyerbukan
+
+
+ + + @error('frekuensi_pemangkasan_komoditas_utama')
{{ $message }}
@enderror +
+
+ +
+ teknik_pemangkasan ?? [])) ? 'checked' : '' }}> + +
+
+ teknik_pemangkasan ?? [])) ? 'checked' : '' }}> + +
+
+ teknik_pemangkasan ?? [])) ? 'checked' : '' }}> + +
+
+ teknik_pemangkasan ?? [])) ? 'checked' : '' }}> + +
+
+ + + + + +
+ @error('teknik_pemangkasan') +
{{ $message }}
+ @enderror +
+
+ + + @error('frekuensi_pemangkasan_pohon_penaung')
{{ $message }}
@enderror +
+
+
+
+ + + @error('penyerbukan_manual') +
{{ $message }}
+ @enderror +
+
+ + +
+ deskripsi_penyerbukan_manual) == 'Tidak tahu caranya' ? 'checked' : '' }}> + +
+ +
+ deskripsi_penyerbukan_manual) == 'Tidak ada tenaga/waktu' ? 'checked' : '' }}> + +
+ +
+ deskripsi_penyerbukan_manual) == 'Mengandalkan penyerbuk alami' ? 'checked' : '' }}> + +
+ +
+ + + + + +
+ + @error('alasan_tidak_penyerbukan') +
{{ $message }}
+ @enderror +
+
+ + +
+ tingkat_keberhasilan_penyerbukan) == 'Tinggi, sebagian besar bunga berhasil menjadi buah' ? 'checked' : '' }}> + +
+ +
+ tingkat_keberhasilan_penyerbukan) == 'Sedang, sekitar separuh bunga berhasil menjadi buah' ? 'checked' : '' }}> + +
+ +
+ tingkat_keberhasilan_penyerbukan) == 'Rendah, hanya sedikit bunga yang berhasil menjadi buah' ? 'checked' : '' }}> + +
+ + @error('tingkat_keberhasilan_penyerbukan') +
{{ $message }}
+ @enderror +
+
+
Praktik Pemupukan
+
+
+ + + @error('pemberian_pupuk')
{{ $message }}
@enderror +
+
+ + + @error('jenis_pupuk')
{{ $message }}
@enderror +
+
+ + +
+ frekuensi_pemberian_pupuk) == '1 kali/tahun' ? 'checked' : '' }}> + +
+ +
+ frekuensi_pemberian_pupuk) == '2 kali/tahun' ? 'checked' : '' }}> + +
+ +
+ frekuensi_pemberian_pupuk) == 'Lebih dari 2 kali/tahun' ? 'checked' : '' }}> + +
+ +
+ + + + + +
+ + @error('frekuensi_pemupukan') +
{{ $message }}
+ @enderror +
+
+ + +
+ + + Kg +
+ + @error('estimasi_dosis_pupuk_organik') +
{{ $message }}
+ @enderror +
+
+ + +
+ + + Kg +
+ + @error('estimasi_dosis_pupuk_anorganik') +
{{ $message }}
+ @enderror +
+
+ + +
+ waktu_pemberian_pupuk) == 'Awal musim hujan' ? 'checked' : '' }}> + +
+ +
+ waktu_pemberian_pupuk) == 'Akhir musim hujan' ? 'checked' : '' }}> + +
+ +
+ waktu_pemberian_pupuk) == 'Sebelum berbunga' ? 'checked' : '' }}> + +
+ +
+ waktu_pemberian_pupuk) == 'Sebelum Setelah Panen' ? 'checked' : '' }}> + +
+ +
+ waktu_pemberian_pupuk) == 'Tidak Menentu' ? 'checked' : '' }}> + +
+ +
+ + + + + +
+ + @error('waktu_pemberian_pupuk') +
{{ $message }}
+ @enderror +
+
+ + +
+ cara_pemberian_pupuk) == 'Ditabur di sekitar pohon' ? 'checked' : '' }}> + +
+ +
+ cara_pemberian_pupuk) == 'Dibenamkan dalam lubang/parit' ? 'checked' : '' }}> + +
+ +
+ cara_pemberian_pupuk) == 'Dicairkan/dikocor' ? 'checked' : '' }}> + +
+ +
+ cara_pemberian_pupuk) == 'Disemprotkan ke daun' ? 'checked' : '' }}> + +
+ +
+ + + + + +
+ + @error('cara_pemberian_pupuk') +
{{ $message }}
+ @enderror +
+
+
+ +
+
+
+
+ +
+ + @csrf + @method('PUT') + +
+
+ +
Pengendalian Organisme Pengganggu Tumbuhan (OPT)
+
+
+ + + @error('metode_penanganan_hama_penyakit')
{{ $message }}
@enderror +
+
+ + +
+ jenis_hama ?? [])) ? 'checked' : '' }}> + +
+ +
+ jenis_hama ?? [])) ? 'checked' : '' }}> + +
+ +
+ jenis_hama ?? [])) ? 'checked' : '' }}> + +
+ +
+ jenis_hama ?? [])) ? 'checked' : '' }}> + +
+ +
+ jenis_hama ?? [])) ? 'checked' : '' }}> + +
+ @error('jenis_hama') +
{{ $message }}
+ @enderror +
+
+ + +
+ jenis_penyakit ?? [])) ? 'checked' : '' }} + +
+ +
+ jenis_penyakit ?? [])) ? 'checked' : '' }} + +
+ +
+ jenis_penyakit ?? [])) ? 'checked' : '' }} + +
+ +
+ jenis_penyakit ?? [])) ? 'checked' : '' }} + +
+ +
+ jenis_penyakit ?? [])) ? 'checked' : '' }} + +
+ + @error('jenis_penyakit') +
{{ $message }}
+ @enderror +
+
+ + + @error('intensitas_serangan')
{{ $message }}
@enderror +
+
+ + + @error('waktu_kemunculan_terparah')
{{ $message }}
@enderror +
+
+ + + @error('metode_paling_sereng_dilakukan')
{{ $message }}
@enderror +
+
+ + +
+ + + Kg +
+ + @error('volume_obat_obatan_permusim') +
{{ $message }}
+ @enderror +
+
+
Sanitasi Kebun
+
+
+ + + @error('frekuensi_sanitasi_lahan')
{{ $message }}
@enderror +
+
+ + + @error('penanganan_sisa_buah_ranting')
{{ $message }}
@enderror +
+
+ + + @error('penanganan_gulma')
{{ $message }}
@enderror +
+
+
Pengelolaan Air & Irigasi
+
+
+ + + @error('kondisi_pengelolaan_air_irigasi')
{{ $message }}
@enderror +
+
+ + +
+ sumber_air) == 'Sungai/mata air' ? 'checked' : '' }}> + +
+ +
+ sumber_air) == 'Sumur' ? 'checked' : '' }}> + +
+ +
+ sumber_air) == 'Mengandalkan hujan saja' ? 'checked' : '' }}> + +
+ +
+ + + + + +
+ + @error('sumber_air') +
{{ $message }}
+ @enderror +
+
+ + +
+ sistem_irigasi) == 'Tidak ada irigasi' ? 'checked' : '' }}> + +
+ +
+ sistem_irigasi) == 'Milik sendiri' ? 'checked' : '' }}> + +
+ +
+ sistem_irigasi) == 'Milik komunitas/kelompok tani' ? 'checked' : '' }}> + +
+ +
+ sistem_irigasi) == 'Milik pemerintah' ? 'checked' : '' }}> + +
+ +
+ + + + + +
+ + @error('sistem_irigasi') +
{{ $message }}
+ @enderror +
+
+ + + @error('kebutuhan_air_permusim')
{{ $message }}
@enderror +
+
+
Praktik Konservasi Tanah
+
+
+ + +
+ kebiasaan_konservasi_tanah ?? [])) ? 'checked' : '' }}> + +
+ +
+ kebiasaan_konservasi_tanah ?? [])) ? 'checked' : '' }}> + +
+ +
+ kebiasaan_konservasi_tanah ?? [])) ? 'checked' : '' }}> + +
+ +
+ kebiasaan_konservasi_tanah ?? [])) ? 'checked' : '' }}> + +
+ +
+ kebiasaan_konservasi_tanah ?? [])) ? 'checked' : '' }}> + +
+ @error('jenis_hama') +
{{ $message }}
+ @enderror +
+
+ + + @error('pemahaman_manfaat_konservasi')
{{ $message }}
@enderror +
+
+
+ +
+
+
+
+
+ + @csrf + @method('PUT') + +
+
+ +
Struktur Biaya Produksi Permusim
+
+
+ + + @error('upah_tenaga_kerja')
{{ $message }}
@enderror +
+
+ + + @error('biaya_bibit')
{{ $message }}
@enderror +
+
+ + + @error('biaya_pupuk')
{{ $message }}
@enderror +
+
+ + + @error('biaya_pestisida')
{{ $message }}
@enderror +
+
+ + + @error('biaya_sewa_alat')
{{ $message }}
@enderror +
+
+ + + @error('biaya_penyediaan-air')
{{ $message }}
@enderror +
+
+ + + @error('biaya_lainnya')
{{ $message }}
@enderror +
+
+ + + @error('total_estimasi_biaya_produksi')
{{ $message }}
@enderror +
+
+
Cara Mementukan Kematangan
+
+
+ + + @error('dasar_penentuan_panen')
{{ $message }}
@enderror +
+
+
Frekuensi & Waktu Panen
+
+
+ + +
+ + + Panen/Tahun +
+ + @error('frekuensi_panen_pertahun') +
{{ $message }}
+ @enderror +
+
+ + + @error('bulan_panen_utama')
{{ $message }}
@enderror +
+
+
Hasil Panen Aktual
+
+
+ + +
+ + + Kg/Tahun +
+ + @error('hasil_panen_komoditas_utama') +
{{ $message }}
+ @enderror +
+
+ + +
+ + + Kg/Tahun +
+ + @error('hasil_panen_komoditas_lainnya') +
{{ $message }}
+ @enderror +
+
+ + + +
+
+
+
+ + +
+ + + Kg/Tahun +
+ + @error('hasil_panen_disimpan') +
{{ $message }}
+ @enderror +
+
+ + + @error('tujuan_disimpan')
{{ $message }}
@enderror +
+
+
+ +
+
+
+
+
+ + @csrf + @method('PUT') + +
+
+
Penanganan Awal Setelah Panen
+
+
+ + + @error('praktik_sortasi')
{{ $message }}
@enderror +
+
+ + + @error('bentuk_sortasi')
{{ $message }}
@enderror +
+
+
Hasil Panen Reject & Estimasi Biaya Panen
+
+
+ + + @error('upah_tenaga_panen')
{{ $message }}
@enderror +
+
+ + + @error('biaya_pengangkutan')
{{ $message }}
@enderror +
+
+ + + @error('biaya_wadah_kemasan')
{{ $message }}
@enderror +
+
+ + + @error('biaya_sewa_alat_panen')
{{ $message }}
@enderror +
+
+ + + @error('biaya_panen_lainnya')
{{ $message }}
@enderror +
+
+ + + @error('total_estimasi_biaya_panen')
{{ $message }}
@enderror +
+
+
+ +
+
+
+
+
+
+
+ Produktivitas Rata-rata 3 Musim Panen Terakhir per Komoditas +
+
+
+
+
+
+ + +
+
+ +
+ + Kg +
+
+
+ +
+ + +
+
+ + +
+
+
+ + +
+
+
+
+
+
+ +
+
+ +
+
+
+ + @csrf + @method('PUT') + +
+
+
Kehilangan Hasil Akibat Organisme Pengganggu Tumbuhan (OPT)
+
+
+ + +
+ estimasi_kehilangan_hasil) == 'Selalu, setiap musim berbunga' ? 'checked' : '' }}> + +
+ +
+ estimasi_kehilangan_hasil) == 'Kadang-kadang, tergantung kondisi' ? 'checked' : '' }}> + +
+ +
+ estimasi_kehilangan_hasil) == 'Tidak pernah' ? 'checked' : '' }}> + +
+ +
+ estimasi_kehilangan_hasil) == 'Lainnya' ? 'checked' : '' }}> + + + + +
+ + @error('estimasi_kehilangan_hasil') +
{{ $message }}
+ @enderror +
+
+
+ +
+
+
+
+
+
+
+@endsection + +@push('scripts') + +@endpush \ No newline at end of file diff --git a/resources/views/produktivitas/petani/sosial-ekonomi/edit.blade.php b/resources/views/produktivitas/petani/sosial-ekonomi/edit.blade.php index d440615..df75a1f 100644 --- a/resources/views/produktivitas/petani/sosial-ekonomi/edit.blade.php +++ b/resources/views/produktivitas/petani/sosial-ekonomi/edit.blade.php @@ -66,11 +66,11 @@ @for($i = 0; $i < 2; $i++) - @php($item = $pendapatanKomoditasUtama->get($i)) + @php $item = $pendapatanKomoditasUtama->get($i) @endphp - @php($selectedKomoditas = old("pendapatan_komoditas.$i.komoditas", $item?->komoditas)) + @php $selectedKomoditas = old("pendapatan_komoditas.$i.komoditas", $item?->komoditas) @endphp - @php($pendapatanValue = old("pendapatan_komoditas.$i.pendapatan", $item?->pendapatan)) + @php $pendapatanValue = old("pendapatan_komoditas.$i.pendapatan", $item?->pendapatan) @endphp
Rp
- @php($periodeValue = old("pendapatan_komoditas.$i.periode", $item?->periode)) + @php $periodeValue = old("pendapatan_komoditas.$i.periode", $item?->periode) @endphp
@@ -121,12 +121,12 @@ @for($i = 0; $i < 2; $i++) - @php($item = $pendapatanKomoditasLainnya->get($i)) - @php($index = $i + 2) + @php $item = $pendapatanKomoditasLainnya->get($i) @endphp + @php $index = $i + 2 @endphp - @php($selectedKomoditas = old("pendapatan_komoditas.$index.komoditas", $item?->komoditas)) + @php $selectedKomoditas = old("pendapatan_komoditas.$index.komoditas", $item?->komoditas) @endphp - @php($pendapatanValue = old("pendapatan_komoditas.$index.pendapatan", $item?->pendapatan)) + @php $pendapatanValue = old("pendapatan_komoditas.$index.pendapatan", $item?->pendapatan) @endphp
Rp
- @php($periodeValue = old("pendapatan_komoditas.$index.periode", $item?->periode)) + @php $periodeValue = old("pendapatan_komoditas.$index.periode", $item?->periode) @endphp
@@ -176,13 +176,13 @@ @for($i = 0; $i < 2; $i++) - @php($item = $pendapatanLuarPertanian->get($i)) + @php $item = $pendapatanLuarPertanian->get($i) @endphp jenis_pekerjaan) }}"> - @php($estimasiValue = old("pendapatan_luar_pertanian.$i.estimasi_per_bulan", $item?->estimasi_per_bulan)) + @php $estimasiValue = old("pendapatan_luar_pertanian.$i.estimasi_per_bulan", $item?->estimasi_per_bulan) @endphp
Rp @@ -202,15 +202,14 @@
Stabilitas Penghasilan
- - + @php $skorPeriodePaceklikValue = old('skor_periode_paceklik', $sosialEkonomi?->skor_periode_paceklik?->value); @endphp + + @foreach($periodePaceklikOptions as $option) +
+ + +
+ @endforeach @error('skor_periode_paceklik')
{{ $message }}
@enderror
@@ -229,7 +228,7 @@
- @php($biayaKebunValue = old('total_estimasi_biaya_kebun_per_musim', $sosialEkonomi?->total_estimasi_biaya_kebun_per_musim)) + @php $biayaKebunValue = old('total_estimasi_biaya_kebun_per_musim', $sosialEkonomi?->total_estimasi_biaya_kebun_per_musim) @endphp
Rp @@ -237,20 +236,19 @@ @error('total_estimasi_biaya_kebun_per_musim')
{{ $message }}
@enderror
- - + @php $skorKemampuanMenabungValue = old('skor_kemampuan_menabung', $sosialEkonomi?->skor_kemampuan_menabung?->value); @endphp + + @foreach($kemampuanMenabungOptions as $option) +
+ + +
+ @endforeach @error('skor_kemampuan_menabung')
{{ $message }}
@enderror
- @php($tabunganValue = old('estimasi_tabungan_per_bulan', $sosialEkonomi?->estimasi_tabungan_per_bulan)) + @php $tabunganValue = old('estimasi_tabungan_per_bulan', $sosialEkonomi?->estimasi_tabungan_per_bulan) @endphp
Rp @@ -262,15 +260,14 @@
Persepsi Kecukupan Penghasilan
- - + @php $skorKecukupanPenghasilanValue = old('skor_kecukupan_penghasilan', $sosialEkonomi?->skor_kecukupan_penghasilan?->value); @endphp + + @foreach($kecukupanPenghasilanOptions as $option) +
+ + +
+ @endforeach @error('skor_kecukupan_penghasilan')
{{ $message }}
@enderror
@@ -286,40 +283,51 @@ @error('status_kepemilikan_lahan')
{{ $message }}
@enderror
- - + @php $skorKejelasanStatusLahanValue = old('skor_kejelasan_status_lahan', $sosialEkonomi?->skor_kejelasan_status_lahan?->value); @endphp + + @foreach($kejelasanStatusLahanOptions as $option) +
+ + +
+ @endforeach @error('skor_kejelasan_status_lahan')
{{ $message }}
@enderror
- - + @php + $adaSertifikatValue = old('ada_sertifikat_dokumen', is_null($sosialEkonomi?->ada_sertifikat_dokumen) ? null : (int) $sosialEkonomi->ada_sertifikat_dokumen); + @endphp + +
+ + +
+
+ + +
@error('ada_sertifikat_dokumen')
{{ $message }}
@enderror
- - + @php + $adaSengketaValue = old('ada_sengketa', is_null($sosialEkonomi?->ada_sengketa) ? null : (int) $sosialEkonomi->ada_sengketa); + @endphp + +
+ + +
+
+ + +
@error('ada_sengketa')
{{ $message }}
@enderror
@@ -333,8 +341,9 @@ @error('pihak_membantu_konflik')
{{ $message }}
@enderror
@@ -352,8 +361,9 @@ @error('status_konflik')
{{ $message }}
@enderror
@@ -361,7 +371,7 @@
@@ -376,7 +386,9 @@