From 4c66d72dc5e52c12963f3ce772f860f7a2ed4d61 Mon Sep 17 00:00:00 2001 From: SyaharaniSalsabilla Date: Wed, 22 Jul 2026 13:27:35 +0700 Subject: [PATCH] solve praktik budidaya --- .../PraktikBudidayaController.php | 49 ++++++-- .../SurveyProduktivitasController.php | 17 ++- .../petani/praktik-budidaya/add.blade.php | 82 ++++++++++++- .../petani/praktik-budidaya/edit.blade.php | 114 ++++++++++++++++-- 4 files changed, 238 insertions(+), 24 deletions(-) diff --git a/app/Http/Controllers/Web/Produktivitas/PraktikBudidayaController.php b/app/Http/Controllers/Web/Produktivitas/PraktikBudidayaController.php index a58d729..8e9aa16 100644 --- a/app/Http/Controllers/Web/Produktivitas/PraktikBudidayaController.php +++ b/app/Http/Controllers/Web/Produktivitas/PraktikBudidayaController.php @@ -178,8 +178,14 @@ class PraktikBudidayaController extends Controller $teknik_pemangkasan = array_values($teknik_pemangkasan); + if ((int) ($validatedData['frekuensi_pemangkasan_komoditas_utama'] ?? 0) === FrekuensiPemangkasanUtama::TIDAK_PERNAH->value) { + $teknik_pemangkasan = []; + } + $petani = Petani::findOrFail($petaniId); + $pemupukanTidakPernah = (int) ($validatedData['pemberian_pupuk'] ?? 0) === PemberianPupuk::TIDAK_PERNAH->value; + $praktikBudidaya = $petani->praktikBudidaya()->create([ 'petani_id' => $petani->id, 'uid' => 'PB-' . strtoupper(Str::random(10)), @@ -193,12 +199,12 @@ class PraktikBudidayaController extends Controller '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), + 'jenis_pupuk' => $pemupukanTidakPernah ? null : ($validatedData['jenis_pupuk'] ?? null), + 'frekuensi_pemberian_pupuk' => $pemupukanTidakPernah ? null : (($validatedData['frekuensi_pemupukan'] ?? null) === 'Lainnya' ? ($validatedData['frekuensi_pemupukan_lainnya'] ?? null) : ($validatedData['frekuensi_pemupukan'] ?? null)), + 'estimasi_dosis_pupuk_organik' => $pemupukanTidakPernah ? null : ($validatedData['estimasi_dosis_pupuk_organik'] ?? null), + 'estimasi_dosis_pupuk_anorganik' => $pemupukanTidakPernah ? null : ($validatedData['estimasi_dosis_pupuk_anorganik'] ?? null), + 'waktu_pemberian_pupuk' => $pemupukanTidakPernah ? null : (($validatedData['waktu_pemberian_pupuk'] ?? null) === 'Lainnya' ? ($validatedData['waktu_pemberian_pupuk_lainnya'] ?? null) : ($validatedData['waktu_pemberian_pupuk'] ?? null)), + 'cara_pemberian_pupuk' => $pemupukanTidakPernah ? null : (($validatedData['cara_pemberian_pupuk'] ?? null) === 'Lainnya' ? ($validatedData['cara_pemberian_pupuk_lainnya'] ?? null) : ($validatedData['cara_pemberian_pupuk'] ?? null)), 'created_by' => auth()->id(), 'updated_by' => auth()->id(), ], [ @@ -554,6 +560,12 @@ class PraktikBudidayaController extends Controller } } $teknikPemangkasan = array_values($teknik_pemangkasan); + + if ((int) ($validatedData['frekuensi_pemangkasan_komoditas_utama'] ?? 0) === FrekuensiPemangkasanUtama::TIDAK_PERNAH->value) { + $teknikPemangkasan = []; + } + + $pemupukanTidakPernah = (int) ($validatedData['pemberian_pupuk'] ?? 0) === PemberianPupuk::TIDAK_PERNAH->value; $dataPraktikBudidaya = [ 'tenaga_kerja' => $validatedData['tenaga_kerja'], @@ -566,12 +578,12 @@ class PraktikBudidayaController extends Controller '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), + 'jenis_pupuk' => $pemupukanTidakPernah ? null : ($validatedData['jenis_pupuk'] ?? null), + 'frekuensi_pemberian_pupuk' => $pemupukanTidakPernah ? null : (($validatedData['frekuensi_pemupukan'] ?? null) === 'Lainnya' ? ($validatedData['frekuensi_pemupukan_lainnya'] ?? null) : ($validatedData['frekuensi_pemupukan'] ?? null)), + 'estimasi_dosis_pupuk_organik' => $pemupukanTidakPernah ? null : ($validatedData['estimasi_dosis_pupuk_organik'] ?? null), + 'estimasi_dosis_pupuk_anorganik' => $pemupukanTidakPernah ? null : ($validatedData['estimasi_dosis_pupuk_anorganik'] ?? null), + 'waktu_pemberian_pupuk' => $pemupukanTidakPernah ? null : (($validatedData['waktu_pemberian_pupuk'] ?? null) === 'Lainnya' ? ($validatedData['waktu_pemberian_pupuk_lainnya'] ?? null) : ($validatedData['waktu_pemberian_pupuk'] ?? null)), + 'cara_pemberian_pupuk' => $pemupukanTidakPernah ? null : (($validatedData['cara_pemberian_pupuk'] ?? null) === 'Lainnya' ? ($validatedData['cara_pemberian_pupuk_lainnya'] ?? null) : ($validatedData['cara_pemberian_pupuk'] ?? null)), ]; } @@ -675,6 +687,17 @@ class PraktikBudidayaController extends Controller } } - return back()->with('success', 'Data berhasil diperbarui.'); + return $this->redirectBackToFragment($request)->with('success', 'Data berhasil diperbarui.'); + } + + private function redirectBackToFragment(Request $request) + { + $fragment = $request->input('redirect_fragment'); + + if (!is_string($fragment) || !preg_match('/^[A-Za-z0-9_-]+$/', $fragment)) { + return back(); + } + + return redirect()->to(Str::before(url()->previous(), '#') . '#' . $fragment); } } diff --git a/app/Http/Controllers/Web/Produktivitas/SurveyProduktivitasController.php b/app/Http/Controllers/Web/Produktivitas/SurveyProduktivitasController.php index 037a638..3c15d3a 100644 --- a/app/Http/Controllers/Web/Produktivitas/SurveyProduktivitasController.php +++ b/app/Http/Controllers/Web/Produktivitas/SurveyProduktivitasController.php @@ -32,10 +32,10 @@ class SurveyProduktivitasController extends Controller ]); } - return back()->with('success', 'Data produktivitas berhasil disimpan.'); + return $this->redirectBackToFragment($request)->with('success', 'Data produktivitas berhasil disimpan.'); } - public function destroy($petaniId, $surveyProduktivitasId) + public function destroy($petaniId, $surveyProduktivitasId, Request $request) { $surveyProduktivitas = SurveyProduktivitas::where('petani_id', $petaniId) ->where('id', $surveyProduktivitasId) @@ -44,6 +44,17 @@ class SurveyProduktivitasController extends Controller $surveyProduktivitas->save(); $surveyProduktivitas->delete(); - return back()->with('success', 'Data produktivitas berhasil dihapus.'); + return $this->redirectBackToFragment($request)->with('success', 'Data produktivitas berhasil dihapus.'); + } + + private function redirectBackToFragment(Request $request) + { + $fragment = $request->input('redirect_fragment'); + + if (!is_string($fragment) || !preg_match('/^[A-Za-z0-9_-]+$/', $fragment)) { + return back(); + } + + return redirect()->to(Str::before(url()->previous(), '#') . '#' . $fragment); } } diff --git a/resources/views/produktivitas/petani/praktik-budidaya/add.blade.php b/resources/views/produktivitas/petani/praktik-budidaya/add.blade.php index a942274..30d012f 100644 --- a/resources/views/produktivitas/petani/praktik-budidaya/add.blade.php +++ b/resources/views/produktivitas/petani/praktik-budidaya/add.blade.php @@ -517,6 +517,57 @@ $(document).ready(function () { $('#tenaga-kerja, #frekuensi-pemangkasan-komoditas-utama, #frekuensi-pemangkasan-pohon-penaung, #penyerbukan-manual, #pemberian-pupuk, #jenis-pupuk').select2(); + + function syncTeknikPemangkasanState() { + const tidakPernahMemangkas = $('#frekuensi-pemangkasan-komoditas-utama').val() === '{{ \App\Enums\PraktikBudidaya\FrekuensiPemangkasanUtama::TIDAK_PERNAH->value }}'; + const $teknikInputs = $('input[name="teknik_pemangkasan[]"]'); + const $lainnyaInput = $('#input-teknik-pemangkasan-lainnya'); + + $teknikInputs + .prop('disabled', tidakPernahMemangkas) + .closest('.form-check') + .toggleClass('opacity-50', tidakPernahMemangkas); + + if (tidakPernahMemangkas) { + $teknikInputs.prop('checked', false); + $lainnyaInput.val(''); + } + + $lainnyaInput.prop('disabled', tidakPernahMemangkas || !$('#teknik-pemangkasan-lainnya').is(':checked')); + } + + $('#frekuensi-pemangkasan-komoditas-utama, #teknik-pemangkasan-lainnya').on('change select2:select select2:clear', syncTeknikPemangkasanState); + syncTeknikPemangkasanState(); + + function syncPemupukanState() { + const tidakPernahMemberiPupuk = $('#pemberian-pupuk').val() === '{{ \App\Enums\PraktikBudidaya\PemberianPupuk::TIDAK_PERNAH->value }}'; + const $pemupukanFields = $( + '#jenis-pupuk, ' + + 'input[name="frekuensi_pemupukan"], #input-frekuensi-pemupukan-lainnya, ' + + '#estimasi-dosis-pupuk-organik, #estimasi-dosis-pupuk-anorganik, ' + + 'input[name="waktu_pemberian_pupuk"], #input-waktu-pemberian-pupuk-lainnya, ' + + 'input[name="cara_pemberian_pupuk"], #input-cara-pemberian-pupuk-lainnya' + ); + + $pemupukanFields + .prop('disabled', tidakPernahMemberiPupuk) + .closest('.form-check, .form-control-validation') + .toggleClass('opacity-50', tidakPernahMemberiPupuk); + + if (tidakPernahMemberiPupuk) { + $('#jenis-pupuk').val('').trigger('change.select2'); + $('input[name="frekuensi_pemupukan"], input[name="waktu_pemberian_pupuk"], input[name="cara_pemberian_pupuk"]').prop('checked', false); + $('#input-frekuensi-pemupukan-lainnya, #estimasi-dosis-pupuk-organik, #estimasi-dosis-pupuk-anorganik, #input-waktu-pemberian-pupuk-lainnya, #input-cara-pemberian-pupuk-lainnya').val(''); + } else { + $('#input-frekuensi-pemupukan-lainnya').prop('disabled', !$('input[data-target="#input-frekuensi-pemupukan-lainnya"]').is(':checked')); + $('#input-waktu-pemberian-pupuk-lainnya').prop('disabled', !$('input[data-target="#input-waktu-pemberian-pupuk-lainnya"]').is(':checked')); + $('#input-cara-pemberian-pupuk-lainnya').prop('disabled', !$('input[data-target="#input-cara-pemberian-pupuk-lainnya"]').is(':checked')); + } + } + + $('#pemberian-pupuk').on('change select2:select select2:clear', syncPemupukanState); + syncPemupukanState(); + setTimeout(syncPemupukanState, 0); const $switch = $('input[name="disimpan_untuk_diri_sendiri"]'); const $text = $('#switch-text'); @@ -636,6 +687,35 @@ trigger.addEventListener('change', toggleInput); toggleInput(); }); + + const frekuensiPemangkasan = document.getElementById('frekuensi-pemangkasan-komoditas-utama'); + const teknikPemangkasanInputs = document.querySelectorAll('input[name="teknik_pemangkasan[]"]'); + const teknikPemangkasanLainnya = document.getElementById('input-teknik-pemangkasan-lainnya'); + + function toggleTeknikPemangkasan() { + const tidakPernahMemangkas = frekuensiPemangkasan && frekuensiPemangkasan.value === '{{ \App\Enums\PraktikBudidaya\FrekuensiPemangkasanUtama::TIDAK_PERNAH->value }}'; + + teknikPemangkasanInputs.forEach(function (input) { + input.disabled = tidakPernahMemangkas; + input.closest('.form-check')?.classList.toggle('opacity-50', tidakPernahMemangkas); + + if (tidakPernahMemangkas) { + input.checked = false; + } + }); + + if (teknikPemangkasanLainnya) { + teknikPemangkasanLainnya.disabled = tidakPernahMemangkas || !document.getElementById('teknik-pemangkasan-lainnya')?.checked; + + if (tidakPernahMemangkas) { + teknikPemangkasanLainnya.value = ''; + } + } + } + + frekuensiPemangkasan?.addEventListener('change', toggleTeknikPemangkasan); + document.getElementById('teknik-pemangkasan-lainnya')?.addEventListener('change', toggleTeknikPemangkasan); + toggleTeknikPemangkasan(); }); -@endpush \ No newline at end of file +@endpush diff --git a/resources/views/produktivitas/petani/praktik-budidaya/edit.blade.php b/resources/views/produktivitas/petani/praktik-budidaya/edit.blade.php index 7e27e1b..d7dbc0f 100644 --- a/resources/views/produktivitas/petani/praktik-budidaya/edit.blade.php +++ b/resources/views/produktivitas/petani/praktik-budidaya/edit.blade.php @@ -39,7 +39,8 @@
@csrf @method('PUT') -
+ +
Persiapan Lahan & Tanaman
@@ -541,8 +542,9 @@ @csrf @method('PUT') + -
+
Pengendalian Organisme Pengganggu Tumbuhan (OPT)
@@ -1048,7 +1050,8 @@ @csrf @method('PUT') -
+ +
Struktur Biaya Produksi Permusim
@@ -1360,7 +1363,8 @@ @csrf @method('PUT') -
+ +
Penanganan Awal Setelah Panen
@@ -1546,7 +1550,7 @@
-
+
Produktivitas Rata-rata 3 Musim Panen Terakhir per Komoditas @@ -1579,6 +1583,7 @@
@csrf @method('DELETE') + @@ -1593,6 +1598,7 @@ action="{{ route('petani.survey-produktivitas.store', $petani->id) }}" class="form-repeater"> @csrf +
@@ -1657,7 +1663,8 @@ @csrf @method('PUT') -
+ +
Kehilangan Hasil Akibat Organisme Pengganggu Tumbuhan (OPT)
@@ -1706,12 +1713,76 @@
@endsection +@push('scripts-head') + +@endpush + @push('scripts') -@endpush \ No newline at end of file +@endpush