From a53eefa96ec91d5f55e61d9fd6cd6f7922bcf8a9 Mon Sep 17 00:00:00 2001 From: SitiAfiah Date: Fri, 10 Apr 2026 21:49:19 +0700 Subject: [PATCH] kolat, dan anggota --- .../Http/Controllers/AnggotaController.php | 92 +++++ .../app/Http/Controllers/KolatController.php | 64 +++ .../Http/Controllers/PelatihController.php | 12 + manajemen_mp/app/Models/Anggota.php | 41 ++ manajemen_mp/app/Models/Kolat.php | 26 ++ manajemen_mp/app/Models/Pelatih.php | 26 ++ manajemen_mp/app/Models/Role.php | 14 + .../2026_04_02_152126_create_role_table.php | 29 ++ .../2026_04_02_152344_create_kolat_table.php | 29 ++ ...2026_04_02_152646_create_anggota_table.php | 59 +++ .../resources/views/anggota/anggota.blade.php | 368 ++++++++++++++++-- .../views/anggota/anggotacreate.blade.php | 217 +++++++++++ .../views/anggota/editanggota.blade.php | 181 +++++++++ .../resources/views/kolat/editkolat.blade.php | 118 ++++++ .../resources/views/kolat/kolat.blade.php | 178 +++++++++ .../views/kolat/kolatcreate.blade.php | 119 ++++++ .../resources/views/layout/app.blade.php | 30 +- .../resources/views/pelatih/pelatih.blade.php | 165 ++++++++ .../views/pelatih/pelatihcreate.blade.php | 144 +++++++ manajemen_mp/routes/web.php | 23 ++ 20 files changed, 1895 insertions(+), 40 deletions(-) create mode 100644 manajemen_mp/app/Http/Controllers/AnggotaController.php create mode 100644 manajemen_mp/app/Http/Controllers/KolatController.php create mode 100644 manajemen_mp/app/Http/Controllers/PelatihController.php create mode 100644 manajemen_mp/app/Models/Anggota.php create mode 100644 manajemen_mp/app/Models/Kolat.php create mode 100644 manajemen_mp/app/Models/Pelatih.php create mode 100644 manajemen_mp/app/Models/Role.php create mode 100644 manajemen_mp/database/migrations/2026_04_02_152126_create_role_table.php create mode 100644 manajemen_mp/database/migrations/2026_04_02_152344_create_kolat_table.php create mode 100644 manajemen_mp/database/migrations/2026_04_02_152646_create_anggota_table.php create mode 100644 manajemen_mp/resources/views/anggota/anggotacreate.blade.php create mode 100644 manajemen_mp/resources/views/anggota/editanggota.blade.php create mode 100644 manajemen_mp/resources/views/kolat/editkolat.blade.php create mode 100644 manajemen_mp/resources/views/kolat/kolat.blade.php create mode 100644 manajemen_mp/resources/views/kolat/kolatcreate.blade.php create mode 100644 manajemen_mp/resources/views/pelatih/pelatih.blade.php create mode 100644 manajemen_mp/resources/views/pelatih/pelatihcreate.blade.php diff --git a/manajemen_mp/app/Http/Controllers/AnggotaController.php b/manajemen_mp/app/Http/Controllers/AnggotaController.php new file mode 100644 index 0000000..dcfa073 --- /dev/null +++ b/manajemen_mp/app/Http/Controllers/AnggotaController.php @@ -0,0 +1,92 @@ +get(); + return view('anggota.anggota', compact('data_anggota')); + } + + // 2. Menampilkan Form Tambah + public function create() + { + // Ambil semua daftar kolat untuk ditampilkan di dropdown form + $data_kolat = Kolat::all(); + return view('anggota.anggotacreate', compact('data_kolat')); + } + + // 3. Menyimpan Anggota Baru + public function store(Request $request) + { + // Validasi data + $request->validate([ + 'nama_lengkap' => 'required', + 'jabatan' => 'required|in:pengurus,pelatih,anggota', + 'no_hp' => 'required', + 'role_id' => 'required', + 'kolat_id' => 'required|exists:kolat,id', // Validasi ID kolat harus ada di tabel kolat + ]); + + // Logika Membuat No Induk Otomatis (JB-001) + $terakhir = Anggota::orderBy('id', 'desc')->first(); + + if (!$terakhir) { + $nomor_urut = "001"; + } else { + // Ambil angka setelah "JB-" (JB-001 -> 001) + $nomor_terakhir = substr($terakhir->no_induk, 3); + $nomor_urut = sprintf("%03d", intval($nomor_terakhir) + 1); + } + + $no_induk_baru = "JB-" . $nomor_urut; + + // Gabungkan data input dengan No Induk otomatis + $data = $request->all(); + $data['no_induk'] = $no_induk_baru; + + // Simpan ke database + Anggota::create($data); + + return redirect()->route('anggota.anggota') + ->with('success', 'Anggota ' . $request->nama_lengkap . ' berhasil terdaftar dengan ID: ' . $no_induk_baru); + } + + // 4. Menampilkan Form Edit + public function edit($id) + { + $anggota = Anggota::findOrFail($id); + $data_kolat = Kolat::all(); // Ambil daftar kolat lagi untuk pilihan saat edit + + return view('anggota.editanggota', compact('anggota', 'data_kolat')); + } + + // 5. Update Data Anggota + public function update(Request $request, $id) + { + $anggota = Anggota::findOrFail($id); + + $request->validate([ + 'no_induk' => 'required|unique:anggotas,no_induk,' . $id, + 'nama_lengkap' => 'required', + 'no_hp' => 'required', + 'jabatan' => 'required|in:pengurus,pelatih,anggota', + 'kolat_id' => 'required|exists:kolat,id', + ]); + + // Update data menggunakan data yang sudah divalidasi + $anggota->update($request->all()); + + return redirect()->route('anggota.anggota') + ->with('success', 'Data ' . $anggota->nama_lengkap . ' Berhasil Diperbarui!'); + } +} diff --git a/manajemen_mp/app/Http/Controllers/KolatController.php b/manajemen_mp/app/Http/Controllers/KolatController.php new file mode 100644 index 0000000..34df744 --- /dev/null +++ b/manajemen_mp/app/Http/Controllers/KolatController.php @@ -0,0 +1,64 @@ +validate([ + 'nama_kolat' => 'required|unique:kolat,nama_kolat', + 'alamat_kolat' => 'nullable' + ]); + + + Kolat::create($request->all()); + + return redirect()->route('kolat.index')->with('success', 'Kolat baru berhasil ditambahkan!'); +} + + public function edit($id) +{ + + $kolat = Kolat::findOrFail($id); + return view('kolat.editkolat', compact('kolat')); +} +public function update(Request $request, $id) +{ + + $request->validate([ + 'nama_kolat' => 'required|unique:kolat,nama_kolat,'.$id, + 'alamat_kolat' => 'nullable' + ]); + + $kolat = Kolat::findOrFail($id); + + $kolat->update($request->all()); + return redirect()->route('kolat.index')->with('success', 'Data Kolat berhasil diperbarui!'); +} + + // 4. Hapus Data Kolat + public function destroy($id) + { + $kolat = Kolat::findOrFail($id); + $kolat->delete(); + return redirect()->back()->with('success', 'Kolat telah dihapus!'); + } +} diff --git a/manajemen_mp/app/Http/Controllers/PelatihController.php b/manajemen_mp/app/Http/Controllers/PelatihController.php new file mode 100644 index 0000000..a295a2e --- /dev/null +++ b/manajemen_mp/app/Http/Controllers/PelatihController.php @@ -0,0 +1,12 @@ +belongsTo(Kolat::class, 'kolat_id'); + } + + public function role() + { + return $this->belongsTo(Role::class, 'role_id'); + } +} diff --git a/manajemen_mp/app/Models/Kolat.php b/manajemen_mp/app/Models/Kolat.php new file mode 100644 index 0000000..6995bcb --- /dev/null +++ b/manajemen_mp/app/Models/Kolat.php @@ -0,0 +1,26 @@ +hasMany(Anggota::class, 'kolat_id'); + } +} diff --git a/manajemen_mp/app/Models/Pelatih.php b/manajemen_mp/app/Models/Pelatih.php new file mode 100644 index 0000000..4d2b1d5 --- /dev/null +++ b/manajemen_mp/app/Models/Pelatih.php @@ -0,0 +1,26 @@ +belongsTo(Anggota::class, 'anggota_id'); + } +} diff --git a/manajemen_mp/app/Models/Role.php b/manajemen_mp/app/Models/Role.php new file mode 100644 index 0000000..1a38cd2 --- /dev/null +++ b/manajemen_mp/app/Models/Role.php @@ -0,0 +1,14 @@ +id(); + $table->string('nama_role'); + $table->string('slug')->unique(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('role'); + } +}; diff --git a/manajemen_mp/database/migrations/2026_04_02_152344_create_kolat_table.php b/manajemen_mp/database/migrations/2026_04_02_152344_create_kolat_table.php new file mode 100644 index 0000000..e2ed305 --- /dev/null +++ b/manajemen_mp/database/migrations/2026_04_02_152344_create_kolat_table.php @@ -0,0 +1,29 @@ +id(); + $table->string('nama_kolat'); + $table->text('alamat_kolat')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('kolat'); + } +}; diff --git a/manajemen_mp/database/migrations/2026_04_02_152646_create_anggota_table.php b/manajemen_mp/database/migrations/2026_04_02_152646_create_anggota_table.php new file mode 100644 index 0000000..3749ab8 --- /dev/null +++ b/manajemen_mp/database/migrations/2026_04_02_152646_create_anggota_table.php @@ -0,0 +1,59 @@ +id(); + + // --- RELASI (Penghubung ke Dropdown) --- + $table->foreignId('role_id')->constrained('role')->onDelete('cascade'); + $table->foreignId('kolat_id')->constrained('kolat')->onDelete('cascade'); + + // --- DATA IDENTITAS --- + $table->string('no_induk')->unique(); + $table->string('nama_lengkap'); + $table->enum('jenis_kelamin', ['L', 'P']); + $table->string('tempat_lahir'); + $table->date('tgl_lahir'); + + // --- DATA KONTAK & ALAMAT --- + $table->string('no_hp', 15)->nullable(); + $table->text('alamat'); + + // --- DATA ORGANISASI --- + $table->string('tingkatan'); // Dasar I, Balik II, dll + $table->date('tgl_gabung'); + $table->date('tgl_keluar')->nullable(); // Diisi jika sudah tidak aktif + $table->enum('status', ['Aktif', 'Non-Aktif', 'Alumni'])->default('Aktif'); + $table->string('jabatan')->default('Anggota'); // Jabatan struktural di kolat/cabang + + // --- DATA KHUSUS KEPELATIHAN (Nullable) --- + // Kolom ini hanya diisi jika role_id merujuk ke 'Pelatih' + $table->string('no_sk')->nullable(); + $table->date('tgl_sk')->nullable(); + $table->date('masa_berlaku')->nullable(); + $table->string('foto_sk')->nullable(); + + // --- LAINNYA --- + $table->text('catatan_medis')->nullable(); + $table->timestamps(); + }); +} + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('anggota'); + } +}; diff --git a/manajemen_mp/resources/views/anggota/anggota.blade.php b/manajemen_mp/resources/views/anggota/anggota.blade.php index 09f4f98..95ebce5 100644 --- a/manajemen_mp/resources/views/anggota/anggota.blade.php +++ b/manajemen_mp/resources/views/anggota/anggota.blade.php @@ -1,49 +1,339 @@ @extends('layout.app') @section('content') - +
+ -
-
-
-
+
+
+
+
-
-
Data Kriteria
- - Tambah Data - +
+
+
Daftar Anggota PPS Merpati Putih
+

Cabang Jember - Kelola informasi induk anggota.

+
+ + Tambah Anggota + +
+ +
+ + + + + + + + + + + + + + @foreach ($data_anggota as $no => $item) + + + + + + + + + + + @endforeach + +
NoIdentitas AnggotaJKTingkatan & KolatJabatanStatusAksi
{{ $no + 1 }} +
{{ $item->nama_lengkap }}
+ ID: + {{ $item->no_induk }} +
+ + {{ $item->jenis_kelamin }} + + + {{ $item->tingkatan }} +
Kolat + {{ $item->asal_kolat }}
+
+ @if ($item->jabatan == 'pelatih') + Pelatih + @elseif($item->jabatan == 'pengurus') + Pengurus + @else + Anggota + @endif + + + {{ $item->status }} + + +
+ + + + Edit + +
+
+
+ +
- -
- - - - - - - - - - - - - - - - - - -
NoNo IndukNama lengkapTempat & Tanggal LahirJenis KelaminAlamatAsal KolatTingkatanTanggal GabungStatus Anggota
-
-
-
+ + @endsection diff --git a/manajemen_mp/resources/views/anggota/anggotacreate.blade.php b/manajemen_mp/resources/views/anggota/anggotacreate.blade.php new file mode 100644 index 0000000..2931b93 --- /dev/null +++ b/manajemen_mp/resources/views/anggota/anggotacreate.blade.php @@ -0,0 +1,217 @@ +@extends('layout.app') + +@section('content') +
+ + + +
+
+
+ @csrf + @if(isset($anggota)) @method('PUT') @endif + + +
+
+
Informasi Pribadi
+
+
+
+
+ + +
+
+ +
+ +62 + +
+
+
+ +
+
+ +
+
+ +
+
+
+
+ + +
+
+ + +
+
+
+
+ + +
+
+
Informasi Organisasi
+
+
+
+
+ + +
+
+ + +
+
+ + +
+ + + + +
+ + +
+
+ + +
+
+ + +
+ +
+ + +
+
+
+ + + +
+
+
+
+
+ + + + +@endsection diff --git a/manajemen_mp/resources/views/anggota/editanggota.blade.php b/manajemen_mp/resources/views/anggota/editanggota.blade.php new file mode 100644 index 0000000..1bf9f50 --- /dev/null +++ b/manajemen_mp/resources/views/anggota/editanggota.blade.php @@ -0,0 +1,181 @@ +@extends('layout.app') + +@section('content') +
+ + + +
+
+ +
+ @csrf + @method('PUT') + + +
+
+
Informasi Pribadi
+
+
+
+
+ + + * No. induk permanen dan tidak dapat diubah +
+
+ + +
+
+ +
+ +62 + +
+
+
+ + +
+
+
+
+ + +
+
+
Informasi Organisasi
+
+
+
+
+ + +
+
+ + +
+
+ + +
+ + + + +
+ + +
+
+
+ + + +
+
+
+
+
+ + + + + +@endsection diff --git a/manajemen_mp/resources/views/kolat/editkolat.blade.php b/manajemen_mp/resources/views/kolat/editkolat.blade.php new file mode 100644 index 0000000..9964b96 --- /dev/null +++ b/manajemen_mp/resources/views/kolat/editkolat.blade.php @@ -0,0 +1,118 @@ +@extends('layout.app') + +@section('content') +
+ + + +
+
+ +
+ @csrf + @method('PUT') {{-- PENTING: Untuk proses update di Laravel --}} + +
+
+
Edit Detail Kolat
+
+ +
+
+ +
+ + + ID tidak dapat diubah (Permanen). +
+ + +
+ + + @error('nama_kolat') +
{{ $message }}
+ @enderror +
+ + +
+ + + @error('alamat_kolat') +
{{ $message }}
+ @enderror +
+
+
+ + + +
+
+
+
+
+ + +@endsection diff --git a/manajemen_mp/resources/views/kolat/kolat.blade.php b/manajemen_mp/resources/views/kolat/kolat.blade.php new file mode 100644 index 0000000..465f6c9 --- /dev/null +++ b/manajemen_mp/resources/views/kolat/kolat.blade.php @@ -0,0 +1,178 @@ +@extends('layout.app') + +@section('content') +
+ + + +
+
+
+
+ + +
+
+
Daftar Kolat Pada PPS Betako Merpati Putih
+

Cabang Jember - Kelola lokasi dan unit latihan.

+
+ + Tambah Kolat + +
+ + + @if(session('success')) +
+ {{ session('success') }} +
+ @endif + +
+ + + + + + + + + + + @forelse ($data_kolat as $item) + + + + + + + @empty + + + + @endforelse + +
IDNama Kelompok LatihanAlamat LokasiAksi
{{ $item->id }} +
Kolat {{ $item->nama_kolat }}
+ Pusat Latihan Unit +
+ + {{ $item->alamat_kolat ?? 'Alamat belum diatur' }} + + +
+ + + Edit + + + +
+ @csrf + @method('DELETE') + +
+
+
+

Belum ada data kolat yang tersedia.

+
+
+ +
+
+
+
+
+ + + +@push('scripts') + +@endpush +@endsection diff --git a/manajemen_mp/resources/views/kolat/kolatcreate.blade.php b/manajemen_mp/resources/views/kolat/kolatcreate.blade.php new file mode 100644 index 0000000..1445427 --- /dev/null +++ b/manajemen_mp/resources/views/kolat/kolatcreate.blade.php @@ -0,0 +1,119 @@ +@extends('layout.app') + +@section('content') +
+ + + +
+
+
+ @csrf + @if(isset($kolat)) @method('PUT') @endif + + +
+
+
Detail Kelompok Latihan
+
+
+
+ +
+ + + Identitas unik kolat di dalam sistem. +
+ + +
+ + + @error('nama_kolat') + {{ $message }} + @enderror +
+ + +
+ + + @error('alamat_kolat') + {{ $message }} + @enderror +
+
+
+ + + +
+
+
+
+
+ + +@endsection diff --git a/manajemen_mp/resources/views/layout/app.blade.php b/manajemen_mp/resources/views/layout/app.blade.php index dacc1bf..3bbfd66 100644 --- a/manajemen_mp/resources/views/layout/app.blade.php +++ b/manajemen_mp/resources/views/layout/app.blade.php @@ -36,6 +36,9 @@ * Author: BootstrapMade.com * License: https://bootstrapmade.com/license/ ======================================================== --> + + {{-- tambahan untuk pop up hapus --}} + @@ -71,6 +74,31 @@ - + {{-- untuk menampilkan detail --}} + + @stack('scripts') + +{{-- ini tambahan untuk pop up hapus --}} + ... + + + + + @stack('scripts') + + @if(session('success')) + + @endif + + diff --git a/manajemen_mp/resources/views/pelatih/pelatih.blade.php b/manajemen_mp/resources/views/pelatih/pelatih.blade.php new file mode 100644 index 0000000..426ec8d --- /dev/null +++ b/manajemen_mp/resources/views/pelatih/pelatih.blade.php @@ -0,0 +1,165 @@ +@extends('layout.app') + +@section('content') +
+ + + +
+
+
+
+ + +
+
+
Daftar Pelatih PPS Merpati Putih
+

Cabang Jember - Kelola informasi lisensi dan tingkatan pelatih.

+
+ + Tambah Pelatih + +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NoProfil PelatihTingkatanNomor SK / LisensiStatusAksi
1 +
+
+
Agus Setiawan
+ ID: MP-00192 +
+
+
+ Mandiri + + SK-JBR-001/2026 + + Aktif + +
+ + +
+
2 +
+
Siti Aminah
+ ID: MP-00205 +
+ +
+ Balik II + + SK-JBR-002/2026 + + Aktif + +
+ + +
+
+
+ +
+
+
+
+
+ + + +@endsection diff --git a/manajemen_mp/resources/views/pelatih/pelatihcreate.blade.php b/manajemen_mp/resources/views/pelatih/pelatihcreate.blade.php new file mode 100644 index 0000000..87b7b54 --- /dev/null +++ b/manajemen_mp/resources/views/pelatih/pelatihcreate.blade.php @@ -0,0 +1,144 @@ +@extends('layout.app') + +@section('content') +
+ + + +
+
+
+
+ + +
+
+ hide
Daftar Kolat PPS Merpati Putih
+

Cabang Jember - Kelola lokasi dan unit latihan.

+
+ + Tambah Kolat + +
+ + + @if(session('success')) +
+ {{ session('success') }} +
+ @endif + +
+ + + + + + + + + + + @forelse ($data_kolat as $item) + + + + + + + @empty + + + + @endforelse + +
IDNama Kelompok LatihanAlamat LokasiAksi
#{{ $item->id }} +
Kolat {{ $item->nama_kolat }}
+ Pusat Latihan Unit +
+ + {{ $item->alamat_kolat ?? 'Alamat belum diatur' }} + + +
+ + + Edit + + + +
+ @csrf + @method('DELETE') + +
+
+
+

Belum ada data kolat yang tersedia.

+
+
+ +
+
+
+
+
+ + +@endsection diff --git a/manajemen_mp/routes/web.php b/manajemen_mp/routes/web.php index 58a5795..d60edbe 100644 --- a/manajemen_mp/routes/web.php +++ b/manajemen_mp/routes/web.php @@ -1,7 +1,11 @@ name('anggota.anggota'); +Route::get('/anggota/tambah', [AnggotaController::class, 'create'])->name('anggota.create'); +Route::post('/anggota/simpan', [AnggotaController::class, 'store'])->name('anggota.store'); +Route::get('/anggota/{id}/edit', [AnggotaController::class, 'edit'])->name('anggota.edit'); +Route::put('/anggota/{id}', [AnggotaController::class, 'update'])->name('anggota.update'); + +//pelatih +Route::get('/pelatih', [PelatihController::class, 'pelatih'])->name('pelatih.pelatih'); + +//kolat + Route::get('/kolat', [KolatController::class, 'kolat'])->name('kolat.index'); + Route::get('/kolat/tambah', [KolatController::class, 'create'])->name('kolat.create'); + Route::post('/kolat/simpan', [KolatController::class, 'store'])->name('kolat.store'); + Route::get('/kolat/{id}/edit', [KolatController::class, 'edit'])->name('kolat.edit'); + Route::put('/kolat/{id}', [KolatController::class, 'update'])->name('kolat.update'); + Route::delete('/kolat/{id}', [KolatController::class, 'destroy'])->name('kolat.destroy'); +