diff --git a/app/Http/Controllers/Web/Dashboard/ProfilPetaniController.php b/app/Http/Controllers/Web/Dashboard/ProfilPetaniController.php index dd154e5..7801114 100644 --- a/app/Http/Controllers/Web/Dashboard/ProfilPetaniController.php +++ b/app/Http/Controllers/Web/Dashboard/ProfilPetaniController.php @@ -74,6 +74,63 @@ class ProfilPetaniController extends Controller ->groupBy('petani.komoditas_id') ->groupByRaw($case) ->get(); + + + $skorAverage = SkorPetani::query() + ->join('petani', 'petani_skor.petani_id', '=', 'petani.id') + ->whereIn('petani_id', $petani) + ->whereIn('petani.komoditas_id', $komoditas->pluck('id')) + ->avg('skor_kesiapan_adopsi'); + if ($skorAverage >= 4.0) { + $segmenAverage = 'Penggerak'; + } elseif ($skorAverage >= 3.0) { + $segmenAverage = 'Perintis'; + } elseif ($skorAverage >= 2.0) { + $segmenAverage = 'Pemerhati'; + } elseif ($skorAverage >= 1.0) { + $segmenAverage = 'Pemula'; + } else { + $segmenAverage = 'Belum Lengkap'; + } + + $skorDimensi = SkorPetani::query() + ->join('petani', 'petani_skor.petani_id', '=', 'petani.id') + ->whereIn('petani_id', $petani) + ->whereIn('petani.komoditas_id', $komoditas->pluck('id')) + ->selectRaw(" + avg(skor_d2_sistem_praktik_budidaya) as skor_d2_sistem_praktik_budidaya, + avg(skor_d4_sosial_ekonomi) as skor_d4_sosial_ekonomi, + avg(skor_d6_rantai_nilai_akses_pasar) as skor_d6_rantai_nilai_akses_pasar") + ->first(); + + $skorKomponen = SkorPetani::query() + ->join('petani', 'petani_skor.petani_id', '=', 'petani.id') + ->whereIn('petani_id', $petani) + ->whereIn('petani.komoditas_id', $komoditas->pluck('id')) + ->selectRaw("avg(skor_komp_1_d4_k3_motivasi_kapasitas_adopsi) as skor_komp_1_d4_k3_motivasi_kapasitas_adopsi, + avg(skor_komp_2_d4_k2_ekonomi_rumah_tangga) as skor_komp_2_d4_k2_ekonomi_rumah_tangga, + avg(skor_komp_3_d2_praktik_budidaya_gap) as skor_komp_3_d2_praktik_budidaya_gap, + avg(skor_komp_4_d4_k4_keterlibatan_kelembagaan) as skor_komp_4_d4_k4_keterlibatan_kelembagaan, + avg(skor_komp_5_d4_k5_k6_akses_kebebasan_keuangan) as skor_komp_5_d4_k5_k6_akses_kebebasan_keuanga, + avg(skor_komp_6_d6_k1_k4_k5_rantai_nilai_akses_pasar) as skor_komp_6_d6_k1_k4_k5_rantai_nilai_akses_pasar") + ->first(); + + $skorMultiDimensi = SkorPetani::query() + ->join('petani', 'petani_skor.petani_id', '=', 'petani.id') + ->whereIn('petani_id', $petani) + ->whereIn('petani.komoditas_id', $komoditas->pluck('id')) + ->selectRaw("$case AS segmen, + avg(skor_kesiapan_adopsi) as skor_kesiapan_adopsi, + avg(skor_d2_sistem_praktik_budidaya) as skor_d2_sistem_praktik_budidaya, + avg(skor_d4_sosial_ekonomi) as skor_d4_sosial_ekonomi, + avg(skor_d6_rantai_nilai_akses_pasar) as skor_d6_rantai_nilai_akses_pasar") + ->groupByRaw($case) + ->get(); + + $petani = Petani::with(['skor']) + ->whereIn('id', $petani) + ->whereIn('komoditas_id', $komoditas->pluck('id')) + ->get(); return view('dashboard.petani', compact('title', 'komoditas', @@ -81,7 +138,13 @@ class ProfilPetaniController extends Controller 'lahanSummary', 'tanamanSummary', 'skorSummary', - 'skorKomoditasSummary' + 'skorKomoditasSummary', + 'segmenAverage', + 'skorAverage', + 'skorDimensi', + 'skorKomponen', + 'skorMultiDimensi', + 'petani', )); } } diff --git a/app/Http/Controllers/Web/Konfigurasi/AuthController.php b/app/Http/Controllers/Web/Konfigurasi/AuthController.php index 480dae0..6bae057 100644 --- a/app/Http/Controllers/Web/Konfigurasi/AuthController.php +++ b/app/Http/Controllers/Web/Konfigurasi/AuthController.php @@ -28,9 +28,15 @@ class AuthController extends Controller public function createAccount(Request $request) { $credentials = $request->validate([ - 'username' => 'required|string|max:255|unique:users,username', + 'username' => 'required|string|min:6|max:255|unique:users,username', 'email' => 'required|string|email|max:255|unique:users,email', 'password' => 'required|string|min:8|confirmed', + ], [ + 'username.unique' => 'Nama pengguna sudah digunakan.', + 'username.min' => 'Nama pengguna minimal 6 karakter.', + 'email.unique' => 'Email sudah digunakan.', + 'password.confirmed' => 'Konfirmasi password tidak cocok.', + 'password.min' => 'Password minimal 8 karakter.', ]); $user = User::create([ @@ -89,6 +95,9 @@ class AuthController extends Controller $request->validate([ 'email_username' => 'required|string', 'password' => 'required|string', + ], [ + 'email_username.required' => 'Email atau username harus diisi.', + 'password.required' => 'Password harus diisi.', ]); $login = $request->input('email_username'); diff --git a/app/Http/Controllers/Web/Konfigurasi/UserController.php b/app/Http/Controllers/Web/Konfigurasi/UserController.php index 68cc751..4931772 100644 --- a/app/Http/Controllers/Web/Konfigurasi/UserController.php +++ b/app/Http/Controllers/Web/Konfigurasi/UserController.php @@ -99,18 +99,20 @@ class UserController extends Controller public function store(Request $request) { $validator = Validator::make($request->all(), [ - 'username' => ['required', 'string', 'max:255', 'unique:users,username'], + 'username' => ['required', 'string', 'max:255', 'min:6', 'unique:users,username'], 'nama' => ['required', 'string', 'max:255'], 'email' => ['required', 'string', 'email', 'max:255', 'unique:users,email'], 'password' => ['required', 'string', 'min:8', 'confirmed'], 'role' => ['required', 'string'], 'telepon' => ['required', 'max:13'], - 'desa_kelurahan_id' => ['required'], + 'desa_kelurahan_id' => ['nullable', 'exists:desa_kelurahan,id'], 'ktp' => ['nullable', 'min:16', 'max:16'], 'kk' => ['nullable', 'min:16', 'max:16'], 'file_ktp' => ['nullable', 'file', 'mimes:jpeg,jpg,png,pdf', 'max:2048'], 'file_kk' => ['nullable', 'file', 'mimes:jpeg,jpg,pdf,png', 'max:2048'], ], [ + 'username.unique' => 'Nama pengguna sudah digunakan.', + 'username.min' => 'Nama pengguna minimal 6 karakter.', 'password.confirmed' => 'Konfirmasi password tidak cocok!', 'password.min' => 'Password minimal 8 karakter!', 'email.unique' => 'Email sudah terdaftar.', diff --git a/app/Http/Controllers/Web/Produktivitas/PetaniLahanController.php b/app/Http/Controllers/Web/Produktivitas/PetaniLahanController.php index 873bbba..f597537 100644 --- a/app/Http/Controllers/Web/Produktivitas/PetaniLahanController.php +++ b/app/Http/Controllers/Web/Produktivitas/PetaniLahanController.php @@ -18,6 +18,7 @@ use App\Models\Wilayah\DesaKelurahan; use App\Models\Wilayah\Provinsi; use App\Models\Pertanian\Komoditas; use App\Models\Pertanian\Tanaman; +use App\Models\Master\JenisTanaman; use App\Enums\StatusLahan; use App\Enums\KondisiTanaman; @@ -62,8 +63,9 @@ class PetaniLahanController extends Controller $provinsi = Provinsi::orderBy('kode', 'asc')->get(); $komoditas = Komoditas::all(); + $tanamanPenaung = JenisTanaman::all(); - return view('produktivitas.petani.lahan.add', compact('petani', 'lahan', 'provinsi', 'komoditas')); + return view('produktivitas.petani.lahan.add', compact('petani', 'lahan', 'provinsi', 'komoditas', 'tanamanPenaung')); } private function validateLahan(Request $request) @@ -81,7 +83,7 @@ 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:0'], + 'jumlah_tanaman' => ['nullable', 'numeric', 'min:0'], 'umur_lahan' => ['nullable', 'numeric', 'min:1'], 'umur_tanaman' => ['required', 'numeric', 'min:1'], 'kondisi_tanaman' => ['required', 'string', new Enum(KondisiTanaman::class)], @@ -91,7 +93,7 @@ class PetaniLahanController extends Controller 'komoditas_lain' => ['nullable', 'array'], 'komoditas_lain.*' => ['integer', 'exists:master_komoditas,id'], 'tanaman_penaung' => ['nullable', 'array'], - 'tanaman_penaung.*' => ['integer', 'exists:master_komoditas,id'], + 'tanaman_penaung.*' => ['string'], 'foto' => ['nullable', 'array'], 'foto.*' => ['image', 'mimes:jpeg,jpg,png', 'max:2048'], ], [ @@ -102,7 +104,7 @@ class PetaniLahanController extends Controller 'luas_lahan.required' => 'Luas lahan wajib diisi.', 'luas_lahan.numeric' => 'Luas lahan diisi dengan angka.', 'luas_lahan.min' => 'Luas lahan minimal 0.01.', - 'jumlah_tanaman.required' => 'Jumlah tanaman wajib diisi.', + //'jumlah_tanaman.required' => 'Jumlah tanaman wajib diisi.', 'jumlah_tanaman.numeric' => 'Jumlah tanaman diisi dengan angka.', 'jumlah_tanaman.min' => 'Jumlah tanaman minimal 0.', //'umur_lahan.required' => 'Umur lahan wajib diisi.', @@ -119,7 +121,7 @@ class PetaniLahanController extends Controller 'komoditas_lain.array' => 'Komoditas lain diisi dengan array.', 'komoditas_lain.*.exists' => 'Komoditas lain yang dipilih tidak valid.', 'tanaman_penaung.array' => 'Tanaman penaung diisi dengan array.', - 'tanaman_penaung.*.exists' => 'Tanaman penaung yang dipilih tidak valid.', + //'tanaman_penaung.*.exists' => 'Tanaman penaung yang dipilih tidak valid.', 'foto.array' => 'Foto diisi dengan array.', 'foto.*.image' => 'Foto harus berupa gambar.', 'foto.*.mimes' => 'Foto harus berupa gambar dengan ekstensi jpeg, jpg, atau png.', @@ -128,6 +130,28 @@ class PetaniLahanController extends Controller } + private function syncTanamanPenaung(Request $request) + { + $existing = JenisTanaman::pluck('nama')->toArray(); + + $tanamanPenaung = collect($request->tanaman_penaung) + ->unique() + ->reject(fn ($nama) => in_array($nama, $existing)) + ->map(fn ($nama) => [ + 'nama' => Str::title($nama), + 'created_by' => auth()->id(), + 'updated_by' => auth()->id(), + 'created_at' => now(), + 'updated_at' => now(), + ]) + ->values() + ->toArray(); + + if (!empty($tanamanPenaung)) { + JenisTanaman::insert($tanamanPenaung); + } + } + public function store($petaniId, Request $request) { if (!Gate::any(['super_admin', 'admin', 'fasilitator'])) { @@ -136,6 +160,12 @@ class PetaniLahanController extends Controller $petani = Petani::findOrFail($petaniId); + $request->merge([ + 'tanaman_penaung' => collect($request->tanaman_penaung) + ->map(fn ($nama) => Str::title($nama)) + ->toArray() + ]); + $validated = $this->validateLahan($request); $komoditas = Komoditas::where('id', $request->komoditas_id)->first(); $lahanCount = Lahan::where('petani_id', $petaniId) @@ -154,6 +184,8 @@ class PetaniLahanController extends Controller } } + $this->syncTanamanPenaung($request); + $lahan = Lahan::create([...$validated, 'foto' => $foto && count($foto) > 0 ? json_encode($foto) : null, 'nama' => 'Lahan ' . $komoditas->nama . ' #' . ($lahanCount + 1), @@ -236,10 +268,11 @@ class PetaniLahanController extends Controller $lahanSelected = Lahan::where('petani_id', $petaniId)->findOrFail($id); $komoditas = Komoditas::all(); + $tanamanPenaung = JenisTanaman::all(); $provinsi = Provinsi::orderBy('kode', 'asc')->get(); - return view('produktivitas.petani.lahan.edit', compact('lahan', 'lahanSelected', 'petani', 'komoditas', 'provinsi')); + return view('produktivitas.petani.lahan.edit', compact('lahan', 'lahanSelected', 'petani', 'komoditas', 'provinsi', 'tanamanPenaung')); } public function update(Request $request, string $petaniId, string $id) @@ -251,6 +284,11 @@ class PetaniLahanController extends Controller $petani = Petani::findOrFail($petaniId); $lahan = Lahan::where('petani_id', $petaniId)->findOrFail($id); + $request->merge([ + 'tanaman_penaung' => collect($request->tanaman_penaung) + ->map(fn ($nama) => Str::title($nama)) + ->toArray() + ]); $validated = $this->validateLahan($request); $komoditas = Komoditas::where('id', $request->komoditas_id)->first(); $tanamanCount = Tanaman::where('lahan_id', $lahan->id)->count(); @@ -285,6 +323,8 @@ class PetaniLahanController extends Controller $lahanUidParts = explode('LHN-', $lahanUid); $lahanUid = end($lahanUidParts); + $this->syncTanamanPenaung($request); + if ($lahan && $lahan->jumlah_tanaman > $tanamanCount) { $data = collect(range($tanamanCount + 1, $lahan->jumlah_tanaman))->map(function ($i) use ($lahan, $komoditas, $lahanUid) { return [ diff --git a/app/Http/Controllers/Web/Produktivitas/ProfileController.php b/app/Http/Controllers/Web/Produktivitas/ProfileController.php index f2ffb46..b52f6de 100644 --- a/app/Http/Controllers/Web/Produktivitas/ProfileController.php +++ b/app/Http/Controllers/Web/Produktivitas/ProfileController.php @@ -64,12 +64,26 @@ class ProfileController extends Controller $validator = Validator::make($request->all(), [ 'nama' => ['required', 'string', 'max:255'], 'email' => ['required', 'email', 'max:255'], - 'telepon' => ['required', 'max:13'], - 'desa_kelurahan_id' => ['required'], + 'telepon' => ['nullable', 'max:13'], + 'desa_kelurahan_id' => ['nullable', 'exists:master_desa_kelurahan,id'], 'ktp' => ['nullable', 'min:16', 'max:16'], 'file_ktp' => ['nullable', 'file', 'mimes:jpeg,jpg,png,pdf', 'max:2048'], 'kk' => ['nullable', 'min:16', 'max:16'], 'file_kk' => ['nullable', 'file', 'mimes:jpeg,jpg,png,pdf', 'max:2048'], + ], [ + 'nama.required' => 'Nama wajib diisi.', + 'email.required' => 'Email wajib diisi.', + 'email.email' => 'Format email tidak sesuai.', + 'telepon.max' => 'Nomor telepon tidak sesuai.', + 'desa_kelurahan_id.exists' => 'Desa kelurahan tidak ditemukan.', + 'ktp.min' => 'KTP harus terdiri dari 16 digit.', + 'ktp.max' => 'KTP harus terdiri dari 16 digit.', + 'kk.min' => 'KK harus terdiri dari 16 digit.', + 'kk.max' => 'KK harus terdiri dari 16 digit.', + 'file_ktp.mimes' => 'Format file harus dalam bentuk JPEG, JPG, PNG, atau PDF.', + 'file_kk.mimes' => 'Format file harus dalam bentuk JPEG, JPG, PNG, atau PDF.', + 'file_ktp.max' => 'Ukuran file maksimal 2MB.', + 'file_kk.max' => 'Ukuran file maksimal 2MB.', ]); if ($validator->fails()) { @@ -143,12 +157,31 @@ class ProfileController extends Controller $validator = Validator::make($request->all(), [ 'nama' => ['required', 'string', 'max:255'], 'email' => ['required', 'email', 'max:255'], - 'telepon' => ['required', 'max:13'], - 'desa_kelurahan_id' => ['required'], + 'telepon' => ['nullable', 'max:13'], + 'desa_kelurahan_id' => ['nullable', 'exists:master_desa_kelurahan,id'], 'ktp' => ['nullable', 'min:16', 'max:16'], 'file_ktp' => ['nullable', 'file', 'mimes:jpeg,jpg,png,pdf', 'max:2048'], 'kk' => ['nullable', 'min:16', 'max:16'], 'file_kk' => ['nullable', 'file', 'mimes:jpeg,jpg,png,pdf', 'max:2048'], + ], [ + 'nama.required' => 'Nama harus diisi.', + 'nama.string' => 'Nama harus berupa string.', + 'nama.max' => 'Nama tidak boleh lebih dari 255 karakter.', + 'email.required' => 'Email harus diisi.', + 'email.email' => 'Email harus berupa alamat email yang valid.', + 'email.max' => 'Email tidak boleh lebih dari 255 karakter.', + 'telepon.max' => 'Nomor telepon tidak boleh lebih dari 13 karakter.', + 'desa_kelurahan_id.exists' => 'Desa kelurahan tidak ditemukan.', + 'ktp.min' => 'Nomor KTP harus terdiri dari 16 karakter.', + 'ktp.max' => 'Nomor KTP harus terdiri dari 16 karakter.', + 'kk.min' => 'Nomor KK harus terdiri dari 16 karakter.', + 'kk.max' => 'Nomor KK harus terdiri dari 16 karakter.', + 'file_ktp.file' => 'File harus berupa file.', + 'file_ktp.mimes' => 'File harus berupa file dengan ekstensi jpeg, jpg, png, atau pdf.', + 'file_ktp.max' => 'Ukuran file tidak boleh lebih dari 2MB.', + 'file_kk.file' => 'File harus berupa file.', + 'file_kk.mimes' => 'File harus berupa file dengan ekstensi jpeg, jpg, png, atau pdf.', + 'file_kk.max' => 'Ukuran file tidak boleh lebih dari 2MB.', ]); if ($validator->fails()) { diff --git a/app/Models/Master/JenisTanaman.php b/app/Models/Master/JenisTanaman.php new file mode 100644 index 0000000..3902231 --- /dev/null +++ b/app/Models/Master/JenisTanaman.php @@ -0,0 +1,21 @@ +id(); + $table->string('nama'); + + $table->foreignId('created_by')->nullable()->constrained('users')->onDelete('set null'); + $table->foreignId('updated_by')->nullable()->constrained('users')->onDelete('set null'); + $table->foreignId('deleted_by')->nullable()->constrained('users')->onDelete('set null'); + + $table->timestamps(); + $table->softDeletes(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('jenis_tanamen'); + } +}; diff --git a/public/assets/js/pages-auth.js b/public/assets/js/pages-auth.js index 5dda75a..ac218f8 100644 --- a/public/assets/js/pages-auth.js +++ b/public/assets/js/pages-auth.js @@ -14,21 +14,21 @@ document.addEventListener('DOMContentLoaded', function () { username: { validators: { notEmpty: { - message: 'Please enter username' + message: 'Silakan masukkan username' }, stringLength: { min: 6, - message: 'Username must be more than 6 characters' + message: 'Username harus terdiri dari minimal 6 karakter' } } }, email: { validators: { notEmpty: { - message: 'Please enter your email' + message: 'Silakan masukkan email Anda' }, emailAddress: { - message: 'Please enter a valid email address' + message: 'Silakan masukkan email yang valid' } } }, @@ -57,22 +57,22 @@ document.addEventListener('DOMContentLoaded', function () { 'confirm-password': { validators: { notEmpty: { - message: 'Please confirm password' + message: 'Silakan konfirmasi password Anda' }, identical: { compare: () => formAuthentication.querySelector('[name="password"]').value, - message: 'The password and its confirmation do not match' + message: 'Password tidak cocok dengan konfirmasi password' }, stringLength: { min: 6, - message: 'Password must be more than 6 characters' + message: 'Password harus terdiri dari minimal 6 karakter' } } }, terms: { validators: { notEmpty: { - message: 'Please agree to terms & conditions' + message: 'Silakan terima syarat dan ketentuan kami' } } } diff --git a/resources/views/auth/layout.blade.php b/resources/views/auth/layout.blade.php index a160a31..5cd55ff 100644 --- a/resources/views/auth/layout.blade.php +++ b/resources/views/auth/layout.blade.php @@ -111,15 +111,20 @@ - + + + + - + + + @stack('scripts') diff --git a/resources/views/auth/login.blade.php b/resources/views/auth/login.blade.php index 40a1c69..27468cb 100644 --- a/resources/views/auth/login.blade.php +++ b/resources/views/auth/login.blade.php @@ -87,3 +87,44 @@ @endsection + +@push('scripts') + +@endpush \ No newline at end of file diff --git a/resources/views/auth/register.blade.php b/resources/views/auth/register.blade.php index cb2ed6d..e46bb62 100644 --- a/resources/views/auth/register.blade.php +++ b/resources/views/auth/register.blade.php @@ -113,7 +113,7 @@

-
+
@endsection + +@push('scripts') + +@endpush diff --git a/resources/views/dashboard/petani.blade.php b/resources/views/dashboard/petani.blade.php index 649aa99..d214106 100644 --- a/resources/views/dashboard/petani.blade.php +++ b/resources/views/dashboard/petani.blade.php @@ -41,7 +41,7 @@ -
+ +
+
+
+
+
+ + + +
+

{{ number_format($skorAverage, 2, ',', '.') }}

+
+

Rata-rata Indeks Kesiapan Adopsi

+

+ {{ $segmenAverage }} + komoditas utama +

+
+
@@ -78,6 +97,11 @@
+ + + + +
Petani%
@@ -159,7 +183,7 @@
-
+ +
+
+
+
+
Segmentasi Multi Dimensi Petani
+

untuk semua komoditas

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IndeksD1D2D3
+
+
+ +
+
+
Penggerak (4.0 - 5.0)
+ +
+
+
+ {{ number_format($skorMultiDimensi->where('segmen', 'Penggerak')->value('skor_kesiapan_adopsi'), 2, '.', ',') }} + + {{ number_format($skorMultiDimensi->where('segmen', 'Penggerak')->value('skor_d2_sistem_praktik_budidaya'), 2, '.', ',') }} + + {{ number_format($skorMultiDimensi->where('segmen', 'Penggerak')->value('skor_d4_sosial_ekonomi'), 2, '.', ',') }} + + {{ number_format($skorMultiDimensi->where('segmen', 'Penggerak')->value('skor_d6_rantai_nilai_akses_pasar'), 2, '.', ',') }} +
+
+
+ +
+
+
Perintis (3.0 - 3.9)
+ +
+
+
+ {{ number_format($skorMultiDimensi->where('segmen', 'Perintis')->value('skor_kesiapan_adopsi'), 2, '.', ',') }} + + {{ number_format($skorMultiDimensi->where('segmen', 'Perintis')->value('skor_d2_sistem_praktik_budidaya'), 2, '.', ',') }} + + {{ number_format($skorMultiDimensi->where('segmen', 'Perintis')->value('skor_d4_sosial_ekonomi'), 2, '.', ',') }} + + {{ number_format($skorMultiDimensi->where('segmen', 'Perintis')->value('skor_d6_rantai_nilai_akses_pasar'), 2, '.', ',') }} +
+
+
+ +
+
+
Pemerhati (2.0 - 2.9)
+ +
+
+
+ {{ number_format($skorMultiDimensi->where('segmen', 'Pemerhati')->value('skor_kesiapan_adopsi'), 2, '.', ',') }} + + {{ number_format($skorMultiDimensi->where('segmen', 'Pemerhati')->value('skor_d2_sistem_praktik_budidaya'), 2, '.', ',') }} + + {{ number_format($skorMultiDimensi->where('segmen', 'Pemerhati')->value('skor_d4_sosial_ekonomi'), 2, '.', ',') }} + + {{ number_format($skorMultiDimensi->where('segmen', 'Pemerhati')->value('skor_d6_rantai_nilai_akses_pasar'), 2, '.', ',') }} +
+
+
+ +
+
+
Pemula (1.0 - 1.9)
+ +
+
+
+ {{ number_format($skorMultiDimensi->where('segmen', 'Pemula')->value('skor_kesiapan_adopsi'), 2, '.', ',') }} + + {{ number_format($skorMultiDimensi->where('segmen', 'Pemula')->value('skor_d2_sistem_praktik_budidaya'), 2, '.', ',') }} + + {{ number_format($skorMultiDimensi->where('segmen', 'Pemula')->value('skor_d4_sosial_ekonomi'), 2, '.', ',') }} + + {{ number_format($skorMultiDimensi->where('segmen', 'Pemula')->value('skor_d6_rantai_nilai_akses_pasar'), 2, '.', ',') }} +
+
+
+
+
+ +
+
+
+
+
+
Rata-rata Dimensi Kesiapan Adopsi
+

untuk semua komoditas

+
+
+
+
+
+
+ D1 Sistem & Praktik Budidaya +
+
+ D2 Sosial Ekonomi Rumah Tangga +
+
+ D3 Rantai Nilai & Akses Pasar +
+
+
+
+
+
+
+
+
+
Rata-rata Komponen Kesiapan Adopsi
+

untuk semua komoditas

+
+
+
+
+
+
+ K1 Motivasi & Kapasitas Adopsi +
+
+ K2 Kondisi Ekonomi Rumah Tangga +
+
+ K3 Praktik Budidaya & GAP +
+
+ K4 Keterlibatan Kelembagaan +
+
+ K5 Akses & Kebebasan Keuangan +
+
+ K6 Rantai Nilai & Akses Pasar +
+
+
+
+
+
+ +
+
+
+
+
+
Segmentasi Petani
+

untuk semua komoditas

+
+
+
+
+ + + + + + + + + + + + + + + @foreach ($petani as $item) + + + + + + + + + + + + @endforeach + +
PetaniJenis KelaminUsiaKomoditas UtamaSegmentasiIndeksD2D4D6
{{ $item->nama }}{{ $item->jenis_kelamin ? 'Laki-laki' : 'Perempuan' }}{{ $item->umur }} tahun{{ $item->komoditas?->nama }} + @if($item->segmen() == 'Penggerak') + Penggerak + @elseif($item->segmen() == 'Perintis') + Perintis + @elseif($item->segmen() == 'Pemerhati') + Pemerhati + @elseif($item->segmen() == 'Pemula') + Pemula + @endif + {{ number_format($item->skor?->skor_kesiapan_adopsi, 2, '.', ',') }}{{ number_format($item->skor?->skor_d2_sistem_praktik_budidaya, 2, '.', ',') }}{{ number_format($item->skor?->skor_d4_sosial_ekonomi, 2, '.', ',') }}{{ number_format($item->skor?->skor_d6_rantai_nilai_akses_pasar, 2, '.', ',') }}
+
+
+
-@endsection \ No newline at end of file +@endsection + +@push('scripts') + + + +@endpush \ No newline at end of file diff --git a/resources/views/konfigurasi/profile/index.blade.php b/resources/views/konfigurasi/profile/index.blade.php index 5e1599f..8fd820d 100644 --- a/resources/views/konfigurasi/profile/index.blade.php +++ b/resources/views/konfigurasi/profile/index.blade.php @@ -106,6 +106,7 @@ Role: {{ $profile->role ?? 'N/A' }} + @if(auth()->user()->role === \App\Enums\Role::PETANI)
  • No KTP: {{ $profile->ktp ?? 'N/A' }} @@ -114,6 +115,7 @@ No KK: {{ $profile->kk ?? 'N/A' }}
  • + @endif
  • Alamat: {{ $alamatLengkap ?? 'N/A' }} @@ -268,16 +270,18 @@
    - +
    + @if($profile->role === \App\Enums\Role::PETANI->value)
    -
    +
    + @endif
    diff --git a/resources/views/layout/main.blade.php b/resources/views/layout/main.blade.php index 17e62d7..25c5a1e 100644 --- a/resources/views/layout/main.blade.php +++ b/resources/views/layout/main.blade.php @@ -80,6 +80,7 @@ + diff --git a/resources/views/master/profile/edit.blade.php b/resources/views/master/profile/edit.blade.php index 09eae9a..048249a 100644 --- a/resources/views/master/profile/edit.blade.php +++ b/resources/views/master/profile/edit.blade.php @@ -27,7 +27,7 @@
    - +
    diff --git a/resources/views/produktivitas/petani/lahan/add.blade.php b/resources/views/produktivitas/petani/lahan/add.blade.php index dc8b203..f4e4ebb 100644 --- a/resources/views/produktivitas/petani/lahan/add.blade.php +++ b/resources/views/produktivitas/petani/lahan/add.blade.php @@ -213,8 +213,8 @@ @error('umur_lahan')
    {{ $message }}
    @enderror
    - - + + @error('jumlah_tanaman')
    {{ $message }}
    @enderror
    @@ -302,9 +302,9 @@
    @error('tanaman_penaung[]')
    {{ $message }}
    @enderror @@ -429,7 +429,9 @@ $('#penyakit_tanaman').select2(); $('#keparahan_serangan').select2(); $('#komoditas_lain').select2(); - $('#tanaman_penaung').select2(); + $('#tanaman_penaung').select2({ + tags: true + }); $('#provinsi_id').select2().change(function(e) { e.preventDefault(); @@ -770,7 +772,7 @@ kabupatenkota_id: { required: true }, kecamatan_id: { required: true }, desa_kelurahan_id: { required: true }, - jumlah_tanaman: { required: true, number: true, min: 0 }, + jumlah_tanaman: { number: true, min: 0 }, umur_lahan: { number: true, min: 1 }, umur_tanaman: { required: true, number: true, min: 1 }, kondisi_tanaman: { required: true }, @@ -784,7 +786,7 @@ 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", number: "Jumlah tanaman harus berupa angka", min: "Jumlah tanaman minimal 0" }, + jumlah_tanaman: { 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 676fcf4..3a79981 100644 --- a/resources/views/produktivitas/petani/lahan/edit.blade.php +++ b/resources/views/produktivitas/petani/lahan/edit.blade.php @@ -85,8 +85,8 @@ @error('umur_lahan')
    {{ $message }}
    @enderror
    - - Jumlah Tanaman + @error('jumlah_tanaman')
    {{ $message }}
    @enderror
    @@ -187,10 +187,10 @@