From 3edfc57ba71f46e3f5556eb92ba8c1277c212dbf Mon Sep 17 00:00:00 2001 From: Irwan Cahyono Date: Tue, 14 Jul 2026 17:13:52 +0700 Subject: [PATCH 01/17] skor petani praktik budidaya --- app/Models/Pertanian/Petani.php | 4 ++-- app/Models/Pertanian/PraktikBudidaya.php | 25 ++++++++++++++++++------ app/Models/Pertanian/SurveyPanen.php | 24 +++++++++++++++++++++++ 3 files changed, 45 insertions(+), 8 deletions(-) diff --git a/app/Models/Pertanian/Petani.php b/app/Models/Pertanian/Petani.php index 82db184..95cb12a 100644 --- a/app/Models/Pertanian/Petani.php +++ b/app/Models/Pertanian/Petani.php @@ -138,9 +138,9 @@ class Petani extends Model return $this->hasMany(SurveySertifikasi::class, 'petani_id'); } - public function surveyProduktivitas(): HasOne + public function surveyProduktivitas(): HasMany { - return $this->hasOne(SurveyProduktivitas::class, 'petani_id')->latestOfMany(); + return $this->hasMany(SurveyProduktivitas::class, 'petani_id'); } public function lahans(): HasMany diff --git a/app/Models/Pertanian/PraktikBudidaya.php b/app/Models/Pertanian/PraktikBudidaya.php index 9f82177..0a3782c 100644 --- a/app/Models/Pertanian/PraktikBudidaya.php +++ b/app/Models/Pertanian/PraktikBudidaya.php @@ -91,16 +91,29 @@ class PraktikBudidaya extends Model 'updated_by' => $petani->updated_by ]); } + + $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; + if ($kebiasaan == 0) { + $skor_konservasi_tanah = 1; + } elseif ($kebiasaan == 1 && $pemahaman == 0) { + $skor_konservasi_tanah = 2; + } elseif ($kebiasaan == 1 && $pemahaman == 1) { + $skor_konservasi_tanah = 3; + } elseif ($kebiasaan > 1 && $pemahaman == 0) { + $skor_konservasi_tanah = 4; + } elseif ($kebiasaan > 1 && $pemahaman == 1) { + $skor_konservasi_tanah = 5; + } $skor->update([ - - 'skor_d2_k2_3_praktik_pemangkasan' => $praktikBudidaya->frekuensi_pemangkasan_komoditas_utama, + 'skor_d2_k2_3_praktik_pemangkasan' => $praktikBudidaya->frekuensi_pemangkasan_utama, 'skor_d2_k2_4_praktik_pemupukan' => $praktikBudidaya->pemberian_pupuk, - 'skor_d2_k2_5_pengendalian_opt' => $praktikBudidaya->metode_penanganan_hama_penyakit, + 'skor_d2_k2_5_pengendalian_opt' => $praktikBudidaya->metode_penanganan_opt, 'skor_d2_k2_6_sanitasi_kebun' => $praktikBudidaya->frekuensi_sanitasi_lahan, 'skor_d2_k2_6b_pengelolaan_gulma' => $praktikBudidaya->penanganan_gulma, - 'skor_d2_k2_7_penglolaan_air_irigasi' => $praktikBudidaya->kondisi_pengelolaan_air_irigasi, - //'skor_d2_k2_8_praktik_konservasi_tanah' => $praktikBudidaya->kebiasaan_konservasi_tanah, - //'skor_d2_k3_1_penentuan_pematangan' => $praktikBudidaya-> + 'skor_d2_k2_7_penglolaan_air_irigasi' => $praktikBudidaya->kondisi_pengelolaan_air, + 'skor_d2_k2_8_praktik_konservasi_tanah' => $skor_konservasi_tanah, ]); }); } diff --git a/app/Models/Pertanian/SurveyPanen.php b/app/Models/Pertanian/SurveyPanen.php index 04a4c18..5a7f4ab 100644 --- a/app/Models/Pertanian/SurveyPanen.php +++ b/app/Models/Pertanian/SurveyPanen.php @@ -44,6 +44,30 @@ class SurveyPanen extends Model 'deleted_by', ]; + protected static function booted(): void + { + static::saved(function (SurveyPanen $survey) { + + $petani = Petani::find($survey->petani_id); + $skor = SkorPetani::where('petani_id', $petani->id)->orderBy('id')->first(); + if (!$skor) { + $petaniUid = $petani->uid; + $part = explode('-', $petaniUid); + $skor = SkorPetani::create([ + 'petani_id' => $petani->id, + 'uid' => 'SKR-' . $part[1] . '-' . strtoupper(Str::random(10)), + 'created_by' => $petani->created_by, + 'updated_by' => $petani->updated_by + ]); + } + + $skor->update([ + 'skor_d2_k3_1_penentuan_pematangan' => $survey->dasar_penentuan_panen, + 'skor_d2_k3_5_sortasi_awal_pemisahan_kualitas' => $survey->praktik_sortasi, + ]); + }); + } + public function petani(): BelongsTo { return $this->belongsTo(Petani::class, 'petani_id'); From 857da1e900892e99126353f46b2d9d35c44a3612 Mon Sep 17 00:00:00 2001 From: ahmadafriadi Date: Tue, 14 Jul 2026 22:34:38 +0700 Subject: [PATCH 02/17] Update Master Komoditas & Varietas --- .../Web/Master/KomoditasController.php | 19 ++++++++++++----- .../views/master/komoditas/add.blade.php | 6 +++++- .../views/master/komoditas/edit.blade.php | 4 ++++ .../views/master/komoditas/index.blade.php | 2 ++ .../views/master/komoditas/view.blade.php | 4 ++++ .../views/master/varietas/index.blade.php | 21 ------------------- 6 files changed, 29 insertions(+), 27 deletions(-) diff --git a/app/Http/Controllers/Web/Master/KomoditasController.php b/app/Http/Controllers/Web/Master/KomoditasController.php index 14d4583..b4f2938 100644 --- a/app/Http/Controllers/Web/Master/KomoditasController.php +++ b/app/Http/Controllers/Web/Master/KomoditasController.php @@ -27,10 +27,14 @@ class KomoditasController extends Controller public function store(Request $request) { + // dd($request->all()); $validator = Validator::make($request->all(), [ - 'nama' => ['required', 'string', 'max:255', 'unique:master_komoditas,nama'], // Tambah unique biar nggak ada data kembar + 'nama' => ['required', 'string', 'max:255', 'unique:master_komoditas,nama'], + 'kode' => ['required', 'string', 'max:2', 'unique:master_komoditas,kode'], ], [ - 'nama.unique' => 'Nama komoditas ini sudah ada di database.' + 'nama.unique' => 'Nama komoditas ini sudah ada di database.', + 'kode.unique' => 'Kode komoditas ini sudah ada di database.', + 'kode.max' => 'Kode komoditas maksimal 2 Digit.' ]); if ($validator->fails()) { @@ -39,6 +43,7 @@ class KomoditasController extends Controller Komoditas::create([ 'nama' => $request->nama, + 'kode' => $request->kode, 'created_by' => auth()->id(), 'updated_by' => auth()->id(), ]); @@ -56,8 +61,11 @@ class KomoditasController extends Controller { $validator = Validator::make($request->all(), [ 'nama' => ['required', 'string', 'max:255', 'unique:master_komoditas,nama,' . $id], + 'kode' => ['required', 'string', 'max:2', 'unique:master_komoditas,kode'], ], [ - 'nama.unique' => 'Nama komoditas ini sudah digunakan.' + 'nama.unique' => 'Nama komoditas ini sudah ada di database.', + 'kode.unique' => 'Kode komoditas ini sudah ada di database.', + 'kode.max' => 'Kode komoditas maksimal 2 Digit.' ]); if ($validator->fails()) { @@ -66,8 +74,9 @@ class KomoditasController extends Controller $komoditas = Komoditas::findOrFail($id); $komoditas->update([ - 'nama' => $request->nama, - 'updated_by' => auth()->id(), + 'nama' => $request->nama, + 'kode' => $request->kode, + 'updated_by' => auth()->id(), ]); return response()->json(['status' => 'success', 'message' => 'Komoditas berhasil diupdate.']); diff --git a/resources/views/master/komoditas/add.blade.php b/resources/views/master/komoditas/add.blade.php index ac0b7a1..4c4f241 100644 --- a/resources/views/master/komoditas/add.blade.php +++ b/resources/views/master/komoditas/add.blade.php @@ -8,7 +8,11 @@ @csrf
- + +
+
+ +
diff --git a/resources/views/master/komoditas/edit.blade.php b/resources/views/master/komoditas/edit.blade.php index 33a95a2..a49dc3c 100644 --- a/resources/views/master/komoditas/edit.blade.php +++ b/resources/views/master/komoditas/edit.blade.php @@ -13,6 +13,10 @@
+
+ + +
diff --git a/resources/views/master/komoditas/index.blade.php b/resources/views/master/komoditas/index.blade.php index ac261da..b15cbf2 100644 --- a/resources/views/master/komoditas/index.blade.php +++ b/resources/views/master/komoditas/index.blade.php @@ -144,6 +144,7 @@ if (res.status === 'success') { $('#edit-id').val(res.data.id); $('#edit-nama').val(res.data.nama); + $('#edit-kode').val(res.data.kode); if (typeof fvEdit !== 'undefined') fvEdit.resetForm(); offcanvasEdit.show(); } @@ -166,6 +167,7 @@ $btn.removeClass('disabled'); if (res.status === 'success') { $('#view-nama').val(res.data.nama); + $('#view-kode').val(res.data.kode); offcanvasView.show(); } }).fail((xhr) => { diff --git a/resources/views/master/komoditas/view.blade.php b/resources/views/master/komoditas/view.blade.php index e84dc21..9fcde1e 100644 --- a/resources/views/master/komoditas/view.blade.php +++ b/resources/views/master/komoditas/view.blade.php @@ -9,6 +9,10 @@
+
+ + +
diff --git a/resources/views/master/varietas/index.blade.php b/resources/views/master/varietas/index.blade.php index ace8140..cf0b7e0 100644 --- a/resources/views/master/varietas/index.blade.php +++ b/resources/views/master/varietas/index.blade.php @@ -47,27 +47,6 @@ -
-
-
-
-
- Titik Penanaman -

- {{ number_format($totalTitikTanam, 0, ',', '.') }} -

-
-
-
- -
-
-
- Distribusi lahan aktif -
-
-
-
From 981bc0d494e020c879a9534c089fb0f0c888b4ff Mon Sep 17 00:00:00 2001 From: ahmadafriadi Date: Tue, 14 Jul 2026 23:05:16 +0700 Subject: [PATCH 03/17] Update Master Komoditas --- app/Models/Pertanian/Komoditas.php | 1 + resources/views/master/komoditas/index.blade.php | 2 ++ 2 files changed, 3 insertions(+) diff --git a/app/Models/Pertanian/Komoditas.php b/app/Models/Pertanian/Komoditas.php index fc044b0..1b1b31c 100644 --- a/app/Models/Pertanian/Komoditas.php +++ b/app/Models/Pertanian/Komoditas.php @@ -18,6 +18,7 @@ class Komoditas extends Model protected $fillable = [ 'nama', + 'kode', 'created_by', 'updated_by', 'deleted_by', diff --git a/resources/views/master/komoditas/index.blade.php b/resources/views/master/komoditas/index.blade.php index b15cbf2..e251ea4 100644 --- a/resources/views/master/komoditas/index.blade.php +++ b/resources/views/master/komoditas/index.blade.php @@ -49,6 +49,7 @@ No Nama Komoditas + Kode Komoditas Aksi @@ -57,6 +58,7 @@ {{ $komoditas->firstItem() + $index }} {{ $item->nama }} + {{ $item->kode }}
From d6c036e19af6be88f61505e1386076359c3bccc2 Mon Sep 17 00:00:00 2001 From: ahmadafriadi Date: Tue, 14 Jul 2026 23:35:15 +0700 Subject: [PATCH 04/17] Update Header Survey Petani --- resources/views/produktivitas/petani/header.blade.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/resources/views/produktivitas/petani/header.blade.php b/resources/views/produktivitas/petani/header.blade.php index 9521240..45e3d9f 100644 --- a/resources/views/produktivitas/petani/header.blade.php +++ b/resources/views/produktivitas/petani/header.blade.php @@ -158,7 +158,8 @@ @php $produktivitas = isset($petani?->surveyProduktivitas) ? $petani?->surveyProduktivitas : null; if (!is_null($produktivitas)) { - $produktivitas = $produktivitas->get()->where('komoditas_id', $petani->komoditas_id); + $produktivitas = $petani?->surveyProduktivitas + ?->firstWhere('komoditas_id', $petani?->komoditas_id); } @endphp
From 08c19c0714ddce28fc76449410b5443fc997bb50 Mon Sep 17 00:00:00 2001 From: Irwan Cahyono Date: Wed, 15 Jul 2026 00:18:00 +0700 Subject: [PATCH 05/17] skor petani --- app/Models/Pertanian/AksesPasar.php | 3 +- app/Models/Pertanian/SkorPetani.php | 2 +- app/Models/Pertanian/SosialEkonomi.php | 36 +++++++++++++++++++ .../produktivitas/petani/header.blade.php | 2 +- .../produktivitas/petani/skor/index.blade.php | 6 +--- 5 files changed, 41 insertions(+), 8 deletions(-) diff --git a/app/Models/Pertanian/AksesPasar.php b/app/Models/Pertanian/AksesPasar.php index f455bd2..8f77920 100644 --- a/app/Models/Pertanian/AksesPasar.php +++ b/app/Models/Pertanian/AksesPasar.php @@ -50,7 +50,7 @@ class AksesPasar extends Model static::saved(function (AksesPasar $aksesPasar) { $petani = Petani::find($aksesPasar->petani_id); - $skor = SkorPetani::where('petani_id')->orderBy('id')->first(); + $skor = SkorPetani::where('petani_id', $petani->id)->orderBy('id')->first(); if (!$skor) { $petaniUid = $petani->uid; $part = explode('-', $petaniUid); @@ -61,6 +61,7 @@ class AksesPasar extends Model 'updated_by' => $petani->updated_by ]); } + $skor->update([ 'skor_d6_k1_6_pengalaman_menjual_ke_saluran_berbeda' => $aksesPasar->skor_pengalaman, 'skor_d6_k4_1_kesadaran_akses_pasar_premium' => $aksesPasar->skor_kesadaran_premium, diff --git a/app/Models/Pertanian/SkorPetani.php b/app/Models/Pertanian/SkorPetani.php index 69c649b..ccb5a4b 100644 --- a/app/Models/Pertanian/SkorPetani.php +++ b/app/Models/Pertanian/SkorPetani.php @@ -50,7 +50,7 @@ class SkorPetani extends Model 'skor_d4_k5_2_pengalaman_kredit_formal', 'skor_d4_k5_3_kepemilikan_aset_produktif', 'skor_d4_k5_4_kepemilikan_aset_tidak_produktif', - 'skor_d4_k5_4_5_akses_program_bantuan', + 'skor_d4_k5_4_akses_program_bantuan', 'skor_d4_k6_3_keberadaan_hutang_terkait_panen', 'skor_d4_k6_5a_praktik_ijon', 'skor_d4_k6_5b_kebebasan_memilih_pembeli', diff --git a/app/Models/Pertanian/SosialEkonomi.php b/app/Models/Pertanian/SosialEkonomi.php index 4cb082e..2cabcb2 100644 --- a/app/Models/Pertanian/SosialEkonomi.php +++ b/app/Models/Pertanian/SosialEkonomi.php @@ -41,6 +41,7 @@ use App\Enums\SosialEkonomi\UsahaMutuTambahanHarga; use App\Models\Pertanian\Petani; use App\Models\Pertanian\SkorPetani; +use App\Models\Pertanian\PraktikBudidaya; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; @@ -204,7 +205,42 @@ class SosialEkonomi extends Model 'updated_by' => $petani->updated_by ]); } + $praktik = PraktikBudidaya::where('petani_id', $petani->id)->orderBy('id')->first(); + $pendapatan = PendapatanKomoditas::where('sosial_ekonomi_id', $sosialEkonomi->id)->get(); + + $rasio = 0; + if ($praktik && ($pendapatan && $pendapatan->count() > 0 && $pendapatan->sum('pendapatan') > 0)) { + $rasio = $praktik->total_estimasi_biaya_produksi / $pendapatan->sum('pendapatan'); + } + if ($rasio >= 0.8) { + $skorRasio = 1; + } else if ($rasio >= 0.6) { + $skorRasio = 2; + } else if ($rasio >= 0.45) { + $skorRasio = 3; + } else if ($rasio >= 0.3) { + $skorRasio = 4; + } else { + $skorRasio = 5; + } + $skor->update([ + 'skor_d4_k3_1_praktik_baru' => $sosialEkonomi->kemauan_mencoba_praktik_baru?->value, + 'skor_d4_k3_4_pemahaman_mutu_harga' => $sosialEkonomi->pemahaman_mutu_harga?->value, + 'skor_d4_k3_5_role_model' => $sosialEkonomi->panutan_petani_sukses?->value, + 'skor_d4_k3_6_kemampuan_keterlibatan_program' => $sosialEkonomi->kemauan_ikut_program?->value, + 'skor_d4_k3_7_orientasi_jangka_panjang' => $sosialEkonomi->orientasi_rencana_jangka_panjang?->value, + + 'skor_d4_k2_5_stabilitas_penghasilan' => $sosialEkonomi->skor_periode_paceklik?->value, + 'skor_d4_k2_8_kemampuan_menabung' => $sosialEkonomi->skor_kemampuan_menabung?->value, + 'skor_d4_k2_9_kecukupan_penghasilan' => $sosialEkonomi->skor_kecukupan_penghasilan?->value, + 'skor_d4_k2_3_k2_7_rasio_biaya_produksi_pendapatan' => $skorRasio, + 'skor_d4_k2_11_hak_kelola_lahan' => $sosialEkonomi->skor_kejelasan_status_lahan?->value, + + 'skor_d4_k4_2_keaktifan_pertemuan' => $sosialEkonomi->keaktifan_pertemuan_kelompok?->value, + 'skor_d4_k4_3_peran_dalam_kelompok' => $sosialEkonomi->peran_dalam_kelompok?->value, + 'skor_d4_k4_4_manfaat_dirasakan' => $sosialEkonomi->manfaat_kelompok_tani?->value, + 'skor_d4_k5_1_kepemilikan_rekening' => $sosialEkonomi->status_rekening_tabungan?->value, 'skor_d4_k5_2_pengalaman_kredit_formal' => $sosialEkonomi->pengalaman_kredit_kebun?->value, 'skor_d4_k5_3_kepemilikan_aset_produktif' => $sosialEkonomi->kondisi_aset_produktif?->value, diff --git a/resources/views/produktivitas/petani/header.blade.php b/resources/views/produktivitas/petani/header.blade.php index 9521240..ec77916 100644 --- a/resources/views/produktivitas/petani/header.blade.php +++ b/resources/views/produktivitas/petani/header.blade.php @@ -158,7 +158,7 @@ @php $produktivitas = isset($petani?->surveyProduktivitas) ? $petani?->surveyProduktivitas : null; if (!is_null($produktivitas)) { - $produktivitas = $produktivitas->get()->where('komoditas_id', $petani->komoditas_id); + $produktivitas = $produktivitas->where('komoditas_id', $petani->komoditas_id); } @endphp
diff --git a/resources/views/produktivitas/petani/skor/index.blade.php b/resources/views/produktivitas/petani/skor/index.blade.php index b14d92c..674a3a4 100644 --- a/resources/views/produktivitas/petani/skor/index.blade.php +++ b/resources/views/produktivitas/petani/skor/index.blade.php @@ -239,13 +239,9 @@ Kepemilikan aset produktif {{ number_format($skor->skor_d4_k5_3_kepemilikan_aset_produktif, 1, ',', '.') }} - - Kepemilikan aset tidak produktif - {{ number_format($skor->skor_d4_k5_4_kepemilikan_aset_tidak_produktif, 1, ',', '.') }} - Akses program bantuan - {{ number_format($skor->skor_d4_k5_4_5_akses_program_bantuan, 1, ',', '.') }} + {{ number_format($skor->skor_d4_k5_4_akses_program_bantuan, 1, ',', '.') }} Keberadaan hutang terkait panen From 002d6044b407317836310d2175e167a27bef4231 Mon Sep 17 00:00:00 2001 From: Irwan Cahyono Date: Wed, 15 Jul 2026 01:06:10 +0700 Subject: [PATCH 06/17] profil petani dashboard --- .../Web/Dashboard/ProfilPetaniController.php | 6 ++-- resources/views/dashboard/petani.blade.php | 29 ++++++++++--------- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/app/Http/Controllers/Web/Dashboard/ProfilPetaniController.php b/app/Http/Controllers/Web/Dashboard/ProfilPetaniController.php index 6d88699..8e25ae8 100644 --- a/app/Http/Controllers/Web/Dashboard/ProfilPetaniController.php +++ b/app/Http/Controllers/Web/Dashboard/ProfilPetaniController.php @@ -17,7 +17,7 @@ class ProfilPetaniController extends Controller { public function index() { - if (!Gate::allows('super_admin') && !Gate::allows('admin')) { + if (!Gate::any(['super_admin', 'admin', 'fasilitator'])) { abort(403); } $title = 'Dashboard Profil Petani'; @@ -35,8 +35,8 @@ class ProfilPetaniController extends Controller ->get(); $lahanSummary = Lahan::select( 'komoditas_id', - DB::raw('COUNT(*) as total', - DB::raw('SUM(luas_lahan) as luas_lahan')) + DB::raw('COUNT(*) as total'), + DB::raw('SUM(luas_lahan) as luas_lahan') ) ->whereIn('petani_id', $petani) ->groupBy('komoditas_id') diff --git a/resources/views/dashboard/petani.blade.php b/resources/views/dashboard/petani.blade.php index 3cc247b..649aa99 100644 --- a/resources/views/dashboard/petani.blade.php +++ b/resources/views/dashboard/petani.blade.php @@ -31,7 +31,7 @@
-

{{ $lahanSummary->sum('luas_lahan') }}m2

+

{{ number_format($lahanSummary->sum('luas_lahan'), 0, ',', '.') }}m2

Lahan

@@ -91,10 +91,10 @@

- {{ $skorSummary->where('segmentasi', 'Penggerak')->sum('total') }} petani + {{ $skorSummary->where('segmen', 'Penggerak')->sum('total') }} petani - {{ number_format(($skorSummary->where('segmentasi', 'Penggerak')->sum('total') / $petaniSummary->sum('total')) * 100, 2) }}% + {{ number_format(($skorSummary->where('segmen', 'Penggerak')->sum('total') / $petaniSummary->sum('total')) * 100, 2) }}% @@ -110,10 +110,10 @@
- {{ $skorSummary->where('segmentasi', 'Perintis')->sum('total') }} petani + {{ $skorSummary->where('segmen', 'Perintis')->sum('total') }} petani - {{ number_format(($skorSummary->where('segmentasi', 'Perintis')->sum('total') / $petaniSummary->sum('total')) * 100, 2) }}% + {{ number_format(($skorSummary->where('segmen', 'Perintis')->sum('total') / $petaniSummary->sum('total')) * 100, 2) }}% @@ -129,10 +129,10 @@ - {{ $skorSummary->where('segmentasi', 'Pemerhati')->sum('total') }} petani + {{ $skorSummary->where('segmen', 'Pemerhati')->sum('total') }} petani - {{ number_format(($skorSummary->where('segmentasi', 'Pemerhati')->sum('total') / $petaniSummary->sum('total')) * 100, 2) }}% + {{ number_format(($skorSummary->where('segmen', 'Pemerhati')->sum('total') / $petaniSummary->sum('total')) * 100, 2) }}% @@ -148,10 +148,10 @@ - {{ $skorSummary->where('segmentasi', 'Pemula')->sum('total') }} petani + {{ $skorSummary->where('segmen', 'Pemula')->sum('total') }} petani - {{ number_format(($skorSummary->where('segmentasi', 'Pemula')->sum('total') / $petaniSummary->sum('total')) * 100, 2) }}% + {{ number_format(($skorSummary->where('segmen', 'Pemula')->sum('total') / $petaniSummary->sum('total')) * 100, 2) }}% @@ -173,6 +173,7 @@ @foreach ($komoditas as $k) where('komoditas_id', $k->id) + ->whereIn('segmen', ['Penggerak', 'Perintis', 'Pemerhati', 'Pemula']) ->sortByDesc('total') ->first(); ?> @@ -182,19 +183,19 @@ @if(isset($max)) - @if($max->segmentasi == 'Penggerak') + @if($max->segmen == 'Penggerak') Petani Penggerak - @elseif($max->segmentasi == 'Perintis') + @elseif($max->segmen == 'Perintis') Petani Perintis - @elseif($max->segmentasi == 'Pemerhati') + @elseif($max->segmen == 'Pemerhati') Petani Pemerhati - @elseif($max->segmentasi == 'Pemula') + @elseif($max->segmen == 'Pemula') Petani Pemula @else Belum Lengkap @endif @else - Belum Ada + Belum Tersegmentasi @endif From 61bd8dc38868d4fbbc18e7360c806ed11e68a5e4 Mon Sep 17 00:00:00 2001 From: Irwan Cahyono Date: Wed, 15 Jul 2026 01:11:19 +0700 Subject: [PATCH 07/17] redirect web --- routes/web.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/routes/web.php b/routes/web.php index 58e3be9..5a23c34 100644 --- a/routes/web.php +++ b/routes/web.php @@ -13,11 +13,14 @@ Route::post('/logout', [App\Http\Controllers\Web\Konfigurasi\AuthController::cla Route::view('/offline', 'offline')->name('offline'); Route::get('/', function() { - $userRole = auth()->check() ? (auth()->user()->role instanceof \App\Enums\Role ? auth()->user()->role->value : auth()->user()->role) : null; + if (!auth()->check()) { + return redirect()->route('login'); + } - if ($userRole == 'fasilitator') { + if (auth()->user()->role->value === 'fasilitator') { return redirect()->route('dashboard.survey-petani'); } + return redirect()->route('dashboard.produktivitas'); })->name('home'); From f4c83d348a9b9c06f57ec9d74062e716a963cc22 Mon Sep 17 00:00:00 2001 From: Irwan Cahyono Date: Wed, 15 Jul 2026 01:19:12 +0700 Subject: [PATCH 08/17] filter fasil --- .../Web/Produktivitas/PetaniController.php | 8 ++++++++ .../views/produktivitas/petani/index.blade.php | 13 ++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/Web/Produktivitas/PetaniController.php b/app/Http/Controllers/Web/Produktivitas/PetaniController.php index 387ba64..cc72500 100644 --- a/app/Http/Controllers/Web/Produktivitas/PetaniController.php +++ b/app/Http/Controllers/Web/Produktivitas/PetaniController.php @@ -27,6 +27,10 @@ class PetaniController extends Controller */ public function index(Request $request) { + if (!Gate::any(['super_admin', 'admin', 'fasilitator'])) { + abort(403); + } + $provinsi = Provinsi::orderBy('kode', 'asc')->get(); $query = Petani::with('desakelurahan') @@ -39,6 +43,10 @@ class PetaniController extends Controller }); } + if (auth()->user()->role->value === 'fasilitator') { + $query->where('created_by', auth()->user()->id); + } + $petani = $query->paginate($request->per_page ?? 10); return view('produktivitas.petani.index', compact('petani', 'provinsi')); diff --git a/resources/views/produktivitas/petani/index.blade.php b/resources/views/produktivitas/petani/index.blade.php index 51dd6e3..33dd94e 100644 --- a/resources/views/produktivitas/petani/index.blade.php +++ b/resources/views/produktivitas/petani/index.blade.php @@ -40,6 +40,7 @@ Jenis Kelamin Usia Desa/Kelurahan + Segmentasi Aksi @@ -51,7 +52,17 @@ {{ $item->jenis_kelamin ? 'Laki-laki' : 'Perempuan' }} {{ $item->umur }} tahun {{ $item->desaKelurahan?->nama }}, {{ $item->desaKelurahan?->kecamatan?->nama }}, {{ $item->desaKelurahan?->kecamatan?->kabupatenKota?->nama }}, {{ $item->desaKelurahan?->kecamatan?->kabupatenKota?->provinsi?->nama }} - + + @if($item->segmen() == 'Penggerak') + Penggerak + @elseif($item->segmen() == 'Perintis') + Perintis + @elseif($item->segmen() == 'Pemerhati') + Pemerhati + @elseif($item->segmen() == 'Pemula') + Pemula + @endif +
From 05cc3be9d38d200fb0c5d8868773d83914a81110 Mon Sep 17 00:00:00 2001 From: Irwan Cahyono Date: Wed, 15 Jul 2026 01:34:47 +0700 Subject: [PATCH 09/17] enum pendidikan --- app/Enums/Pendidikan.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/Enums/Pendidikan.php b/app/Enums/Pendidikan.php index 6dbdc22..459c954 100644 --- a/app/Enums/Pendidikan.php +++ b/app/Enums/Pendidikan.php @@ -19,13 +19,13 @@ enum Pendidikan: string { return match($this) { self::TIDAK_SEKOLAH => 'Tidak Sekolah', - self::SD => 'SD atau Sederajat', - self::SMP => 'SMP atau Sederajat', - self::SMA => 'SMA atau Sederajat', + self::SD => 'SD', + self::SMP => 'SMP', + self::SMA => 'SMA/SMK', self::DIPLOMA => 'Diploma 1-3 (D1-D3)', - self::SARJANA => 'Sarjana (S1) atau sederajat', - self::MAGISTER => 'Magister (S2) atau sederajat', - self::DOKTOR => 'Doktor (S3) atau sederajat', + self::SARJANA => 'Sarjana (S1)', + self::MAGISTER => 'Magister (S2)', + self::DOKTOR => 'Doktor (S3)', self::PESANTREN => 'Pesantren, Semiari, Wihara, atau Pendidikan Keagamaan Formal', self::LAINNYA => 'Lainnya', }; From 3908b0be710f5bad05be7f9b2497b1841edde3fa Mon Sep 17 00:00:00 2001 From: Irwan Cahyono Date: Wed, 15 Jul 2026 10:37:38 +0700 Subject: [PATCH 10/17] komoditas utama --- app/Http/Controllers/Web/Produktivitas/PetaniController.php | 4 ++-- app/Models/Pertanian/Komoditas.php | 1 + resources/views/produktivitas/petani/lahan/add.blade.php | 2 +- resources/views/produktivitas/petani/lahan/edit.blade.php | 2 +- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/app/Http/Controllers/Web/Produktivitas/PetaniController.php b/app/Http/Controllers/Web/Produktivitas/PetaniController.php index cc72500..6a176fd 100644 --- a/app/Http/Controllers/Web/Produktivitas/PetaniController.php +++ b/app/Http/Controllers/Web/Produktivitas/PetaniController.php @@ -62,7 +62,7 @@ class PetaniController extends Controller $pekerjaan = Pekerjaan::options(); $pernikahan = Pernikahan::options(); - $komoditas = Komoditas::all(); + $komoditas = Komoditas::where('is_utama', true)->get(); $provinsi = Provinsi::orderBy('kode', 'asc')->get(); @@ -182,7 +182,7 @@ class PetaniController extends Controller $provinsi = Provinsi::all(); - $komoditas = Komoditas::all(); + $komoditas = Komoditas::where('is_utama', true)->get(); return view('produktivitas.petani.edit', compact('petani', 'pendidikan', 'pekerjaan', 'pernikahan', 'provinsi', 'komoditas')); diff --git a/app/Models/Pertanian/Komoditas.php b/app/Models/Pertanian/Komoditas.php index 1b1b31c..6bd810a 100644 --- a/app/Models/Pertanian/Komoditas.php +++ b/app/Models/Pertanian/Komoditas.php @@ -22,6 +22,7 @@ class Komoditas extends Model 'created_by', 'updated_by', 'deleted_by', + 'is_utama', ]; protected static function booted() diff --git a/resources/views/produktivitas/petani/lahan/add.blade.php b/resources/views/produktivitas/petani/lahan/add.blade.php index 4266149..25a1cb2 100644 --- a/resources/views/produktivitas/petani/lahan/add.blade.php +++ b/resources/views/produktivitas/petani/lahan/add.blade.php @@ -221,7 +221,7 @@ diff --git a/resources/views/produktivitas/petani/lahan/edit.blade.php b/resources/views/produktivitas/petani/lahan/edit.blade.php index ef85fd3..e996305 100644 --- a/resources/views/produktivitas/petani/lahan/edit.blade.php +++ b/resources/views/produktivitas/petani/lahan/edit.blade.php @@ -79,7 +79,7 @@ From f0acd8c7edfde38dcdeb2f388dbffdb76ca9c597 Mon Sep 17 00:00:00 2001 From: Irwan Cahyono Date: Wed, 15 Jul 2026 10:41:27 +0700 Subject: [PATCH 11/17] dashboard komoditas --- app/Http/Controllers/Web/Dashboard/ProfilPetaniController.php | 2 +- app/Http/Controllers/Web/Dashboard/SurveyPetaniController.php | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/Web/Dashboard/ProfilPetaniController.php b/app/Http/Controllers/Web/Dashboard/ProfilPetaniController.php index 8e25ae8..dd154e5 100644 --- a/app/Http/Controllers/Web/Dashboard/ProfilPetaniController.php +++ b/app/Http/Controllers/Web/Dashboard/ProfilPetaniController.php @@ -22,7 +22,7 @@ class ProfilPetaniController extends Controller } $title = 'Dashboard Profil Petani'; - $komoditas = Komoditas::all(); + $komoditas = Komoditas::where('is_utama', true)->get(); $petani = Petani::pluck('id'); $lahan = Lahan::whereIn('petani_id', $petani)->get(); diff --git a/app/Http/Controllers/Web/Dashboard/SurveyPetaniController.php b/app/Http/Controllers/Web/Dashboard/SurveyPetaniController.php index eaf892c..3c3042e 100644 --- a/app/Http/Controllers/Web/Dashboard/SurveyPetaniController.php +++ b/app/Http/Controllers/Web/Dashboard/SurveyPetaniController.php @@ -57,6 +57,7 @@ class SurveyPetaniController extends Controller ->leftJoin("{$komoditasTable} as k", 'k.id', '=', 'p.komoditas_id') ->selectRaw("COALESCE(k.nama, 'Belum ditentukan') as nama") ->selectRaw('COUNT(p.id) as petani_count') + ->where('k.is_utama', true) ->groupBy('k.id', 'k.nama') ->orderByDesc('petani_count') ->get(); @@ -155,6 +156,7 @@ class SurveyPetaniController extends Controller ->leftJoin("{$komoditasTable} as k", 'k.id', '=', 'p.komoditas_id') ->selectRaw("COALESCE(k.nama, 'Belum ditentukan') as label") ->selectRaw('COALESCE(SUM(l.jumlah_tanaman), 0) as total') + ->where('k.is_utama', true) ->groupBy('k.id', 'k.nama') ->orderByDesc('total') ->get(); From 62f0f1bdbcf6b215ef00abb78ff63d0379a33275 Mon Sep 17 00:00:00 2001 From: Irwan Cahyono Date: Wed, 15 Jul 2026 10:55:11 +0700 Subject: [PATCH 12/17] tgl lahir edit --- resources/views/produktivitas/petani/edit.blade.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/resources/views/produktivitas/petani/edit.blade.php b/resources/views/produktivitas/petani/edit.blade.php index 38f9d95..f7f8c64 100644 --- a/resources/views/produktivitas/petani/edit.blade.php +++ b/resources/views/produktivitas/petani/edit.blade.php @@ -83,9 +83,9 @@ @error('tempat_lahir')
{{ $message }}
@enderror
- - + + @error('tanggal_lahir')
{{ $message }}
@enderror
From a79a93d291ececc13fb524899ceef052290441fa Mon Sep 17 00:00:00 2001 From: ahmadafriadi Date: Wed, 15 Jul 2026 11:30:10 +0700 Subject: [PATCH 13/17] Update komoditas Utama --- .../Web/Master/KomoditasController.php | 21 +++++----- app/Models/Pertanian/Komoditas.php | 4 ++ .../views/master/komoditas/add.blade.php | 27 +++++++++++++ .../views/master/komoditas/edit.blade.php | 30 ++++++++++++++ .../views/master/komoditas/index.blade.php | 39 ++++++++++++++++++- .../views/master/komoditas/view.blade.php | 4 ++ 6 files changed, 115 insertions(+), 10 deletions(-) diff --git a/app/Http/Controllers/Web/Master/KomoditasController.php b/app/Http/Controllers/Web/Master/KomoditasController.php index b4f2938..3f599f6 100644 --- a/app/Http/Controllers/Web/Master/KomoditasController.php +++ b/app/Http/Controllers/Web/Master/KomoditasController.php @@ -27,14 +27,14 @@ class KomoditasController extends Controller public function store(Request $request) { - // dd($request->all()); $validator = Validator::make($request->all(), [ - 'nama' => ['required', 'string', 'max:255', 'unique:master_komoditas,nama'], - 'kode' => ['required', 'string', 'max:2', 'unique:master_komoditas,kode'], + 'nama' => ['required', 'string', 'max:255', 'unique:master_komoditas,nama'], + 'kode' => ['required', 'string', 'max:2', 'unique:master_komoditas,kode'], + 'is_utama' => ['nullable', 'boolean'], ], [ - 'nama.unique' => 'Nama komoditas ini sudah ada di database.', - 'kode.unique' => 'Kode komoditas ini sudah ada di database.', - 'kode.max' => 'Kode komoditas maksimal 2 Digit.' + 'nama.unique' => 'Nama komoditas ini sudah ada di database.', + 'kode.unique' => 'Kode komoditas ini sudah ada di database.', + 'kode.max' => 'Kode komoditas maksimal 2 Digit.' ]); if ($validator->fails()) { @@ -43,7 +43,8 @@ class KomoditasController extends Controller Komoditas::create([ 'nama' => $request->nama, - 'kode' => $request->kode, + 'kode' => $request->kode, + 'is_utama' => $request->is_utama, 'created_by' => auth()->id(), 'updated_by' => auth()->id(), ]); @@ -60,8 +61,9 @@ class KomoditasController extends Controller public function update(Request $request, $id) { $validator = Validator::make($request->all(), [ - 'nama' => ['required', 'string', 'max:255', 'unique:master_komoditas,nama,' . $id], - 'kode' => ['required', 'string', 'max:2', 'unique:master_komoditas,kode'], + 'nama' => ['required', 'string', 'max:255', 'unique:master_komoditas,nama,' . $id], + 'kode' => ['required', 'string', 'max:2', 'unique:master_komoditas,kode,' . $id], + 'is_utama' => ['nullable', 'boolean'], ], [ 'nama.unique' => 'Nama komoditas ini sudah ada di database.', 'kode.unique' => 'Kode komoditas ini sudah ada di database.', @@ -76,6 +78,7 @@ class KomoditasController extends Controller $komoditas->update([ 'nama' => $request->nama, 'kode' => $request->kode, + 'is_utama' => $request->is_utama, 'updated_by' => auth()->id(), ]); diff --git a/app/Models/Pertanian/Komoditas.php b/app/Models/Pertanian/Komoditas.php index 6bd810a..53b992c 100644 --- a/app/Models/Pertanian/Komoditas.php +++ b/app/Models/Pertanian/Komoditas.php @@ -16,6 +16,10 @@ class Komoditas extends Model protected $table = 'master_komoditas'; + protected $casts = [ + 'is_utama' => 'boolean', + ]; + protected $fillable = [ 'nama', 'kode', diff --git a/resources/views/master/komoditas/add.blade.php b/resources/views/master/komoditas/add.blade.php index 4c4f241..179b842 100644 --- a/resources/views/master/komoditas/add.blade.php +++ b/resources/views/master/komoditas/add.blade.php @@ -14,6 +14,33 @@ +
+ + + + + + @error('is_utama') +
+ {{ $message }} +
+ @enderror +
diff --git a/resources/views/master/komoditas/edit.blade.php b/resources/views/master/komoditas/edit.blade.php index a49dc3c..b1e374a 100644 --- a/resources/views/master/komoditas/edit.blade.php +++ b/resources/views/master/komoditas/edit.blade.php @@ -6,6 +6,7 @@
@csrf + @method('PUT') @@ -17,6 +18,35 @@
+
+ + + + + +
diff --git a/resources/views/master/komoditas/index.blade.php b/resources/views/master/komoditas/index.blade.php index e251ea4..0cdad51 100644 --- a/resources/views/master/komoditas/index.blade.php +++ b/resources/views/master/komoditas/index.blade.php @@ -147,6 +147,18 @@ $('#edit-id').val(res.data.id); $('#edit-nama').val(res.data.nama); $('#edit-kode').val(res.data.kode); + + const isUtama = + res.data.is_utama === true || + res.data.is_utama === 1 || + res.data.is_utama === '1'; + + $('#edit-is-utama').prop('checked', isUtama); + + $('#edit-is-utama-label').text( + isUtama ? 'Komoditas Utama' : 'Tidak Termasuk' + ); + if (typeof fvEdit !== 'undefined') fvEdit.resetForm(); offcanvasEdit.show(); } @@ -170,6 +182,14 @@ if (res.status === 'success') { $('#view-nama').val(res.data.nama); $('#view-kode').val(res.data.kode); + const isUtama = + res.data.is_utama === true || + res.data.is_utama === 1 || + res.data.is_utama === '1'; + + $('#view-is-utama').val( + isUtama ? 'Komoditas Utama' : 'Tidak Termasuk' + ); offcanvasView.show(); } }).fail((xhr) => { @@ -181,7 +201,9 @@ const editForm = document.getElementById('editKomoditasForm'); let fvEdit = FormValidation.formValidation(editForm, { - fields: { nama: { validators: { notEmpty: { message: 'Nama komoditas wajib diisi' } } } }, + fields: { nama: { validators: { notEmpty: { message: 'Nama komoditas wajib diisi' } } } , + kode: {validators: { notEmpty: { message: 'Kode komoditas wajib diisi' } } } + }, plugins: { trigger: new FormValidation.plugins.Trigger(), bootstrap5: new FormValidation.plugins.Bootstrap5({ eleValidClass: '', rowSelector: '.form-control-validation' }), @@ -249,5 +271,20 @@ }); }); }); + + document.addEventListener('DOMContentLoaded', function () { + const switchInput = document.getElementById('add-is-utama'); + const switchLabel = document.getElementById('add-is-utama-label'); + + function updateKomoditasLabel() { + switchLabel.textContent = switchInput.checked + ? 'Komoditas Utama' + : 'Tidak Termasuk'; + } + + switchInput.addEventListener('change', updateKomoditasLabel); + + updateKomoditasLabel(); + }); @endpush \ No newline at end of file diff --git a/resources/views/master/komoditas/view.blade.php b/resources/views/master/komoditas/view.blade.php index 9fcde1e..b450496 100644 --- a/resources/views/master/komoditas/view.blade.php +++ b/resources/views/master/komoditas/view.blade.php @@ -13,6 +13,10 @@
+
+ + +
From 6b44c11181cc5877aa29607580c8f7206753033b Mon Sep 17 00:00:00 2001 From: Irwan Cahyono Date: Wed, 15 Jul 2026 11:44:38 +0700 Subject: [PATCH 14/17] header dan index --- .../Web/Produktivitas/PetaniController.php | 27 +++++++++++++++- ...26_07_15_110145_update_komoditas_table.php | 25 +++++++++++++++ .../views/components/summary-card.blade.php | 2 +- .../produktivitas/petani/header.blade.php | 8 ++--- .../produktivitas/petani/index.blade.php | 32 +++++++++++++++++++ 5 files changed, 88 insertions(+), 6 deletions(-) create mode 100644 database/migrations/2026_07_15_110145_update_komoditas_table.php diff --git a/app/Http/Controllers/Web/Produktivitas/PetaniController.php b/app/Http/Controllers/Web/Produktivitas/PetaniController.php index 6a176fd..92a99ef 100644 --- a/app/Http/Controllers/Web/Produktivitas/PetaniController.php +++ b/app/Http/Controllers/Web/Produktivitas/PetaniController.php @@ -15,6 +15,9 @@ use App\Models\Wilayah\Provinsi; use App\Models\Pertanian\Petani; use App\Models\Wilayah\DesaKelurahan; use App\Models\Pertanian\Komoditas; +use App\Models\Pertanian\Tanaman; +use App\Models\Pertanian\Lahan; +use App\Models\Pertanian\SkorPetani; use App\Enums\Pendidikan; use App\Enums\Pekerjaan; @@ -49,7 +52,29 @@ class PetaniController extends Controller $petani = $query->paginate($request->per_page ?? 10); - return view('produktivitas.petani.index', compact('petani', 'provinsi')); + $komoditas = Komoditas::where('is_utama', true)->get(); + $lahan = Lahan::whereIn('petani_id', $petani->pluck('id')) + ->whereIn('komoditas_id', $komoditas->pluck('id')) + ->get(); + $tanaman = Tanaman::whereIn('lahan_id', $lahan->pluck('id')) + ->whereIn('lahan_id', $lahan->pluck('id')) + ->get(); + + $case = " + CASE + WHEN skor_kesiapan_adopsi >= 4.0 THEN 'Penggerak' + WHEN skor_kesiapan_adopsi >= 3.0 THEN 'Perintis' + WHEN skor_kesiapan_adopsi >= 2.0 THEN 'Pemerhati' + WHEN skor_kesiapan_adopsi >= 1.0 THEN 'Pemula' + ELSE 'Belum Lengkap' + END + "; + $skor = SkorPetani::selectRaw("$case AS segmen, COUNT(*) AS total") + ->whereIn('petani_id', $petani->pluck('id')) + ->groupByRaw($case) + ->get(); + + return view('produktivitas.petani.index', compact('petani', 'provinsi', 'lahan', 'komoditas', 'tanaman', 'skor')); } public function create() diff --git a/database/migrations/2026_07_15_110145_update_komoditas_table.php b/database/migrations/2026_07_15_110145_update_komoditas_table.php new file mode 100644 index 0000000..41dd782 --- /dev/null +++ b/database/migrations/2026_07_15_110145_update_komoditas_table.php @@ -0,0 +1,25 @@ +boolean('is_utama')->default(false); + }); + } + + public function down(): void + { + Schema::table('master_komoditas', function (Blueprint $table) { + $table->dropColumn('is_utama'); + }); + } +}; diff --git a/resources/views/components/summary-card.blade.php b/resources/views/components/summary-card.blade.php index 901a701..7f5d918 100644 --- a/resources/views/components/summary-card.blade.php +++ b/resources/views/components/summary-card.blade.php @@ -4,7 +4,7 @@

{{ $title }}

-

{{ $count }}

+

{!! $count !!}

{{ $subtitle }}
diff --git a/resources/views/produktivitas/petani/header.blade.php b/resources/views/produktivitas/petani/header.blade.php index ec77916..70b8c67 100644 --- a/resources/views/produktivitas/petani/header.blade.php +++ b/resources/views/produktivitas/petani/header.blade.php @@ -127,7 +127,7 @@
- +
@@ -175,13 +175,13 @@ @if(!is_null($skorPraktik)) {{ $praktik }} @else - Belum isi + Belum terisi @endif

- + @@ -285,7 +285,7 @@ @if(!is_null($aksesPasar?->skor_pengalaman) && !is_null($aksesPasar->skor_kesadaran_premium)) {{ $pengalaman }} @else - Belum isi + Belum terisi @endif

diff --git a/resources/views/produktivitas/petani/index.blade.php b/resources/views/produktivitas/petani/index.blade.php index 33dd94e..33ae852 100644 --- a/resources/views/produktivitas/petani/index.blade.php +++ b/resources/views/produktivitas/petani/index.blade.php @@ -2,6 +2,36 @@ @section('content')
+
+
+ +
+
+ +
+
+ +
+
+
Data Petani
@@ -40,6 +70,7 @@ Jenis Kelamin Usia Desa/Kelurahan + Komoditas Utama Segmentasi Aksi @@ -52,6 +83,7 @@ {{ $item->jenis_kelamin ? 'Laki-laki' : 'Perempuan' }} {{ $item->umur }} tahun {{ $item->desaKelurahan?->nama }}, {{ $item->desaKelurahan?->kecamatan?->nama }}, {{ $item->desaKelurahan?->kecamatan?->kabupatenKota?->nama }}, {{ $item->desaKelurahan?->kecamatan?->kabupatenKota?->provinsi?->nama }} + {{ $item->komoditas?->nama }} @if($item->segmen() == 'Penggerak') Penggerak From 2b3a0b7c58613bb22f39fd164923193d7ecb42b1 Mon Sep 17 00:00:00 2001 From: Irwan Cahyono Date: Wed, 15 Jul 2026 14:05:25 +0700 Subject: [PATCH 15/17] tanggal jqueryvalidation --- resources/views/produktivitas/petani/add.blade.php | 4 ++-- resources/views/produktivitas/petani/edit.blade.php | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/resources/views/produktivitas/petani/add.blade.php b/resources/views/produktivitas/petani/add.blade.php index 1d53f37..15fbb69 100644 --- a/resources/views/produktivitas/petani/add.blade.php +++ b/resources/views/produktivitas/petani/add.blade.php @@ -329,7 +329,7 @@ ktp: { required: true, digits: true, minlength: 16, maxlength: 16 }, kk: { required: true, digits: true, minlength: 16, maxlength: 16 }, tempat_lahir: { required: true }, - tanggal_lahir: { required: true, date: true }, + tanggal_lahir: { required: true }, jenis_kelamin: { required: true }, pendidikan_terakhir: { required: true }, komoditas_id: { required: true }, @@ -349,7 +349,7 @@ ktp: { required: "NIK wajib diisi", digits: "NIK harus berupa angka", minlength: "NIK harus 16 digit", maxlength: "NIK harus 16 digit" }, kk: { digits: "No. KK harus berupa angka", minlength: "No. KK harus 16 digit", maxlength: "No. KK harus 16 digit" }, tempat_lahir: { required: "Tempat lahir wajib diisi" }, - tanggal_lahir: { required: "Tanggal lahir wajib diisi", date: "Format tanggal salah" }, + tanggal_lahir: { required: "Tanggal lahir wajib diisi" }, jenis_kelamin: { required: "Jenis kelamin wajib diisi" }, pendidikan_terakhir: { required: "Pendidikan terakhir wajib diisi" }, komoditas_id: { required: "Komoditas wajib diisi" }, diff --git a/resources/views/produktivitas/petani/edit.blade.php b/resources/views/produktivitas/petani/edit.blade.php index f7f8c64..cc3dd1b 100644 --- a/resources/views/produktivitas/petani/edit.blade.php +++ b/resources/views/produktivitas/petani/edit.blade.php @@ -334,7 +334,7 @@ ktp: { required: true, digits: true, minlength: 16, maxlength: 16 }, kk: { required: true, digits: true, minlength: 16, maxlength: 16 }, tempat_lahir: { required: true }, - tanggal_lahir: { required: true, date: true }, + tanggal_lahir: { required: true }, jenis_kelamin: { required: true }, pendidikan_terakhir: { required: true }, komoditas_id: { required: true }, @@ -354,7 +354,7 @@ ktp: { required: "NIK wajib diisi", digits: "NIK harus berupa angka", minlength: "NIK harus 16 digit", maxlength: "NIK harus 16 digit" }, kk: { required: "No. KK wajib diisi", digits: "No. KK harus berupa angka", minlength: "No. KK harus 16 digit", maxlength: "No. KK harus 16 digit" }, tempat_lahir: { required: "Tempat lahir wajib diisi" }, - tanggal_lahir: { required: "Tanggal lahir wajib diisi", date: "Format tanggal salah" }, + tanggal_lahir: { required: "Tanggal lahir wajib diisi" }, jenis_kelamin: { required: "Jenis kelamin wajib diisi" }, pendidikan_terakhir: { required: "Pendidikan terakhir wajib diisi" }, alamat: { required: "Alamat wajib diisi" }, From 9b201efa065784a5e2f69f80a0df7fdac0e3f69a Mon Sep 17 00:00:00 2001 From: ahmadafriadi Date: Wed, 15 Jul 2026 14:37:39 +0700 Subject: [PATCH 16/17] update Praktik budidaya migration --- ...6_06_29_141634_create_praktik_budidaya_table.php | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) 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 index 0cac968..4491c7c 100644 --- a/database/migrations/2026_06_29_141634_create_praktik_budidaya_table.php +++ b/database/migrations/2026_06_29_141634_create_praktik_budidaya_table.php @@ -35,24 +35,25 @@ return new class extends Migration $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->jsonb('jenis_hama')->nullable(); + $table->jsonb('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->decimal('volume_obat_obatan_padat_permusim', 10, 2)->nullable(); + $table->decimal('volume_obat_obatan_cair_permusim', 10, 2)->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->jsonb('sumber_air')->nullable(); $table->string('sistem_irigasi')->nullable(); $table->string('kebutuhan_air_permusim')->nullable(); // 2.8 Praktik konservasi tanah - $table->string('kebiasaan_konservasi_tanah')->nullable(); + $table->jsonb('kebiasaan_konservasi_tanah')->nullable(); $table->string('pemahaman_manfaat_konservasi_tanah')->nullable(); $table->integer('nilai_konservasi_tanah')->nullable(); @@ -99,7 +100,7 @@ return new class extends Migration $table->string('tindakan_panen_reject')->nullable(); $table->decimal('upah_tenaga_panen', 13, 2)->nullable(); $table->decimal('biaya_pengangkutan_panen', 13, 2)->nullable(); - $table->decimal('biaya_wadah-Panen', 13, 2)->nullable(); + $table->decimal('biaya_wadah_Panen', 13, 2)->nullable(); $table->decimal('biaya_sewa_alat_panen', 13, 2)->nullable(); $table->decimal('biaya_panen_lainnya', 13, 2)->nullable(); $table->decimal('total_estimasi_biaya_panen', 13, 2)->nullable(); From 3a70445e9a5c5384319126a30f81af54919ed3a7 Mon Sep 17 00:00:00 2001 From: Irwan Cahyono Date: Wed, 15 Jul 2026 15:00:13 +0700 Subject: [PATCH 17/17] petani lahan required not --- .../Web/Produktivitas/PetaniLahanController.php | 12 +++++++----- .../views/produktivitas/petani/lahan/add.blade.php | 12 ++++++------ .../views/produktivitas/petani/lahan/edit.blade.php | 8 +++----- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/app/Http/Controllers/Web/Produktivitas/PetaniLahanController.php b/app/Http/Controllers/Web/Produktivitas/PetaniLahanController.php index 248413b..c4febdb 100644 --- a/app/Http/Controllers/Web/Produktivitas/PetaniLahanController.php +++ b/app/Http/Controllers/Web/Produktivitas/PetaniLahanController.php @@ -81,8 +81,8 @@ class PetaniLahanController extends Controller 'komoditas_id' => ['required', 'exists:master_komoditas,id'], 'jenis_komoditas_id' => ['required', 'exists:jenis_komoditas,id'], 'varietas_id' => ['nullable', 'exists:master_varietas,id'], - 'jumlah_tanaman' => ['required', 'numeric', 'min:1'], - 'umur_lahan' => ['required', 'numeric', 'min:1'], + 'jumlah_tanaman' => ['required', 'numeric', 'min:0'], + 'umur_lahan' => ['nullable', 'numeric', 'min:1'], 'umur_tanaman' => ['required', 'numeric', 'min:1'], 'kondisi_tanaman' => ['required', 'string', new Enum(KondisiTanaman::class)], 'serangan_hama' => ['nullable', 'string', new Enum(SeranganHama::class)], @@ -104,8 +104,8 @@ class PetaniLahanController extends Controller 'luas_lahan.min' => 'Luas lahan minimal 0.01.', 'jumlah_tanaman.required' => 'Jumlah tanaman wajib diisi.', 'jumlah_tanaman.numeric' => 'Jumlah tanaman diisi dengan angka.', - 'jumlah_tanaman.min' => 'Jumlah tanaman minimal 1.', - 'umur_lahan.required' => 'Umur lahan wajib diisi.', + 'jumlah_tanaman.min' => 'Jumlah tanaman minimal 0.', + //'umur_lahan.required' => 'Umur lahan wajib diisi.', 'umur_lahan.numeric' => 'Umur lahan diisi dengan angka.', 'umur_lahan.min' => 'Umur lahan minimal 1.', 'umur_tanaman.required' => 'Umur tanaman wajib diisi.', @@ -163,7 +163,7 @@ class PetaniLahanController extends Controller 'updated_by' => auth()->id()] ); - if ($lahan) { + if ($lahan && $lahan->jumlah_tanaman > 0) { $data = collect(range(1, $lahan->jumlah_tanaman))->map(function ($i) use ($lahan, $komoditas, $lahanUid) { return [ 'lahan_id' => $lahan->id, @@ -199,6 +199,8 @@ class PetaniLahanController extends Controller return redirect()->route('petani.lahan-tanaman.index', $petaniId)->with('success', 'Lahan berhasil ditambahkan.'); } + + return redirect()->route('petani.lahan-tanaman.index', $petaniId)->with('success', 'Lahan berhasil ditambahkan.'); } public function show(string $petaniId, string $id) diff --git a/resources/views/produktivitas/petani/lahan/add.blade.php b/resources/views/produktivitas/petani/lahan/add.blade.php index 25a1cb2..ea3daf3 100644 --- a/resources/views/produktivitas/petani/lahan/add.blade.php +++ b/resources/views/produktivitas/petani/lahan/add.blade.php @@ -201,13 +201,13 @@ @error('luas_lahan')
{{ $message }}
@enderror
- + @error('umur_lahan')
{{ $message }}
@enderror
- + @error('jumlah_tanaman')
{{ $message }}
@enderror
@@ -707,8 +707,8 @@ kabupatenkota_id: { required: true }, kecamatan_id: { required: true }, desa_kelurahan_id: { required: true }, - jumlah_tanaman: { required: true }, - umur_lahan: { required: true, number: true, min: 1 }, + jumlah_tanaman: { required: true, number: true, min: 0 }, + umur_lahan: { number: true, min: 1 }, umur_tanaman: { required: true, number: true, min: 1 }, kondisi_tanaman: { required: true }, }, @@ -721,8 +721,8 @@ kabupatenkota_id: { required: "Kabupaten/Kota wajib diisi" }, kecamatan_id: { required: "Kecamatan wajib diisi" }, desa_kelurahan_id: { required: "Desa/Kelurahan wajib diisi" }, - jumlah_tanaman: { required: "Jumlah tanaman wajib diisi" }, - umur_lahan: { required: "Umur lahan wajib diisi", number: "Umur lahan harus berupa angka", min: "Umur lahan minimal 1 tahun" }, + jumlah_tanaman: { required: "Jumlah tanaman wajib diisi", number: "Jumlah tanaman harus berupa angka", min: "Jumlah tanaman minimal 0" }, + umur_lahan: { number: "Umur lahan harus berupa angka", min: "Umur lahan minimal 1 tahun" }, umur_tanaman: { required: "Umur tanaman wajib diisi", number: "Umur tanaman harus berupa angka", min: "Umur tanaman minimal 1 tahun" }, kondisi_tanaman: { required: "Kondisi tanaman wajib diisi" }, }, diff --git a/resources/views/produktivitas/petani/lahan/edit.blade.php b/resources/views/produktivitas/petani/lahan/edit.blade.php index e996305..2d4a280 100644 --- a/resources/views/produktivitas/petani/lahan/edit.blade.php +++ b/resources/views/produktivitas/petani/lahan/edit.blade.php @@ -63,7 +63,7 @@
- @error('jumlah_tanaman')
{{ $message }}
@enderror
@@ -276,7 +276,7 @@ - @forelse($lahanSelected->tanaman as $index => $item) + @foreach($lahanSelected->tanaman as $item) {{ $loop->iteration }} @@ -339,9 +339,7 @@
- @empty - Tidak ada data ditemukan. - @endforelse + @endforeach