From 72ea9ab707d89cefdaa3f1e341d252677afd1a6b Mon Sep 17 00:00:00 2001 From: Zhaqian Rouf Alfauzi Date: Sun, 9 Feb 2025 00:43:45 +0700 Subject: [PATCH] [add] Feature Import Export Train Data --- app/Exports/SantrisExport.php | 46 +++ .../Controllers/ClassifiactionController.php | 48 --- .../Controllers/ClassificationController.php | 86 +++++ app/Http/Controllers/MunaqosahController.php | 6 +- app/Imports/SantrisImport.php | 26 ++ app/Models/Riwayat.php | 11 +- app/Models/TrainData.php | 24 ++ ...2025_02_08_140740_create_santris_table.php | 27 -- ...5_02_08_170651_create_train_data_table.php | 28 ++ .../views/pages/admin/add-admin.blade.php | 109 +++--- .../views/pages/admin/add-santri.blade.php | 87 ++--- .../views/pages/admin/data-santri.blade.php | 22 +- .../views/pages/admin/exam-data.blade.php | 70 ---- .../views/pages/admin/train-data.blade.php | 332 ++++++++++-------- .../views/pages/santri/history.blade.php | 3 +- .../views/partial/headbar-admin.blade.php | 72 +++- .../views/partial/sidebar-admin.blade.php | 5 +- routes/web.php | 21 +- 18 files changed, 613 insertions(+), 410 deletions(-) create mode 100644 app/Exports/SantrisExport.php delete mode 100644 app/Http/Controllers/ClassifiactionController.php create mode 100644 app/Http/Controllers/ClassificationController.php create mode 100644 app/Imports/SantrisImport.php create mode 100644 app/Models/TrainData.php delete mode 100644 database/migrations/2025_02_08_140740_create_santris_table.php create mode 100644 database/migrations/2025_02_08_170651_create_train_data_table.php diff --git a/app/Exports/SantrisExport.php b/app/Exports/SantrisExport.php new file mode 100644 index 0000000..50d10cf --- /dev/null +++ b/app/Exports/SantrisExport.php @@ -0,0 +1,46 @@ +map(function ($trainData) { + return [ + 'Nama' => $trainData->nama, + 'Jenis Kelamin' => $trainData->jenis_kelamin, + 'NIS' => $trainData->nis, + 'Asal Daerah' => $trainData->asal_daerah, + 'Tahun Angkatan' => $trainData->tahun_angkatan, + 'Capaian Al Qur\'an' => $trainData->alquran, + 'Capaian Hadis' => $trainData->alhadis, + 'Status' => $trainData->status, + ]; + }); + } + + public function headings(): array + { + return [ + 'Nama', + 'Jenis Kelamin', + 'NIS', + 'Asal Daerah', + 'Tahun Angkatan', + 'Capaian Al Qur\'an', + 'Capaian Hadis', + 'Target' + ]; + } +} diff --git a/app/Http/Controllers/ClassifiactionController.php b/app/Http/Controllers/ClassifiactionController.php deleted file mode 100644 index 7eb982e..0000000 --- a/app/Http/Controllers/ClassifiactionController.php +++ /dev/null @@ -1,48 +0,0 @@ -resetTrainData(); + } + + $santris = TrainData::orderBy('created_at', 'desc')->get(); + return view('pages.admin.train-data', compact('santris')); + } + + public function importExcel(Request $request) + { + $request->validate([ + 'file' => 'required|file|mimes:xlsx,csv' + ]); + + Excel::import(new SantrisImport, $request->file('file')); + + return back()->with('success', 'Data latih berhasil diimpor!'); + } + + public function exportExcel() + { + return Excel::download(new SantrisExport, 'data-latih.xlsx'); + } + + public function deleteTrainData($id) + { + TrainData::findOrFail($id)->delete(); + return response()->json(['success' => 'Data berhasil dihapus dari tampilan halaman ini.']); + } + + public function resetTrainData() + { + // Hapus semua data train_data + TrainData::truncate(); + + // Ambil data dari riwayats dan simpan ke train_data + $riwayats = Riwayat::with('user')->get(); + + foreach ($riwayats as $riwayat) { + TrainData::create([ + 'nama' => $riwayat->user->name ?? '—', + 'jenis_kelamin' => $riwayat->user->jenis_kelamin ?? '—', + 'nis' => $riwayat->user->nis ?? '—', + 'asal_daerah' => $riwayat->user->asal_daerah ?? '—', + 'tahun_angkatan' => $riwayat->tahun_angkatan, + 'alquran' => $riwayat->alquran, + 'alhadis' => $riwayat->alhadis, + 'status' => $riwayat->status, + ]); + } + + return back()->with('success', 'Data latih direset!'); + } + + + /** + * Menampilkan hasil klasifikasi (classificationResult) + * + * @return \Illuminate\View\View + */ + public function classificationResult() + { + // Tambahkan logika untuk mengolah dan menampilkan hasil klasifikasi + // Misalnya, menjalankan algoritma atau mengambil data dari model + + return view('pages.admin.class-result'); // Pastikan view ini telah dibuat + } +} diff --git a/app/Http/Controllers/MunaqosahController.php b/app/Http/Controllers/MunaqosahController.php index 6cd3548..f0b8213 100644 --- a/app/Http/Controllers/MunaqosahController.php +++ b/app/Http/Controllers/MunaqosahController.php @@ -12,7 +12,7 @@ public function destroy($id) { $riwayat = Riwayat::findOrFail($id); $riwayat->delete(); - return redirect()->back()->with('success', 'Data riwayat berhasil dihapus.'); + return redirect()->back()->with('success', 'Data Munaqosah berhasil dihapus.'); } /** @@ -37,10 +37,10 @@ public function send(Request $request, $id) /** * Tampilkan data munaqosah untuk admin. */ - public function showMunaqosah() + public function showMunaqosah() { $riwayat = Riwayat::whereNotNull('sent_at') - ->where('admin_id', auth()->id()) // hanya data untuk admin yang sedang login + ->where('admin_id', auth()->id()) // hanya data untuk admin yang sedang login ->orderBy('created_at', 'desc') ->get(); diff --git a/app/Imports/SantrisImport.php b/app/Imports/SantrisImport.php new file mode 100644 index 0000000..dc407e4 --- /dev/null +++ b/app/Imports/SantrisImport.php @@ -0,0 +1,26 @@ + $row['nis']], // Jika NIS sudah ada, perbarui data + [ + 'nama' => $row['nama'], + 'jenis_kelamin' => $row['jenis_kelamin'], + 'asal_daerah' => $row['asal_daerah'], + 'tahun_angkatan' => $row['tahun_angkatan'], + 'alquran' => $row['capaian_al_quran'], + 'alhadis' => $row['capaian_hadis'], + 'status' => $row['status'] + ] + ); + } +} diff --git a/app/Models/Riwayat.php b/app/Models/Riwayat.php index 768843c..1816e07 100644 --- a/app/Models/Riwayat.php +++ b/app/Models/Riwayat.php @@ -19,15 +19,12 @@ class Riwayat extends Model 'nilai_n', 'status', 'sent_at', - 'admin_id', - 'munaqosah_status', + 'admin_id', + 'munaqosah_status', ]; - - /** - * Relasi ke model User (jika diperlukan) - */ public function user() { - return $this->belongsTo(User::class, 'user_id'); + return $this->belongsTo(User::class, 'user_id') + ->select(['id', 'name', 'jenis_kelamin', 'nis', 'asal_daerah']); } } diff --git a/app/Models/TrainData.php b/app/Models/TrainData.php new file mode 100644 index 0000000..dec34f6 --- /dev/null +++ b/app/Models/TrainData.php @@ -0,0 +1,24 @@ +id(); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('santris'); - } -}; diff --git a/database/migrations/2025_02_08_170651_create_train_data_table.php b/database/migrations/2025_02_08_170651_create_train_data_table.php new file mode 100644 index 0000000..3a6432b --- /dev/null +++ b/database/migrations/2025_02_08_170651_create_train_data_table.php @@ -0,0 +1,28 @@ +id(); + $table->string('nama'); + $table->string('jenis_kelamin'); + $table->string('nis')->unique(); + $table->string('asal_daerah'); + $table->string('tahun_angkatan'); + $table->string('alquran')->nullable(); + $table->string('alhadis')->nullable(); + $table->string('status')->nullable(); + $table->timestamps(); + }); + } + + public function down() + { + Schema::dropIfExists('train_data'); + } +}; diff --git a/resources/views/pages/admin/add-admin.blade.php b/resources/views/pages/admin/add-admin.blade.php index 1f5d68e..e532464 100644 --- a/resources/views/pages/admin/add-admin.blade.php +++ b/resources/views/pages/admin/add-admin.blade.php @@ -23,66 +23,75 @@
Data Admin
@if(session('success')) -
- {{ session('success') }} -
- @endif +
+ {{ session('success') }} +
+ @endif {{-- Tabel Admin --}} - - - - - - - - - - @foreach($admins as $index => $admin) - - - - - - - - @endforeach - -
NoEmailAksi
{{ $index+1 }}{{ $admin->email }} -
- @csrf - @method('DELETE') - -
-
+
+ + + + + + + + + + @foreach($admins as $index => $admin) + + + + + + + + @endforeach + +
NoEmailAksi
{{ $index+1 }}{{ $admin->email }} +
+ @csrf + @method('DELETE') + +
+
+
- - + + + + @@ -73,6 +77,9 @@ - + - - - - - - - - - - - - - - + + + @endforeach + + +
- + + + + + + + + + + + @endsection \ No newline at end of file diff --git a/resources/views/pages/santri/history.blade.php b/resources/views/pages/santri/history.blade.php index ffc3072..e2885d9 100644 --- a/resources/views/pages/santri/history.blade.php +++ b/resources/views/pages/santri/history.blade.php @@ -83,7 +83,8 @@ - @if($loop->first) + @if($loop->first && ($item->munaqosah_status === null || + $item->munaqosah_status === 'Belum Diverifikasi'))