diff --git a/app/Http/Controllers/Web/Produktivitas/PendidikanPelatihanController.php b/app/Http/Controllers/Web/Produktivitas/PendidikanPelatihanController.php index 18daa53..61515d2 100644 --- a/app/Http/Controllers/Web/Produktivitas/PendidikanPelatihanController.php +++ b/app/Http/Controllers/Web/Produktivitas/PendidikanPelatihanController.php @@ -77,10 +77,11 @@ class PendidikanPelatihanController extends Controller ]); } - return back()->with('success', 'Riwayat pelatihan berhasil disimpan.'); + return $this->redirectBackToFragment($request, 'section-sertifikasi') + ->with('success', 'Riwayat pelatihan berhasil disimpan.'); } - public function destroyPelatihan(Petani $petani, SurveyPelatihan $surveyPelatihan) + public function destroyPelatihan(Request $request, Petani $petani, SurveyPelatihan $surveyPelatihan) { $this->authorizeAccess(); @@ -92,7 +93,8 @@ class PendidikanPelatihanController extends Controller $surveyPelatihan->delete(); - return back()->with('success', 'Riwayat pelatihan berhasil dihapus.'); + return $this->redirectBackToFragment($request, 'section-pelatihan') + ->with('success', 'Riwayat pelatihan berhasil dihapus.'); } public function storeSertifikasi(Request $request, Petani $petani) @@ -155,10 +157,11 @@ class PendidikanPelatihanController extends Controller ]); } - return back()->with('success', 'Sertifikasi berhasil disimpan.'); + return $this->redirectBackToFragment($request, 'section-sertifikasi') + ->with('success', 'Sertifikasi berhasil disimpan.'); } - public function destroySertifikasi(Petani $petani, SurveySertifikasi $surveySertifikasi) + public function destroySertifikasi(Request $request, Petani $petani, SurveySertifikasi $surveySertifikasi) { $this->authorizeAccess(); @@ -170,6 +173,18 @@ class PendidikanPelatihanController extends Controller $surveySertifikasi->delete(); - return back()->with('success', 'Sertifikasi berhasil dihapus.'); + return $this->redirectBackToFragment($request, 'section-sertifikasi') + ->with('success', 'Sertifikasi berhasil dihapus.'); } -} \ No newline at end of file + + private function redirectBackToFragment(Request $request, string $defaultFragment) + { + $fragment = $request->input('redirect_fragment', $defaultFragment); + + if (!is_string($fragment) || !preg_match('/^[A-Za-z0-9_-]+$/', $fragment)) { + $fragment = $defaultFragment; + } + + return redirect()->to(Str::before(url()->previous(), '#') . '#' . $fragment); + } +} diff --git a/app/Http/Controllers/Web/Produktivitas/PetaniController.php b/app/Http/Controllers/Web/Produktivitas/PetaniController.php index 336c77a..30c5cd8 100644 --- a/app/Http/Controllers/Web/Produktivitas/PetaniController.php +++ b/app/Http/Controllers/Web/Produktivitas/PetaniController.php @@ -178,7 +178,7 @@ class PetaniController extends Controller 'created_by' => auth()->id(), 'updated_by' => auth()->id()]); - return redirect()->route('petani.index')->with('success', 'Data petani berhasil ditambahkan.'); + return redirect()->route('petani.edit', $petani->id)->with('success', 'Data petani berhasil ditambahkan.'); } public function show(string $id) @@ -253,7 +253,7 @@ class PetaniController extends Controller $petani->update([...$validatedData, 'updated_by' => auth()->id()]); - return redirect()->route('petani.index')->with('success', 'Data petani berhasil diupdate.'); + return redirect()->route('petani.edit', $petani->id)->with('success', 'Data petani berhasil diupdate.'); } /** diff --git a/app/Http/Controllers/Web/Produktivitas/PetaniLahanController.php b/app/Http/Controllers/Web/Produktivitas/PetaniLahanController.php index 3f9f789..c8ce95f 100644 --- a/app/Http/Controllers/Web/Produktivitas/PetaniLahanController.php +++ b/app/Http/Controllers/Web/Produktivitas/PetaniLahanController.php @@ -224,15 +224,15 @@ class PetaniLahanController extends Controller if ($request->ajax()) { return response()->json([ 'success' => true, - 'redirect' => route('petani.lahan-tanaman.index', $petaniId), + 'redirect' => route('petani.lahan-tanaman.edit', [$petaniId, $lahan->id]), 'message' => 'Lahan berhasil ditambahkan.' ]); } - return redirect()->route('petani.lahan-tanaman.index', $petaniId)->with('success', 'Lahan berhasil ditambahkan.'); + return redirect()->route('petani.lahan-tanaman.edit', [$petaniId, $lahan->id])->with('success', 'Lahan berhasil ditambahkan.'); } - return redirect()->route('petani.lahan-tanaman.index', $petaniId)->with('success', 'Lahan berhasil ditambahkan.'); + return redirect()->route('petani.lahan-tanaman.edit', [$petaniId, $lahan->id])->with('success', 'Lahan berhasil ditambahkan.'); } public function show(string $petaniId, string $id) @@ -371,12 +371,12 @@ class PetaniLahanController extends Controller if ($request->ajax()) { return response()->json([ 'success' => true, - 'redirect' => route('petani.lahan-tanaman.index', $petaniId), + 'redirect' => route('petani.lahan-tanaman.edit', [$petaniId, $lahan->id]), 'message' => 'Lahan berhasil diupdate.' ]); } - return redirect()->route('petani.lahan-tanaman.index', $petaniId)->with('success', 'Lahan berhasil diperbarui.'); + return redirect()->route('petani.lahan-tanaman.edit', [$petaniId, $lahan->id])->with('success', 'Lahan berhasil diperbarui.'); } public function destroy(string $petaniId, string $id) 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/lahan/add.blade.php b/resources/views/produktivitas/petani/lahan/add.blade.php index 45f835e..b88061a 100644 --- a/resources/views/produktivitas/petani/lahan/add.blade.php +++ b/resources/views/produktivitas/petani/lahan/add.blade.php @@ -940,7 +940,7 @@ showConfirmButton: false, timer: 1500 }).then(() => { - window.location.href = "{{ route('petani.lahan-tanaman.index', ['petani' => $petani->id]) }}"; + window.location.href = res.redirect || window.location.href; }); }, error: function(xhr) { @@ -977,4 +977,4 @@ }); }); -@endpush \ No newline at end of file +@endpush diff --git a/resources/views/produktivitas/petani/lahan/edit.blade.php b/resources/views/produktivitas/petani/lahan/edit.blade.php index 8918274..a47770f 100644 --- a/resources/views/produktivitas/petani/lahan/edit.blade.php +++ b/resources/views/produktivitas/petani/lahan/edit.blade.php @@ -1018,7 +1018,7 @@ showConfirmButton: false, timer: 1500 }).then(() => { - window.location.href = "{{ route('petani.lahan-tanaman.index', ['petani' => $petani->id]) }}"; + window.location.href = res.redirect || window.location.href; }); }, error: function(xhr) { @@ -1082,4 +1082,4 @@ initKomoditas(); }); -@endpush \ No newline at end of file +@endpush diff --git a/resources/views/produktivitas/petani/pendidikan-pelatihan/index.blade.php b/resources/views/produktivitas/petani/pendidikan-pelatihan/index.blade.php index 6b2e4c5..a5e486d 100644 --- a/resources/views/produktivitas/petani/pendidikan-pelatihan/index.blade.php +++ b/resources/views/produktivitas/petani/pendidikan-pelatihan/index.blade.php @@ -29,6 +29,11 @@ white-space: nowrap !important; line-height: 1.5 !important; } + + #section-pelatihan, + #section-sertifikasi { + scroll-margin-top: 96px; + } @endpush @@ -51,7 +56,7 @@