diff --git a/app/Http/Controllers/Web/Program/DetailKelompokController.php b/app/Http/Controllers/Web/Program/DetailKelompokController.php new file mode 100644 index 0000000..15fafc5 --- /dev/null +++ b/app/Http/Controllers/Web/Program/DetailKelompokController.php @@ -0,0 +1,99 @@ +validate([ + 'kelompok_id' => 'required|exists:kelompok_belajar_tani,id', + 'user_id' => [ + 'required', + Rule::exists('users', 'id')->where('role', Role::PETANI->value), + ], + 'jabatan' => 'required|string|max:255', + ]); + + $user = User::with('profile') + ->where('role', Role::PETANI->value) + ->findOrFail($request->user_id); + + DetailKelompok::create([ + 'kelompok_id' => $request->kelompok_id, + 'user_id' => $user->id, + 'nama_anggota' => $user->name, + 'jabatan' => $request->jabatan, + 'no_hp' => $user->profile->telepon ?? null, + 'alamat' => $user->profile->desakelurahan->nama ?? null, + ]); + + return back()->with( + 'success', + 'Anggota berhasil ditambahkan.' + ); + } + + public function update(Request $request, $id) + { + $request->validate([ + 'user_id' => [ + 'required', + Rule::exists('users', 'id')->where('role', Role::PETANI->value), + ], + 'jabatan' => 'required|string|max:255', + ]); + + $anggota = DetailKelompok::findOrFail($id); + + $user = User::with('profile') + ->where('role', Role::PETANI->value) + ->findOrFail($request->user_id); + + $anggota->update([ + 'user_id' => $user->id, + 'nama_anggota' => $user->name, + 'jabatan' => $request->jabatan, + 'no_hp' => $user->profile->telepon ?? null, + 'alamat' => $user->profile->desakelurahan->nama ?? null, + ]); + + return back()->with( + 'success', + 'Anggota berhasil diperbarui.' + ); + } + + public function destroy($id) + { + $anggota = DetailKelompok::findOrFail($id); + + $anggota->delete(); + + return back()->with('success', 'Anggota berhasil dihapus.'); + } + + public function detail($id) + { + $kelompok = KelompokBelajarTani::with('detailAnggota.user') + ->findOrFail($id); + + $petani = User::with('profile') + ->where('role', Role::PETANI->value) + ->orderBy('name') + ->get(); + + return view('program.kelompokbelajar.detailkelompok', compact( + 'kelompok', + 'petani' + )); + } +} diff --git a/app/Http/Controllers/Web/Program/KelompokBelajarTaniController.php b/app/Http/Controllers/Web/Program/KelompokBelajarTaniController.php index 9f79182..32875a2 100644 --- a/app/Http/Controllers/Web/Program/KelompokBelajarTaniController.php +++ b/app/Http/Controllers/Web/Program/KelompokBelajarTaniController.php @@ -5,6 +5,8 @@ namespace App\Http\Controllers\Web\Program; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use App\Models\Program\KelompokBelajarTani; +use App\Models\Program\DetailKelompok; +use App\Models\User; class KelompokBelajarTaniController extends Controller { @@ -145,4 +147,19 @@ class KelompokBelajarTaniController extends Controller 'data' => $kelompok ]); } + + public function detail($id) + { + $kelompok = KelompokBelajarTani::with('detailAnggota.user') + ->findOrFail($id); + + $petani = User::where('role', 'petani') + ->orderBy('name') + ->get(); + + return view('program.kelompokbelajar.detailkelompok', compact( + 'kelompok', + 'petani' + )); + } } \ No newline at end of file diff --git a/app/Models/Program/DetailKelompok.php b/app/Models/Program/DetailKelompok.php new file mode 100644 index 0000000..bc3755a --- /dev/null +++ b/app/Models/Program/DetailKelompok.php @@ -0,0 +1,38 @@ +belongsTo( + KelompokBelajarTani::class, + 'kelompok_id' + ); + } + + // RELASI KE USER + public function user() + { + return $this->belongsTo( + User::class, + 'user_id' + ); + } +} \ No newline at end of file diff --git a/app/Models/Program/KelompokBelajarTani.php b/app/Models/Program/KelompokBelajarTani.php index a3cf92c..4726493 100644 --- a/app/Models/Program/KelompokBelajarTani.php +++ b/app/Models/Program/KelompokBelajarTani.php @@ -4,6 +4,7 @@ namespace App\Models\Program; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; +use App\Models\Program\DetailKelompok; class KelompokBelajarTani extends Model { @@ -19,4 +20,11 @@ class KelompokBelajarTani extends Model 'updated_by', 'deleted_by', ]; + + public function detailAnggota(){ + return $this->hasMany( + DetailKelompok::class, + 'kelompok_id' + ); + } } \ No newline at end of file diff --git a/app/Models/User.php b/app/Models/User.php index a35ec1f..8351492 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -37,7 +37,7 @@ class User extends Authenticatable ]; } - protected function profile(): HasOne + public function profile(): HasOne { return $this->hasOne(\App\Models\Profile::class); } diff --git a/database/migrations/2026_05_12_104615_create_detail_kelompok_table.php b/database/migrations/2026_05_12_104615_create_detail_kelompok_table.php new file mode 100644 index 0000000..ef3d4a4 --- /dev/null +++ b/database/migrations/2026_05_12_104615_create_detail_kelompok_table.php @@ -0,0 +1,37 @@ +id(); + + $table->foreignId('kelompok_id') + ->constrained('kelompok_belajar_tani') + ->onDelete('cascade'); + + $table->string('nama_anggota'); + $table->string('jabatan')->nullable(); + $table->string('no_hp')->nullable(); + $table->text('alamat')->nullable(); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('detail_kelompok'); + } +}; diff --git a/database/migrations/2026_05_13_100715_update_detail_kelompok_table.php b/database/migrations/2026_05_13_100715_update_detail_kelompok_table.php new file mode 100644 index 0000000..1f5e199 --- /dev/null +++ b/database/migrations/2026_05_13_100715_update_detail_kelompok_table.php @@ -0,0 +1,31 @@ +foreignId('user_id') + ->nullable() + ->after('kelompok_id') + ->constrained('users') + ->nullOnDelete(); + + }); + } + + public function down(): void + { + Schema::table('detail_kelompok', function (Blueprint $table) { + + $table->dropForeign(['user_id']); + $table->dropColumn('user_id'); + + }); + } +}; \ No newline at end of file diff --git a/resources/views/program/kelompokbelajar/detailkelompok.blade.php b/resources/views/program/kelompokbelajar/detailkelompok.blade.php new file mode 100644 index 0000000..a11d2f0 --- /dev/null +++ b/resources/views/program/kelompokbelajar/detailkelompok.blade.php @@ -0,0 +1,384 @@ +@extends('layout.main') + +@section('content') +
| No | +Nama Anggota | +Jabatan | +Telepon | +Desa/Kelurahan | +Actions | +
|---|---|---|---|---|---|
| {{ $index + 1 }} | + +{{ $anggota->user->name ?? '-' }} | + +{{ $anggota->jabatan ?? '-' }} | + +{{ $anggota->no_hp ?? '-' }} | + +{{ $anggota->alamat ?? '-' }} | + +
+
+
+
+ {{-- EDIT --}}
+
+
+ {{-- DELETE --}}
+
+
+
+
+ |
+
+
| + + Belum ada anggota kelompok. + | +|||||