diff --git a/app/Http/Controllers/Web/Produktivitas/PraktikBudidayaController.php b/app/Http/Controllers/Web/Produktivitas/PraktikBudidayaController.php index 643524d..bf4eb20 100644 --- a/app/Http/Controllers/Web/Produktivitas/PraktikBudidayaController.php +++ b/app/Http/Controllers/Web/Produktivitas/PraktikBudidayaController.php @@ -18,6 +18,15 @@ use App\Enums\PraktikBudidaya\FrekuensiPemangkasanPendamping; use App\Enums\PraktikBudidaya\PemberianPupuk; use App\Enums\PraktikBudidaya\JenisPupuk; use App\Enums\PraktikBudidaya\PenyerbukanManual; +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; class PraktikBudidayaController extends Controller { @@ -268,4 +277,144 @@ class PraktikBudidayaController extends Controller return view('produktivitas.petani.praktik-budidaya.edit', compact('title', 'petani', 'praktikBudidaya', 'teknikPemangkasanLainnya', 'alasanTidakPenyerbukanLainnya', 'frekuensiPemupukanLainnya', 'waktuPemberianPupukLainnya', 'caraPemberianPupukLainnya', 'sumberAirLainnya', 'sistemIrigasiLainnya')); } + + public function update($petaniId, $praktikBudidayaId, Request $request) + { + if (!Gate::any(['super_admin', 'admin', 'fasilitator'])) { + abort(403); + } + + // dd($request->all()); + + $praktikBudidaya = PraktikBudidaya::where('petani_id', $petaniId) + ->where('id', $praktikBudidayaId) + ->firstOrFail(); + + $validatedData = $request->validate([ + // 2.2 Persiapan Lahan & Penanaman + 'tenaga_kerja' => ['nullable', 'string', new Enum(TenagaKerja::class)], + + // 2.3 Praktik Pemangkasan & Penyerbukan + 'frekuensi_pemangkasan_komoditas_utama' => ['nullable', 'integer', new Enum(FrekuensiPemangkasanUtama::class)], + 'teknik_pemangkasan' => ['nullable', 'array'], + 'teknik_pemangkasan.*' => ['string'], + 'teknik_pemangkasan_lainnya' => ['nullable', 'string'], + 'frekuensi_pemangkasan_pohon_penaung' => ['nullable', 'integer', new Enum(FrekuensiPemangkasanPendamping::class)], + 'penyerbukan_manual' => ['nullable', 'integer', new Enum(PenyerbukanManual::class)], + 'alasan_tidak_penyerbukan' => ['nullable', 'string'], + 'alasan_tidak_penyerbukan_lainnya' => ['nullable', 'string'], + 'tingkat_keberhasilan_penyerbukan' => ['nullable', 'string'], + + // 2.4 Praktik Pemupukan + 'pemberian_pupuk' => ['nullable', 'integer', new Enum(PemberianPupuk::class)], + 'jenis_pupuk' => ['nullable', 'integer', new Enum(JenisPupuk::class)], + + 'frekuensi_pemupukan' => ['nullable', 'string'], + 'frekuensi_pemupukan_lainnya' => ['nullable', 'string'], + + 'estimasi_dosis_pupuk_organik' => ['nullable', 'numeric'], + 'estimasi_dosis_pupuk_anorganik' => ['nullable', 'numeric'], + + 'waktu_pemberian_pupuk' => ['nullable', 'string'], + 'waktu_pemberian_pupuk_lainnya' => ['nullable', 'string'], + + 'cara_pemberian_pupuk' => ['nullable', 'string'], + 'cara_pemberian_pupuk_lainnya' => ['nullable', 'string'], + + // 2.5 Pengendalian Organisme Pengganggu Tumbuhan (OPT) + 'metode_penanganan_hama_penyakit' => ['nullable', 'integer', new Enum(MetodePenangananHamaPenyakit::class)], + + 'jenis_hama' => ['nullable', 'array'], + + 'jenis_penyakit' => ['nullable', 'array'], + + 'intensitas_serangan' => ['nullable', 'string', new Enum(IntensitasSeranganHamaPenyakit::class)], + 'waktu_kemunculan_terparah' => ['nullable', 'string', new Enum(WaktuKemunculanTerparahHamaPenyakit::class)], + + 'metode_paling_sering_dilakukan' => ['nullable', 'string'], + + 'volume_obat_obatan_permusim' => ['nullable', 'numeric'], + + // 2.6 Sanitasi Kebun + + 'frekuensi_sanitasi_lahan' => ['nullable', 'integer', new Enum(FrekuensiSanitasiLahan::class)], + 'penanganan_sisa_buah_ranting' => ['nullable', 'string', new Enum(PenangananSisaBuahRanting::class)], + 'penanganan_gulma' => ['nullable', 'integer', new Enum(PenangananGulma::class)], + + + // 2.7 Pengelolaan Air & Irigasi + + 'kondisi_pengelolaan_air_irigasi' => ['nullable', 'integer', new Enum(KondisiPengelolaanAir::class)], + + 'sumber_air' => ['nullable', 'string'], + 'sumber_air_lainnya' => ['nullable', 'string'], + + 'sistem_irigasi' => ['nullable', 'string'], + 'sistem_irigasi_lainnya' => ['nullable', 'string'], + + 'kebutuhan_air_permusim' => ['nullable', 'string', new Enum(KebutuhanAirPermusim::class)], + + 'kebiasaan_konservasi_tanah' => ['nullable', 'array'], + 'kebiasaan_konservasi_tanah.*' => ['string'], + + 'pemahaman_manfaat_konservasi' => ['nullable', 'string', new Enum(PemahamanManfaatKonservasi::class)], + ]); + + $data = []; + + $petani = Petani::findOrFail($petaniId); + + if ($request->has('tenaga_kerja')) { + $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; + } + } + $data = [ + 'tenaga_kerja' => $validatedData['tenaga_kerja'], + 'frekuensi_pemangkasan_utama' => $validatedData['frekuensi_pemangkasan_komoditas_utama'], + + 'teknik_pemangkasan' => array_values($teknikPemangkasan), + + '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), + ]; + } + + if ($request->has('metode_penanganan_hama_penyakit')) { + $data = [ + 'metode_penanganan_opt' => $validatedData['metode_penanganan_hama_penyakit'] ?? null, + 'jenis_hama' => $validatedData['jenis_hama'] ?? [], + 'jenis_penyakit' => $validatedData['jenis_penyakit'] ?? [], + 'intensitas_serangan' => $validatedData['intensitas_serangan'] ?? null, + 'waktu_kemunculan_terparah' => $validatedData['waktu_kemunculan_terparah'] ?? null, + 'metode_paling_sering_dilakukan' => $validatedData['metode_paling_sering_dilakukan'] ?? null, + 'volume_obat_obatan_permusim' => $validatedData['volume_obat_obatan_permusim'] ?? null, + 'frekuensi_sanitasi_lahan' => $validatedData['frekuensi_sanitasi_lahan'] ?? null, + 'penanganan_sisa_buah_ranting' => $validatedData['penanganan_sisa_buah_ranting'] ?? null, + 'penanganan_gulma' => $validatedData['penanganan_gulma'] ?? null, + 'kondisi_pengelolaan_air' => $validatedData['kondisi_pengelolaan_air_irigasi'] ?? null, + 'sumber_air' => ($validatedData['sumber_air'] ?? null) === 'Lainnya' ? ($validatedData['sumber_air_lainnya'] ?? null) : ($validatedData['sumber_air'] ?? null), + 'sistem_irigasi' => ($validatedData['sistem_irigasi'] ?? null) === 'Lainnya' ? ($validatedData['sistem_irigasi_lainnya'] ?? null) : ($validatedData['sistem_irigasi'] ?? null), + 'kebutuhan_air_permusim' => $validatedData['kebutuhan_air_permusim'] ?? null, + 'kebiasaan_konservasi_tanah' => $validatedData['kebiasaan_konservasi_tanah'] ?? [], + 'pemahaman_manfaat_konservasi_tanah' => $validatedData['pemahaman_manfaat_konservasi'] ?? null, + ]; + } + + $praktikBudidaya->update($data); + + return back()->with('success', 'Data berhasil diperbarui.'); + } } diff --git a/app/Models/Pertanian/PraktikBudidaya.php b/app/Models/Pertanian/PraktikBudidaya.php new file mode 100644 index 0000000..d9ed8cf --- /dev/null +++ b/app/Models/Pertanian/PraktikBudidaya.php @@ -0,0 +1,67 @@ + 'array', + 'jenis_hama' => 'array', + 'jenis_penyakit' => 'array', + 'kebiasaan_konservasi_tanah' => 'array' + ]; + + protected $fillable = [ + 'uid', + 'petani_id', + 'tenaga_kerja', + 'frekuensi_pemangkasan_utama', + 'teknik_pemangkasan', + 'frekuensi_pemangkasan_penaung', + 'penyerbukan_manual', + 'deskripsi_penyerbukan_manual', + 'tingkat_keberhasilan_penyerbukan', + 'pemberian_pupuk', + 'jenis_pupuk', + 'frekuensi_pemberian_pupuk', + 'estimasi_dosis_pupuk_organik', + 'estimasi_dosis_pupuk_anorganik', + 'waktu_pemberian_pupuk', + 'cara_pemberian_pupuk', + 'metode_penanganan_opt', + 'jenis_hama', + 'jenis_penyakit', + 'intensitas_serangan', + 'waktu_kemunculan_terparah', + 'metode_paling_sering_dilakukan', + 'volume_obat_obatan_permusim', + 'satuan_volume_obat_obatan', + 'frekuensi_sanitasi_lahan', + 'penanganan_sisa_buah_ranting', + 'penanganan_gulma', + 'kondisi_pengelolaan_air', + 'sumber_air', + 'sistem_irigasi', + 'kebutuan_air_permusim', + 'kebiasaan_konservasi_tanah', + 'pemahaman_manfaat_konservasi_tanah', + // 'nilai_konservasi_tanah', + // 'upah_tenaga_kerja' + ]; + + public function petani(): BelongsTo + { + return $this->belongsTo(Petani::class, 'petani_id'); + } +} \ No newline at end of file diff --git a/resources/views/produktivitas/petani/praktik-budidaya/edit.blade.php b/resources/views/produktivitas/petani/praktik-budidaya/edit.blade.php index f7f61f1..054d1e9 100644 --- a/resources/views/produktivitas/petani/praktik-budidaya/edit.blade.php +++ b/resources/views/produktivitas/petani/praktik-budidaya/edit.blade.php @@ -104,11 +104,12 @@
- - @error('metode_paling_sereng_dilakukan')
{{ $message }}
@enderror + + @error('metode_paling_sering_dilakukan')
{{ $message }}
@enderror
@@ -910,9 +918,9 @@ kebiasaan_konservasi_tanah ?? [])) ? 'checked' : '' }}> + {{ in_array('Membuat pematang atau tanggul tanah di lahan miring supaya tanah tidak longsor ke bawah', old('kebiasaan_konservasi_tanah', $praktikBudidaya->kebiasaan_konservasi_tanah ?? [])) ? 'checked' : '' }}> @@ -975,62 +983,152 @@
-
- + @csrf @method('PUT') -
-
Struktur Biaya Produksi Permusim
- - - @error('upah_tenaga_kerja')
{{ $message }}
@enderror + +
+ Rp + +
+ @error('upah_tenaga_kerja') +
{{ $message }}
+ @enderror
- - - @error('biaya_bibit')
{{ $message }}
@enderror + +
+ Rp + +
+ @error('biaya_bibit') +
{{ $message }}
+ @enderror
- - - @error('biaya_pupuk')
{{ $message }}
@enderror + +
+ Rp + +
+ @error('biaya_pupuk') +
{{ $message }}
+ @enderror
+
- - - @error('biaya_pestisida')
{{ $message }}
@enderror + +
+ Rp + +
+ @error('biaya_pestisida') +
{{ $message }}
+ @enderror
+
- - - @error('biaya_sewa_alat')
{{ $message }}
@enderror + +
+ Rp + +
+ @error('biaya_sewa_alat') +
{{ $message }}
+ @enderror
+
- - - @error('biaya_penyediaan-air')
{{ $message }}
@enderror -
-
- - - @error('biaya_lainnya')
{{ $message }}
@enderror + +
+ Rp + +
+ @error('biaya_penyediaan_air') +
{{ $message }}
+ @enderror
+
- - - @error('total_estimasi_biaya_produksi')
{{ $message }}
@enderror + +
+ Rp + +
+ @error('biaya_lainnya') +
{{ $message }}
+ @enderror +
+ +
+ +
+ Rp + +
+ @error('total_estimasi_biaya_produksi') +
{{ $message }}
+ @enderror
Cara Mementukan Kematangan
@@ -1169,18 +1267,16 @@
-
- + @csrf @method('PUT') -
Penanganan Awal Setelah Panen
@@ -1239,7 +1335,8 @@
@@ -1296,12 +1393,9 @@
-
- + @csrf @method('PUT') -
Kehilangan Hasil Akibat Organisme Pengganggu Tumbuhan (OPT)
@@ -1363,7 +1457,8 @@
@@ -1399,38 +1494,95 @@ } updateSwitchText(); $switch.on('change', updateSwitchText); + }); - - $('#editPetaniForm').validate({ - rules: { - nama: { required: true }, - tanggal_lahir: { required: true, date: true }, - jenis_kelamin: { required: true }, - pendidikan_terakhir: { required: true }, - alamat: { required: true }, - desa_kelurahan_id: { required: true }, - status_perkawinan: { required: true }, - }, - messages: { - nama: { required: "Nama petani wajib diisi" }, - tanggal_lahir: { required: "Tanggal lahir wajib diisi", date: "Format tanggal salah" }, - jenis_kelamin: { required: "Jenis kelamin wajib diisi" }, - pendidikan_terakhir: { required: "Pendidikan terakhir wajib diisi" }, - alamat: { required: "Alamat wajib diisi" }, - desa_kelurahan_id: { required: "Desa/Kelurahan wajib diisi" }, - status_perkawinan: { required: "Status perkawinan wajib diisi" }, - }, - errorElement: 'div', - errorPlacement: function (error, element) { - error.addClass('invalid-feedback'); - element.closest('.mb-6, .form-control-validation').append(error); - }, - highlight: function (element) { - $(element).addClass('is-invalid'); - }, - unhighlight: function (element) { - $(element).removeClass('is-invalid'); + document.addEventListener('DOMContentLoaded', function () { + const rupiahInputs = document.querySelectorAll('.rupiah-input'); + + rupiahInputs.forEach(function (input) { + input.addEventListener('input', function () { + let value = input.value.replace(/\D/g, ''); + + if (value === '') { + input.value = ''; + return; + } + + input.value = new Intl.NumberFormat('id-ID').format(value); + }); + }); + + document.querySelectorAll('form').forEach(function (form) { + form.addEventListener('submit', function () { + form.querySelectorAll('.rupiah-input').forEach(function (input) { + input.value = input.value.replace(/\./g, ''); + }); + }); + }); + + function toggleInput(trigger) { + const target = document.querySelector(trigger.dataset.target); + + if (!target) return; + + if (trigger.type === 'checkbox') { + target.disabled = !trigger.checked; + + if (!trigger.checked) { + target.value = ''; + } + } else if (trigger.type === 'radio') { + + const radios = document.querySelectorAll( + `input[name="${trigger.name}"].lainnya-radio` + ); + + radios.forEach(radio => { + const input = document.querySelector(radio.dataset.target); + + if (!input) return; + + input.disabled = !radio.checked; + + if (!radio.checked) { + input.value = ''; + } + }); } + } + + document.querySelectorAll('input[type="radio"][data-target]').forEach(function (lainnyaRadio) { + const target = document.querySelector(lainnyaRadio.dataset.target); + + function toggleInput() { + target.disabled = !lainnyaRadio.checked; + + if (!lainnyaRadio.checked) { + target.value = ''; + } + } + + document.querySelectorAll(`input[name="${lainnyaRadio.name}"]`).forEach(function (radio) { + radio.addEventListener('change', toggleInput); + }); + + toggleInput(); + }); + + document.querySelectorAll('.lainnya-checkbox').forEach(function (trigger) { + const target = document.querySelector(trigger.dataset.target); + if (!target) return; + + function toggleInput() { + target.disabled = !trigger.checked; + + if (!trigger.checked) { + target.value = ''; + } + } + + trigger.addEventListener('change', toggleInput); + toggleInput(); }); });