From e7f48b6500d67fb4734dc9925d929752cacc3557 Mon Sep 17 00:00:00 2001 From: SyaharaniSalsabilla Date: Wed, 22 Jul 2026 15:49:25 +0700 Subject: [PATCH] solve lahan & tanaman --- .../Produktivitas/PetaniLahanController.php | 52 ++++++++++++++++++- app/Models/Pertanian/PraktikBudidaya.php | 34 +++++++----- .../produktivitas/petani/lahan/add.blade.php | 42 ++++++++++----- .../produktivitas/petani/lahan/edit.blade.php | 32 +++++++----- 4 files changed, 116 insertions(+), 44 deletions(-) diff --git a/app/Http/Controllers/Web/Produktivitas/PetaniLahanController.php b/app/Http/Controllers/Web/Produktivitas/PetaniLahanController.php index c8ce95f..acb24e6 100644 --- a/app/Http/Controllers/Web/Produktivitas/PetaniLahanController.php +++ b/app/Http/Controllers/Web/Produktivitas/PetaniLahanController.php @@ -17,6 +17,7 @@ use App\Models\Pertanian\Lahan; use App\Models\Wilayah\DesaKelurahan; use App\Models\Wilayah\Provinsi; use App\Models\Pertanian\Komoditas; +use App\Models\Pertanian\PraktikBudidaya; use App\Models\Pertanian\Tanaman; use App\Models\Master\JenisTanaman; @@ -64,8 +65,40 @@ class PetaniLahanController extends Controller $komoditas = Komoditas::all(); $tanamanPenaung = JenisTanaman::all(); + $autoPestDiseaseData = $this->autoPestDiseaseData($petaniId); + $jenisHamaOtomatis = $autoPestDiseaseData['jenis_hama']; + $jenisPenyakitOtomatis = $autoPestDiseaseData['jenis_penyakit']; - return view('produktivitas.petani.lahan.add', compact('petani', 'lahan', 'provinsi', 'komoditas', 'tanamanPenaung')); + return view('produktivitas.petani.lahan.add', compact('petani', 'lahan', 'provinsi', 'komoditas', 'tanamanPenaung', 'jenisHamaOtomatis', 'jenisPenyakitOtomatis')); + } + + private function autoPestDiseaseData(string|int $petaniId): array + { + $praktikBudidaya = PraktikBudidaya::where('petani_id', $petaniId)->latest()->first(); + + return [ + 'jenis_hama' => $this->normalizeArrayValue($praktikBudidaya?->jenis_hama), + 'jenis_penyakit' => $this->normalizeArrayValue($praktikBudidaya?->jenis_penyakit), + ]; + } + + private function normalizeArrayValue(mixed $value): array + { + if (is_array($value)) { + return array_values(array_filter($value, fn ($item) => filled($item))); + } + + if (is_string($value) && $value !== '') { + $decoded = json_decode($value, true); + + if (is_array($decoded)) { + return array_values(array_filter($decoded, fn ($item) => filled($item))); + } + + return [$value]; + } + + return []; } private function validateLahan(Request $request) @@ -167,6 +200,7 @@ class PetaniLahanController extends Controller ]); $validated = $this->validateLahan($request); + $validated = array_merge($validated, $this->autoPestDiseaseData($petaniId)); $komoditas = Komoditas::where('id', $request->komoditas_id)->first(); $lahanCount = Lahan::where('petani_id', $petaniId) ->count(); @@ -210,6 +244,8 @@ class PetaniLahanController extends Controller 'serangan_hama' => $lahan->serangan_hama, 'penyakit_tanaman' => $lahan->penyakit_tanaman, 'keparahan_serangan' => $lahan->keparahan_serangan, + 'jenis_hama' => json_encode($lahan->jenis_hama ?? []), + 'jenis_penyakit' => json_encode($lahan->jenis_penyakit ?? []), 'created_by' => auth()->id(), 'updated_by' => auth()->id(), 'created_at' => now(), @@ -269,10 +305,13 @@ class PetaniLahanController extends Controller $komoditas = Komoditas::all(); $tanamanPenaung = JenisTanaman::all(); + $autoPestDiseaseData = $this->autoPestDiseaseData($petaniId); + $jenisHamaOtomatis = $autoPestDiseaseData['jenis_hama']; + $jenisPenyakitOtomatis = $autoPestDiseaseData['jenis_penyakit']; $provinsi = Provinsi::orderBy('kode', 'asc')->get(); - return view('produktivitas.petani.lahan.edit', compact('lahan', 'lahanSelected', 'petani', 'komoditas', 'provinsi', 'tanamanPenaung')); + return view('produktivitas.petani.lahan.edit', compact('lahan', 'lahanSelected', 'petani', 'komoditas', 'provinsi', 'tanamanPenaung', 'jenisHamaOtomatis', 'jenisPenyakitOtomatis')); } public function update(Request $request, string $petaniId, string $id) @@ -290,6 +329,7 @@ class PetaniLahanController extends Controller ->toArray() ]); $validated = $this->validateLahan($request); + $validated = array_merge($validated, $this->autoPestDiseaseData($petaniId)); $komoditas = Komoditas::where('id', $request->komoditas_id)->first(); $tanamanCount = Tanaman::where('lahan_id', $lahan->id)->count(); $lahanCount = Lahan::where('petani_id', $petaniId)->count(); @@ -356,6 +396,8 @@ class PetaniLahanController extends Controller 'serangan_hama' => $lahan->serangan_hama, 'penyakit_tanaman' => $lahan->penyakit_tanaman, 'keparahan_serangan' => $lahan->keparahan_serangan, + 'jenis_hama' => json_encode($lahan->jenis_hama ?? []), + 'jenis_penyakit' => json_encode($lahan->jenis_penyakit ?? []), 'created_by' => auth()->id(), 'updated_by' => auth()->id(), 'created_at' => now(), @@ -368,6 +410,12 @@ class PetaniLahanController extends Controller }); } + $lahan->tanaman()->update([ + 'jenis_hama' => json_encode($lahan->jenis_hama ?? []), + 'jenis_penyakit' => json_encode($lahan->jenis_penyakit ?? []), + 'updated_by' => auth()->id(), + ]); + if ($request->ajax()) { return response()->json([ 'success' => true, diff --git a/app/Models/Pertanian/PraktikBudidaya.php b/app/Models/Pertanian/PraktikBudidaya.php index ba99cff..97454eb 100644 --- a/app/Models/Pertanian/PraktikBudidaya.php +++ b/app/Models/Pertanian/PraktikBudidaya.php @@ -97,6 +97,25 @@ class PraktikBudidaya extends Model $kebiasaan = $praktikBudidaya->kebiasaan_konservasi_tanah ? count($praktikBudidaya->kebiasaan_konservasi_tanah) : 0; $pemahaman = $praktikBudidaya->pemahaman_manfaat_konservasi_tanah == 'Ya, tahu manfaatnya' ? 1 : 0; $skor_konservasi_tanah = 0; + $jenisHama = $praktikBudidaya->jenis_hama ?? []; + $jenisPenyakit = $praktikBudidaya->jenis_penyakit ?? []; + + Lahan::where('petani_id', $praktikBudidaya->petani_id)->get()->each(function (Lahan $lahan) use ($jenisHama, $jenisPenyakit, $praktikBudidaya) { + $lahan->update([ + 'jenis_hama' => $jenisHama, + 'jenis_penyakit' => $jenisPenyakit, + 'updated_by' => $praktikBudidaya->updated_by, + ]); + }); + + Tanaman::where('petani_id', $praktikBudidaya->petani_id)->get()->each(function (Tanaman $tanaman) use ($jenisHama, $jenisPenyakit, $praktikBudidaya) { + $tanaman->update([ + 'jenis_hama' => $jenisHama, + 'jenis_penyakit' => $jenisPenyakit, + 'updated_by' => $praktikBudidaya->updated_by, + ]); + }); + if ($kebiasaan == 0) { $skor_konservasi_tanah = 1; } elseif ($kebiasaan == 1 && $pemahaman == 0) { @@ -117,19 +136,6 @@ class PraktikBudidaya extends Model 'skor_d2_k2_7_penglolaan_air_irigasi' => $praktikBudidaya->kondisi_pengelolaan_air, 'skor_d2_k2_8_praktik_konservasi_tanah' => $skor_konservasi_tanah, ]); - - Lahan::where('petani_id', $petani->id)->update([ - 'jenis_hama' => $praktikBudidaya->jenis_hama, - 'jenis_penyakit' => $praktikBudidaya->jenis_penyakit, - ]); - - Tanaman::whereIn( - 'lahan_id', - Lahan::where('petani_id', $petani->id)->select('id') - )->update([ - 'jenis_hama' => $praktikBudidaya->jenis_hama, - 'jenis_penyakit' => $praktikBudidaya->jenis_penyakit, - ]); }); } @@ -137,4 +143,4 @@ class PraktikBudidaya extends Model { return $this->belongsTo(Petani::class, 'petani_id'); } -} \ No newline at end of file +} diff --git a/resources/views/produktivitas/petani/lahan/add.blade.php b/resources/views/produktivitas/petani/lahan/add.blade.php index b88061a..eac2d4a 100644 --- a/resources/views/produktivitas/petani/lahan/add.blade.php +++ b/resources/views/produktivitas/petani/lahan/add.blade.php @@ -163,6 +163,10 @@ z-index: 100000 !important; } .foto-lightbox-close:hover { color: #dc3545 !important; } + .auto-pest-disease-field .form-check-label, + .auto-pest-disease-field .text-muted { + font-size: 0.875rem; + } @endpush @@ -259,7 +263,7 @@
-
+
@@ -267,7 +271,8 @@ type="checkbox" name="jenis_hama[]" value="Penggerek buah" - id="jenis-hama-penggerek-buah"> + id="jenis-hama-penggerek-buah" + {{ in_array('Penggerek buah', $jenisHamaOtomatis ?? [], true) ? 'checked' : '' }}>
@@ -276,7 +281,8 @@ type="checkbox" name="jenis_hama[]" value="Penggerek batang" - id="jenis-hama-penggerek-batang"> + id="jenis-hama-penggerek-batang" + {{ in_array('Penggerek batang', $jenisHamaOtomatis ?? [], true) ? 'checked' : '' }}>
@@ -285,7 +291,8 @@ type="checkbox" name="jenis_hama[]" value="Kutu putih/kutu sisik" - id="jenis-hama-kutu"> + id="jenis-hama-kutu" + {{ in_array('Kutu putih/kutu sisik', $jenisHamaOtomatis ?? [], true) ? 'checked' : '' }}>
@@ -294,7 +301,8 @@ type="checkbox" name="jenis_hama[]" value="Ulat pemakan daun" - id="jenis-hama-ulat"> + id="jenis-hama-ulat" + {{ in_array('Ulat pemakan daun', $jenisHamaOtomatis ?? [], true) ? 'checked' : '' }}>
@@ -303,15 +311,16 @@ type="checkbox" name="jenis_hama[]" value="Tikus" - id="jenis-hama-tikus"> + id="jenis-hama-tikus" + {{ in_array('Tikus', $jenisHamaOtomatis ?? [], true) ? 'checked' : '' }}> - * Tidak diisi, terisi otomatis + * Tidak diisi, terisi otomatis di Praktik Budidaya @error('jenis_hama')
{{ $message }}
@enderror -
+
@@ -319,7 +328,8 @@ type="checkbox" name="jenis_penyakit[]" value="Karat daun" - id="jenis-penyakit-karat-daun"> + id="jenis-penyakit-karat-daun" + {{ in_array('Karat daun', $jenisPenyakitOtomatis ?? [], true) ? 'checked' : '' }}>
@@ -328,7 +338,8 @@ type="checkbox" name="jenis_penyakit[]" value="Busuk buah/antraknosa" - id="jenis-penyakit-busuk-buah"> + id="jenis-penyakit-busuk-buah" + {{ in_array('Busuk buah/antraknosa', $jenisPenyakitOtomatis ?? [], true) ? 'checked' : '' }}>
@@ -337,7 +348,8 @@ type="checkbox" name="jenis_penyakit[]" value="Busuk akar" - id="jenis-penyakit-busuk-akar"> + id="jenis-penyakit-busuk-akar" + {{ in_array('Busuk akar', $jenisPenyakitOtomatis ?? [], true) ? 'checked' : '' }}>
@@ -346,7 +358,8 @@ type="checkbox" name="jenis_penyakit[]" value="Bercak daun" - id="jenis-penyakit-bercak-daun"> + id="jenis-penyakit-bercak-daun" + {{ in_array('Bercak daun', $jenisPenyakitOtomatis ?? [], true) ? 'checked' : '' }}> @@ -355,10 +368,11 @@ type="checkbox" name="jenis_penyakit[]" value="Layu fusarium" - id="jenis-penyakit-layu-fusarium"> + id="jenis-penyakit-layu-fusarium" + {{ in_array('Layu fusarium', $jenisPenyakitOtomatis ?? [], true) ? 'checked' : '' }}> - * Tidak diisi, terisi otomatis + * Tidak diisi, terisi otomatis di praktik budidaya @error('jenis_penyakit')
{{ $message }}
diff --git a/resources/views/produktivitas/petani/lahan/edit.blade.php b/resources/views/produktivitas/petani/lahan/edit.blade.php index a47770f..e4d4375 100644 --- a/resources/views/produktivitas/petani/lahan/edit.blade.php +++ b/resources/views/produktivitas/petani/lahan/edit.blade.php @@ -34,6 +34,10 @@ .foto-lightbox img { max-width: 90vw !important; max-height: 85vh !important; object-fit: contain !important; border-radius: 8px !important; box-shadow: 0 10px 40px rgba(0,0,0,0.5) !important; } .foto-lightbox-close { position: absolute !important; top: 20px !important; right: 30px !important; color: #fff !important; font-size: 40px !important; font-weight: bold !important; cursor: pointer !important; z-index: 100000 !important; } .foto-lightbox-close:hover { color: #dc3545 !important; } + .auto-pest-disease-field .form-check-label, + .auto-pest-disease-field .text-muted { + font-size: 0.875rem; + } @endpush @@ -161,7 +165,7 @@ --> -
+
@@ -170,7 +174,7 @@ name="jenis_hama[]" value="Penggerek buah" id="jenis-hama-penggerek-buah" - {{ in_array('Penggerek buah', old('jenis_hama', $lahanSelected->jenis_hama ?? [])) ? 'checked' : '' }}> + {{ in_array('Penggerek buah', $jenisHamaOtomatis ?? [], true) ? 'checked' : '' }}>
@@ -180,7 +184,7 @@ name="jenis_hama[]" value="Penggerek batang" id="jenis-hama-penggerek-batang" - {{ in_array('Penggerek batang', old('jenis_hama', $lahanSelected->jenis_hama ?? [])) ? 'checked' : '' }}> + {{ in_array('Penggerek batang', $jenisHamaOtomatis ?? [], true) ? 'checked' : '' }}>
@@ -190,7 +194,7 @@ name="jenis_hama[]" value="Kutu putih/kutu sisik" id="jenis-hama-kutu" - {{ in_array('Kutu putih/kutu sisik', old('jenis_hama', $lahanSelected->jenis_hama ?? [])) ? 'checked' : '' }}> + {{ in_array('Kutu putih/kutu sisik', $jenisHamaOtomatis ?? [], true) ? 'checked' : '' }}>
@@ -200,7 +204,7 @@ name="jenis_hama[]" value="Ulat pemakan daun" id="jenis-hama-ulat" - {{ in_array('Ulat pemakan daun', old('jenis_hama', $lahanSelected->jenis_hama ?? [])) ? 'checked' : '' }}> + {{ in_array('Ulat pemakan daun', $jenisHamaOtomatis ?? [], true) ? 'checked' : '' }}> @@ -210,15 +214,15 @@ name="jenis_hama[]" value="Tikus" id="jenis-hama-tikus" - {{ in_array('Tikus', old('jenis_hama', $lahanSelected->jenis_hama ?? [])) ? 'checked' : '' }}> + {{ in_array('Tikus', $jenisHamaOtomatis ?? [], true) ? 'checked' : '' }}> - * Tidak diisi, terisi otomatis + * Tidak diisi, terisi otomatis di praktik budidaya @error('jenis_hama')
{{ $message }}
@enderror -
+
@@ -227,7 +231,7 @@ name="jenis_penyakit[]" value="Karat daun" id="jenis-penyakit-karat-daun" - {{ in_array('Karat daun', old('jenis_penyakit', $lahanSelected->jenis_penyakit ?? [])) ? 'checked' : '' }} + {{ in_array('Karat daun', $jenisPenyakitOtomatis ?? [], true) ? 'checked' : '' }}>
@@ -237,7 +241,7 @@ name="jenis_penyakit[]" value="Busuk buah/antraknosa" id="jenis-penyakit-busuk-buah" - {{ in_array('Busuk buah/antraknosa', old('jenis_penyakit', $lahanSelected->jenis_penyakit ?? [])) ? 'checked' : '' }} + {{ in_array('Busuk buah/antraknosa', $jenisPenyakitOtomatis ?? [], true) ? 'checked' : '' }}>
@@ -247,7 +251,7 @@ name="jenis_penyakit[]" value="Busuk akar" id="jenis-penyakit-busuk-akar" - {{ in_array('Busuk akar', old('jenis_penyakit', $lahanSelected->jenis_penyakit ?? [])) ? 'checked' : '' }} + {{ in_array('Busuk akar', $jenisPenyakitOtomatis ?? [], true) ? 'checked' : '' }}>
@@ -257,7 +261,7 @@ name="jenis_penyakit[]" value="Bercak daun" id="jenis-penyakit-bercak-daun" - {{ in_array('Bercak daun', old('jenis_penyakit', $lahanSelected->jenis_penyakit ?? [])) ? 'checked' : '' }} + {{ in_array('Bercak daun', $jenisPenyakitOtomatis ?? [], true) ? 'checked' : '' }}> @@ -267,10 +271,10 @@ name="jenis_penyakit[]" value="Layu fusarium" id="jenis-penyakit-layu-fusarium" - {{ in_array('Layu fusarium', old('jenis_penyakit', $lahanSelected->jenis_penyakit ?? [])) ? 'checked' : '' }} + {{ in_array('Layu fusarium', $jenisPenyakitOtomatis ?? [], true) ? 'checked' : '' }}> - * Tidak diisi, terisi otomatis + * Tidak diisi, terisi otomatis di Praktik Budidaya @error('jenis_penyakit')
{{ $message }}