[add] Feature Import Export Train Data
This commit is contained in:
parent
5aa5f680ab
commit
72ea9ab707
|
@ -0,0 +1,46 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Exports;
|
||||||
|
|
||||||
|
use App\Models\Riwayat;
|
||||||
|
use Maatwebsite\Excel\Concerns\FromCollection;
|
||||||
|
use Maatwebsite\Excel\Concerns\WithHeadings;
|
||||||
|
|
||||||
|
namespace App\Exports;
|
||||||
|
|
||||||
|
use App\Models\TrainData;
|
||||||
|
use Maatwebsite\Excel\Concerns\FromCollection;
|
||||||
|
use Maatwebsite\Excel\Concerns\WithHeadings;
|
||||||
|
|
||||||
|
class SantrisExport implements FromCollection, WithHeadings
|
||||||
|
{
|
||||||
|
public function collection()
|
||||||
|
{
|
||||||
|
return TrainData::all()->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'
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,48 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Http\Controllers;
|
|
||||||
|
|
||||||
use Illuminate\Http\Request;
|
|
||||||
|
|
||||||
class ClassifiactionController extends Controller
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Menampilkan data ujian (examData)
|
|
||||||
*
|
|
||||||
* @return \Illuminate\View\View
|
|
||||||
*/
|
|
||||||
public function examData()
|
|
||||||
{
|
|
||||||
// Tambahkan logika untuk mengambil data ujian dari database jika diperlukan
|
|
||||||
// Contoh: $data = Exam::all();
|
|
||||||
|
|
||||||
// Return view dengan data yang diperlukan
|
|
||||||
return view('pages.admin.exam-data'); // Pastikan view ini telah dibuat
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Menampilkan data pelatihan (trainData)
|
|
||||||
*
|
|
||||||
* @return \Illuminate\View\View
|
|
||||||
*/
|
|
||||||
public function trainData()
|
|
||||||
{
|
|
||||||
// Tambahkan logika untuk mengambil data pelatihan
|
|
||||||
// Contoh: $data = Train::all();
|
|
||||||
|
|
||||||
return view('pages.admin.train-data'); // Pastikan view ini telah dibuat
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 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
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,86 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
use App\Models\User;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use App\Imports\SantrisImport;
|
||||||
|
use App\Exports\SantrisExport;
|
||||||
|
use App\Models\Riwayat;
|
||||||
|
use App\Models\TrainData;
|
||||||
|
use Maatwebsite\Excel\Facades\Excel;
|
||||||
|
|
||||||
|
class ClassificationController extends Controller
|
||||||
|
{
|
||||||
|
|
||||||
|
public function showTrainData()
|
||||||
|
{
|
||||||
|
// Jika train_data kosong, otomatis ambil dari riwayat
|
||||||
|
if (TrainData::count() == 0) {
|
||||||
|
$this->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
|
||||||
|
}
|
||||||
|
}
|
|
@ -12,7 +12,7 @@ public function destroy($id)
|
||||||
{
|
{
|
||||||
$riwayat = Riwayat::findOrFail($id);
|
$riwayat = Riwayat::findOrFail($id);
|
||||||
$riwayat->delete();
|
$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.
|
* Tampilkan data munaqosah untuk admin.
|
||||||
*/
|
*/
|
||||||
public function showMunaqosah()
|
public function showMunaqosah()
|
||||||
{
|
{
|
||||||
$riwayat = Riwayat::whereNotNull('sent_at')
|
$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')
|
->orderBy('created_at', 'desc')
|
||||||
->get();
|
->get();
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Imports;
|
||||||
|
|
||||||
|
use App\Models\TrainData;
|
||||||
|
use Maatwebsite\Excel\Concerns\ToModel;
|
||||||
|
use Maatwebsite\Excel\Concerns\WithHeadingRow;
|
||||||
|
|
||||||
|
class SantrisImport implements ToModel, WithHeadingRow
|
||||||
|
{
|
||||||
|
public function model(array $row)
|
||||||
|
{
|
||||||
|
return TrainData::updateOrCreate(
|
||||||
|
['nis' => $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']
|
||||||
|
]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -19,15 +19,12 @@ class Riwayat extends Model
|
||||||
'nilai_n',
|
'nilai_n',
|
||||||
'status',
|
'status',
|
||||||
'sent_at',
|
'sent_at',
|
||||||
'admin_id',
|
'admin_id',
|
||||||
'munaqosah_status',
|
'munaqosah_status',
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
|
||||||
* Relasi ke model User (jika diperlukan)
|
|
||||||
*/
|
|
||||||
public function user()
|
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']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
|
class TrainData extends Model
|
||||||
|
{
|
||||||
|
use HasFactory;
|
||||||
|
|
||||||
|
protected $table = 'train_data';
|
||||||
|
|
||||||
|
protected $fillable = [
|
||||||
|
'nama',
|
||||||
|
'jenis_kelamin',
|
||||||
|
'nis',
|
||||||
|
'asal_daerah',
|
||||||
|
'tahun_angkatan',
|
||||||
|
'alquran',
|
||||||
|
'alhadis',
|
||||||
|
'status',
|
||||||
|
];
|
||||||
|
}
|
|
@ -1,27 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
use Illuminate\Database\Migrations\Migration;
|
|
||||||
use Illuminate\Database\Schema\Blueprint;
|
|
||||||
use Illuminate\Support\Facades\Schema;
|
|
||||||
|
|
||||||
return new class extends Migration
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Run the migrations.
|
|
||||||
*/
|
|
||||||
public function up(): void
|
|
||||||
{
|
|
||||||
Schema::create('santris', function (Blueprint $table) {
|
|
||||||
$table->id();
|
|
||||||
$table->timestamps();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reverse the migrations.
|
|
||||||
*/
|
|
||||||
public function down(): void
|
|
||||||
{
|
|
||||||
Schema::dropIfExists('santris');
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
return new class extends Migration {
|
||||||
|
public function up()
|
||||||
|
{
|
||||||
|
Schema::create('train_data', function (Blueprint $table) {
|
||||||
|
$table->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');
|
||||||
|
}
|
||||||
|
};
|
|
@ -23,66 +23,75 @@
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<h5 class="card-title">Data Admin</h5>
|
<h5 class="card-title">Data Admin</h5>
|
||||||
@if(session('success'))
|
@if(session('success'))
|
||||||
<div class="alert alert-success">
|
<div class="alert alert-success">
|
||||||
{{ session('success') }}
|
{{ session('success') }}
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
{{-- Tabel Admin --}}
|
{{-- Tabel Admin --}}
|
||||||
<table id="addAdminTable" class="table">
|
<div class="table-responsive">
|
||||||
<thead>
|
<table id="addAdminTable" class="table">
|
||||||
<tr>
|
<thead>
|
||||||
<th>No</th>
|
<tr>
|
||||||
<th>Email</th>
|
<th>No</th>
|
||||||
<th>Aksi</th>
|
<th>Email</th>
|
||||||
</tr>
|
<th>Aksi</th>
|
||||||
</thead>
|
</tr>
|
||||||
<tbody>
|
</thead>
|
||||||
@foreach($admins as $index => $admin)
|
<tbody>
|
||||||
<tr>
|
@foreach($admins as $index => $admin)
|
||||||
<td>{{ $index+1 }}</td>
|
<tr>
|
||||||
<td>{{ $admin->email }}</td>
|
<td>{{ $index+1 }}</td>
|
||||||
<td>
|
<td>{{ $admin->email }}</td>
|
||||||
<form action="{{ route('admin.delete', $admin->id) }}" method="POST" id="deleteForm{{ $admin->id }}">
|
<td>
|
||||||
@csrf
|
<form action="{{ route('admin.delete', $admin->id) }}" method="POST"
|
||||||
@method('DELETE')
|
id="deleteForm{{ $admin->id }}">
|
||||||
<button class="btn btn-danger btn-sm" type="button" onclick="confirmDelete({{ $admin->id }})">
|
@csrf
|
||||||
<i class='bx bx-trash'></i>
|
@method('DELETE')
|
||||||
</button>
|
<button class="btn btn-danger btn-sm" type="button"
|
||||||
</form>
|
onclick="confirmDelete({{ $admin->id }})">
|
||||||
</td>
|
<i class='bx bx-trash'></i>
|
||||||
|
</button>
|
||||||
<script>
|
</form>
|
||||||
function confirmDelete(adminId) {
|
</td>
|
||||||
Swal.fire({
|
|
||||||
title: 'Yakin ingin menghapus admin ini?',
|
<script>
|
||||||
icon: 'warning',
|
function confirmDelete(adminId) {
|
||||||
showCancelButton: true,
|
Swal.fire({
|
||||||
confirmButtonColor: '#d33',
|
title: 'Yakin ingin menghapus admin ini?',
|
||||||
cancelButtonColor: '#3085d6',
|
icon: 'warning',
|
||||||
confirmButtonText: 'Ya, hapus!',
|
showCancelButton: true,
|
||||||
cancelButtonText: 'Batal'
|
confirmButtonColor: '#d33',
|
||||||
}).then((result) => {
|
cancelButtonColor: '#3085d6',
|
||||||
if (result.isConfirmed) {
|
confirmButtonText: 'Ya, hapus!',
|
||||||
document.getElementById('deleteForm' + adminId).submit();
|
cancelButtonText: 'Batal'
|
||||||
}
|
}).then((result) => {
|
||||||
});
|
if (result.isConfirmed) {
|
||||||
}
|
document.getElementById('deleteForm' + adminId).submit();
|
||||||
</script>
|
}
|
||||||
</tr>
|
});
|
||||||
@endforeach
|
}
|
||||||
</tbody>
|
</script>
|
||||||
</table>
|
</tr>
|
||||||
|
@endforeach
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
<!-- DataTables CSS & JS (bisa diletakkan di layout umum juga) -->
|
<!-- DataTables CSS & JS (bisa diletakkan di layout umum juga) -->
|
||||||
<link rel="stylesheet"
|
<link rel="stylesheet"
|
||||||
href="https://cdn.datatables.net/1.13.6/css/jquery.dataTables.min.css">
|
href="https://cdn.datatables.net/1.13.6/css/jquery.dataTables.min.css">
|
||||||
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
|
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
|
||||||
<script src="https://cdn.datatables.net/1.13.6/js/jquery.dataTables.min.js"></script>
|
<script src="https://cdn.datatables.net/1.13.6/js/jquery.dataTables.min.js"></script>
|
||||||
<!-- SweetAlert2 CSS & JS -->
|
<!-- SweetAlert2 CSS & JS -->
|
||||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/sweetalert2@11.0.19/dist/sweetalert2.min.css">
|
<link rel="stylesheet"
|
||||||
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11.0.19/dist/sweetalert2.min.js"></script>
|
href="https://cdn.jsdelivr.net/npm/sweetalert2@11.0.19/dist/sweetalert2.min.css">
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11.0.19/dist/sweetalert2.min.js">
|
||||||
|
</script>
|
||||||
<script>
|
<script>
|
||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
$('#addAdminTable').DataTable({
|
$('#addAdminTable').DataTable({
|
||||||
|
responsive: true,
|
||||||
|
scrollX: true,
|
||||||
|
autoWidth: false,
|
||||||
"language": {
|
"language": {
|
||||||
"search": "Cari:",
|
"search": "Cari:",
|
||||||
"lengthMenu": "Tampilkan _MENU_ data",
|
"lengthMenu": "Tampilkan _MENU_ data",
|
||||||
|
|
|
@ -21,51 +21,55 @@
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<h5 class="card-title">Daftar Santri</h5>
|
<h5 class="card-title">Daftar Santri</h5>
|
||||||
@if(session('success'))
|
@if(session('success'))
|
||||||
<div class="alert alert-success">
|
<div class="alert alert-success">
|
||||||
{{ session('success') }}
|
{{ session('success') }}
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
{{-- Tabel Data Santri --}}
|
{{-- Tabel Data Santri --}}
|
||||||
<table id="addSantriTable" class="table">
|
<div class="table-responsive">
|
||||||
<thead>
|
<table id="addSantriTable" class="table">
|
||||||
<tr>
|
<thead>
|
||||||
<th>No</th>
|
<tr>
|
||||||
<th>Nama</th>
|
<th>No</th>
|
||||||
<th>Email</th>
|
<th>Nama</th>
|
||||||
<th>Asal Daerah</th>
|
<th>Email</th>
|
||||||
<th>Jenis Kelamin</th>
|
<th>Asal Daerah</th>
|
||||||
<th>Aksi</th>
|
<th>Jenis Kelamin</th>
|
||||||
</tr>
|
<th>Aksi</th>
|
||||||
</thead>
|
</tr>
|
||||||
<tbody>
|
</thead>
|
||||||
@foreach($santris as $index => $santri)
|
<tbody>
|
||||||
<tr>
|
@foreach($santris as $index => $santri)
|
||||||
<td>{{ $index + 1 }}</td>
|
<tr>
|
||||||
<td>{{ $santri->name }}</td>
|
<td>{{ $index + 1 }}</td>
|
||||||
<td>{{ $santri->email }}</td>
|
<td>{{ $santri->name }}</td>
|
||||||
<td>{{ $santri->asal_daerah }}</td>
|
<td>{{ $santri->email }}</td>
|
||||||
<td>{{ $santri->jenis_kelamin }}</td>
|
<td>{{ $santri->asal_daerah }}</td>
|
||||||
<td>
|
<td>{{ $santri->jenis_kelamin }}</td>
|
||||||
<form action="{{ route('santri.delete', $santri->id) }}" method="POST"
|
<td>
|
||||||
onsubmit="return confirmDelete({{ $santri->id }})">
|
<form action="{{ route('santri.delete', $santri->id) }}" method="POST"
|
||||||
@csrf
|
onsubmit="return confirmDelete({{ $santri->id }})">
|
||||||
@method('DELETE')
|
@csrf
|
||||||
<button class="btn btn-danger btn-sm" type="button"
|
@method('DELETE')
|
||||||
onclick="confirmDelete({{ $santri->id }})">
|
<button class="btn btn-danger btn-sm" type="button"
|
||||||
<i class='bx bx-trash'></i>
|
onclick="confirmDelete({{ $santri->id }})">
|
||||||
</button>
|
<i class='bx bx-trash'></i>
|
||||||
</form>
|
</button>
|
||||||
</td>
|
</form>
|
||||||
</tr>
|
</td>
|
||||||
@endforeach
|
</tr>
|
||||||
</tbody>
|
@endforeach
|
||||||
</table>
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
<!-- DataTables CSS & JS -->
|
<!-- DataTables CSS & JS -->
|
||||||
<!-- SweetAlert2 CSS & JS -->
|
<!-- SweetAlert2 CSS & JS -->
|
||||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/sweetalert2@11.0.19/dist/sweetalert2.min.css">
|
<link rel="stylesheet"
|
||||||
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11.0.19/dist/sweetalert2.min.js"></script>
|
href="https://cdn.jsdelivr.net/npm/sweetalert2@11.0.19/dist/sweetalert2.min.css">
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11.0.19/dist/sweetalert2.min.js">
|
||||||
|
</script>
|
||||||
<link rel="stylesheet"
|
<link rel="stylesheet"
|
||||||
href="https://cdn.datatables.net/1.13.6/css/jquery.dataTables.min.css">
|
href="https://cdn.datatables.net/1.13.6/css/jquery.dataTables.min.css">
|
||||||
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
|
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
|
||||||
|
@ -73,6 +77,9 @@
|
||||||
<script>
|
<script>
|
||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
$('#addSantriTable').DataTable({
|
$('#addSantriTable').DataTable({
|
||||||
|
responsive: true,
|
||||||
|
scrollX: true,
|
||||||
|
autoWidth: false,
|
||||||
"language": {
|
"language": {
|
||||||
"search": "Cari:",
|
"search": "Cari:",
|
||||||
"lengthMenu": "Tampilkan _MENU_ data",
|
"lengthMenu": "Tampilkan _MENU_ data",
|
||||||
|
|
|
@ -32,8 +32,9 @@
|
||||||
<table id="dataTable" class="table">
|
<table id="dataTable" class="table">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Nama Santri</th>
|
|
||||||
<th>Tanggal</th>
|
<th>Tanggal</th>
|
||||||
|
<th>Nama Santri</th>
|
||||||
|
<th>NIS</th>
|
||||||
<th>Tahun Angkatan</th>
|
<th>Tahun Angkatan</th>
|
||||||
<th>Al-Qur'an Isi</th>
|
<th>Al-Qur'an Isi</th>
|
||||||
<th>Al-Hadis Isi</th>
|
<th>Al-Hadis Isi</th>
|
||||||
|
@ -45,33 +46,36 @@
|
||||||
<tbody>
|
<tbody>
|
||||||
@foreach($riwayat as $item)
|
@foreach($riwayat as $item)
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ $item->user->name ?? '—' }}</td>
|
|
||||||
<td>{{ $item->created_at->format('Y-m-d') }}</td>
|
<td>{{ $item->created_at->format('Y-m-d') }}</td>
|
||||||
|
<td>{{ $item->user->name ?? '—' }}</td>
|
||||||
|
<td>{{ $item->user->nis ?? '—' }}</td>
|
||||||
<td>{{ $item->tahun_angkatan }}</td>
|
<td>{{ $item->tahun_angkatan }}</td>
|
||||||
<td>{{ $item->alquran }}</td>
|
<td>{{ $item->alquran }}</td>
|
||||||
<td>{{ $item->alhadis }}</td>
|
<td>{{ $item->alhadis }}</td>
|
||||||
<td>{{ number_format($item->nilai_n, 2) }}</td>
|
<td>{{ number_format($item->nilai_n, 2) }}</td>
|
||||||
<td>{{ $item->status }}</td>
|
<td>{{ $item->status }}</td>
|
||||||
<td>
|
<td>
|
||||||
@if($item->munaqosah_status === 'Sedang di Verifikasi')
|
@if($item->munaqosah_status === 'Sedang di Verifikasi')
|
||||||
<!-- Jika belum ada keputusan, tampilkan tombol Verifikasi, Tolak, dan Delete -->
|
<!-- Jika belum ada keputusan, tampilkan tombol Verifikasi, Tolak, dan Delete -->
|
||||||
|
|
||||||
<!-- Tombol Verifikasi -->
|
<!-- Tombol Verifikasi -->
|
||||||
<form action="{{ route('munaqosah.verify', $item->id) }}" method="POST" style="display:inline;">
|
<form action="{{ route('munaqosah.verify', $item->id) }}" method="POST"
|
||||||
|
style="display:inline;">
|
||||||
@csrf
|
@csrf
|
||||||
<button type="submit" class="btn btn-success btn-sm">
|
<button type="submit" class="btn btn-success btn-sm">
|
||||||
<i class='bx bxs-check-circle'></i> Verifikasi
|
<i class='bx bxs-check-circle'></i> Verifikasi
|
||||||
</button>
|
</button>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<!-- Tombol Tolak -->
|
<!-- Tombol Tolak -->
|
||||||
<form action="{{ route('munaqosah.reject', $item->id) }}" method="POST" style="display:inline;">
|
<form action="{{ route('munaqosah.reject', $item->id) }}" method="POST"
|
||||||
|
style="display:inline;">
|
||||||
@csrf
|
@csrf
|
||||||
<button type="submit" class="btn btn-warning btn-sm">
|
<button type="submit" class="btn btn-warning btn-sm">
|
||||||
<i class='bx bxs-x-circle'></i> Tolak
|
<i class='bx bxs-x-circle'></i> Tolak
|
||||||
</button>
|
</button>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<!-- Tombol Delete dengan SweetAlert -->
|
<!-- Tombol Delete dengan SweetAlert -->
|
||||||
<button class="btn btn-danger btn-sm btn-delete" data-id="{{ $item->id }}">
|
<button class="btn btn-danger btn-sm btn-delete" data-id="{{ $item->id }}">
|
||||||
<i class='bx bxs-trash'></i> Delete
|
<i class='bx bxs-trash'></i> Delete
|
||||||
|
@ -87,7 +91,7 @@
|
||||||
</table>
|
</table>
|
||||||
<!-- Sertakan SweetAlert2 -->
|
<!-- Sertakan SweetAlert2 -->
|
||||||
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
|
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
$(document).on('click', '.btn-delete', function(e){
|
$(document).on('click', '.btn-delete', function(e){
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|
|
@ -1,70 +0,0 @@
|
||||||
@extends('layouts.app-admin')
|
|
||||||
@section('content')
|
|
||||||
<main id="main" class="main">
|
|
||||||
<div class="row">
|
|
||||||
<div class="pagetitle">
|
|
||||||
<h1>Data Latih</h1>
|
|
||||||
<nav>
|
|
||||||
<ol class="breadcrumb">
|
|
||||||
<li class="breadcrumb-item"><a href="#">Admin</a></li>
|
|
||||||
<li class="breadcrumb-item active">Data Latih</li>
|
|
||||||
</ol>
|
|
||||||
</nav>
|
|
||||||
</div>
|
|
||||||
<!-- Import & Export Buttons -->
|
|
||||||
<div class="col-lg-12">
|
|
||||||
<div class="card">
|
|
||||||
<div class="card-body">
|
|
||||||
<h5 class="card-title">Tindakan</h5>
|
|
||||||
<form action="{{ route('data-latih.import') }}" method="POST" enctype="multipart/form-data">
|
|
||||||
@csrf
|
|
||||||
<input type="file" name="file" required>
|
|
||||||
<button type="submit" class="btn btn-primary">Import Excel</button>
|
|
||||||
</form>
|
|
||||||
<a href="{{ route('data-latih.export') }}" class="btn btn-success">Export Excel</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<!-- Data Table -->
|
|
||||||
<div class="col-lg-12">
|
|
||||||
<div class="card">
|
|
||||||
<div class="card-body">
|
|
||||||
<h5 class="card-title">Data Latih</h5>
|
|
||||||
<table id="dataTable" class="table">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th>Nama</th>
|
|
||||||
<th>Jenis Kelamin</th>
|
|
||||||
<th>NIS</th>
|
|
||||||
<th>Asal Daerah</th>
|
|
||||||
<th>Tahun Angkatan</th>
|
|
||||||
<th>Capaian Hadis</th>
|
|
||||||
<th>Capaian Al Qur'an</th>
|
|
||||||
<th>Status</th>
|
|
||||||
<th>Aksi</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
@foreach($data as $santri)
|
|
||||||
<tr>
|
|
||||||
<td>{{ $santri->nama }}</td>
|
|
||||||
<td>{{ $santri->jenis_kelamin }}</td>
|
|
||||||
<td>{{ $santri->nis }}</td>
|
|
||||||
<td>{{ $santri->asal_daerah }}</td>
|
|
||||||
<td>{{ $santri->tahun_angkatan }}</td>
|
|
||||||
<td>{{ $santri->capaian_hadis }}</td>
|
|
||||||
<td>{{ $santri->capaian_quran }}</td>
|
|
||||||
<td>{{ $santri->status }}</td>
|
|
||||||
<td>
|
|
||||||
<!-- Aksi buttons -->
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
@endforeach
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</main>
|
|
||||||
@endsection
|
|
|
@ -1,165 +1,211 @@
|
||||||
@extends('layouts.app-admin')
|
@extends('layouts.app-admin')
|
||||||
<title>Data Munaqosah | SR Klasifikasi</title>
|
<title>Data Latih | SR Klasifikasi</title>
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<main id="main" class="main">
|
<main id="main" class="main">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="pagetitle">
|
<div class="pagetitle d-flex justify-content-between align-items-center">
|
||||||
<h1>Munaqosah</h1>
|
<h1>Data Latih</h1>
|
||||||
<nav>
|
</div>
|
||||||
<ol class="breadcrumb">
|
<nav>
|
||||||
<li class="breadcrumb-item"><a href="#">Admin</a></li>
|
<ol class="breadcrumb">
|
||||||
<li class="breadcrumb-item active">Munaqosah Santri</li>
|
<li class="breadcrumb-item"><a href="#">Admin</a></li>
|
||||||
</ol>
|
<li class="breadcrumb-item active">Data Latih</li>
|
||||||
</nav>
|
</ol>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<div class="col-lg-12">
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-body">
|
||||||
|
<h5 class="card-title">Tindakan</h5>
|
||||||
|
<div class="d-flex gap-2 align-items-center">
|
||||||
|
<form action="{{ route('trainData.import') }}" method="POST" enctype="multipart/form-data"
|
||||||
|
class="d-flex gap-2 flex-grow-1">
|
||||||
|
@csrf
|
||||||
|
<div class="input-group">
|
||||||
|
<input type="file" name="file" class="form-control" required>
|
||||||
|
<button type="submit" class="btn btn-primary d-flex gap-1">
|
||||||
|
<i class="bx bxs-file-import"></i> Import
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
<a href="{{ route('trainData.export') }}" class="btn btn-success d-flex gap-1"
|
||||||
|
style="margin-block-end: 1em">
|
||||||
|
<i class="bx bxs-file-export"></i> Export
|
||||||
|
</a>
|
||||||
|
<form action="{{ route('trainData.reset') }}" method="POST" class="d-inline reset-form">
|
||||||
|
@csrf
|
||||||
|
<button type="button" class="btn btn-warning d-flex gap-1 btn-reset">
|
||||||
|
<i class="bx bx-reset"></i> Reset Data
|
||||||
|
</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-12 dashboard">
|
<div class="col-12 dashboard">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-lg-12">
|
<div class="col-lg-12">
|
||||||
|
|
||||||
@if(session('success'))
|
|
||||||
<div class="alert alert-success">
|
|
||||||
{{ session('success') }}
|
|
||||||
</div>
|
|
||||||
@endif
|
|
||||||
|
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<h5 class="card-title">Munaqosah Santri</h5>
|
<h5 class="card-title">Data Latih</h5>
|
||||||
|
|
||||||
<!-- Tabel Riwayat -->
|
<div class="table-responsive">
|
||||||
<table id="dataTable" class="table">
|
<table id="dataTable" class="table">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Nama Santri</th>
|
<th>Nama</th>
|
||||||
<th>Tanggal</th>
|
<th>Jenis Kelamin</th>
|
||||||
<th>Tahun Angkatan</th>
|
<th>NIS</th>
|
||||||
<th>Al-Qur'an Isi</th>
|
<th>Asal Daerah</th>
|
||||||
<th>Al-Hadis Isi</th>
|
<th>Tahun Angkatan</th>
|
||||||
<th>Nilai N</th>
|
<th>Capaian Hadis</th>
|
||||||
<th>Status</th>
|
<th>Capaian Al Qur'an</th>
|
||||||
<th>Aksi</th>
|
<th>Target</th>
|
||||||
</tr>
|
<th>Aksi</th>
|
||||||
</thead>
|
</tr>
|
||||||
<tbody>
|
</thead>
|
||||||
@foreach($riwayat as $item)
|
<tbody>
|
||||||
<tr>
|
@foreach ($santris as $item)
|
||||||
<td>{{ $item->user->name ?? '—' }}</td>
|
<tr>
|
||||||
<td>{{ $item->created_at->format('Y-m-d') }}</td>
|
<td>{{ $item->nama ?? '—' }}</td>
|
||||||
<td>{{ $item->tahun_angkatan }}</td>
|
<td>{{ $item->jenis_kelamin ?? '—' }}</td>
|
||||||
<td>{{ $item->alquran }}</td>
|
<td>{{ $item->nis ?? '—' }}</td>
|
||||||
<td>{{ $item->alhadis }}</td>
|
<td>{{ $item->asal_daerah ?? '—' }}</td>
|
||||||
<td>{{ number_format($item->nilai_n, 2) }}</td>
|
<td>{{ $item->tahun_angkatan }}</td>
|
||||||
<td>{{ $item->status }}</td>
|
<td>
|
||||||
<td>
|
{{ $item->alhadis >= 1997 ? 'Khatam' : 'Belum Khatam' }}
|
||||||
@if($item->munaqosah_status === 'Sedang di Verifikasi')
|
</td>
|
||||||
<!-- Jika belum ada keputusan, tampilkan tombol Verifikasi, Tolak, dan Delete -->
|
<td>
|
||||||
|
{{ $item->alquran >= 606 ? 'Khatam' : 'Belum Khatam' }}
|
||||||
<!-- Tombol Verifikasi -->
|
</td>
|
||||||
<form action="{{ route('munaqosah.verify', $item->id) }}" method="POST"
|
<td>{{ $item->status }}</td>
|
||||||
style="display:inline;">
|
<td>
|
||||||
@csrf
|
<button class="btn btn-danger btn-sm btn-delete"
|
||||||
<button type="submit" class="btn btn-success btn-sm">
|
data-id="{{ $item->id }}">
|
||||||
<i class='bx bxs-check-circle'></i> Verifikasi
|
<i class='bx bxs-trash'></i> Delete
|
||||||
</button>
|
</button>
|
||||||
</form>
|
</td>
|
||||||
|
</tr>
|
||||||
<!-- Tombol Tolak -->
|
@endforeach
|
||||||
<form action="{{ route('munaqosah.reject', $item->id) }}" method="POST"
|
</tbody>
|
||||||
style="display:inline;">
|
</table>
|
||||||
@csrf
|
</div>
|
||||||
<button type="submit" class="btn btn-warning btn-sm">
|
|
||||||
<i class='bx bxs-x-circle'></i> Tolak
|
|
||||||
</button>
|
|
||||||
</form>
|
|
||||||
|
|
||||||
<!-- Tombol Delete dengan SweetAlert -->
|
|
||||||
<button class="btn btn-danger btn-sm btn-delete" data-id="{{ $item->id }}">
|
|
||||||
<i class='bx bxs-trash'></i> Delete
|
|
||||||
</button>
|
|
||||||
@else
|
|
||||||
<!-- Jika sudah ada keputusan (verified atau ditolak), tampilkan badge "Selesai" -->
|
|
||||||
<span class="badge bg-info">Selesai</span>
|
|
||||||
@endif
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
@endforeach
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<!-- Sertakan SweetAlert2 -->
|
|
||||||
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
$(document).on('click', '.btn-delete', function(e){
|
|
||||||
e.preventDefault();
|
|
||||||
var id = $(this).data('id');
|
|
||||||
Swal.fire({
|
|
||||||
title: 'Apakah Anda yakin?',
|
|
||||||
text: "Data akan dihapus permanen!",
|
|
||||||
icon: 'warning',
|
|
||||||
showCancelButton: true,
|
|
||||||
confirmButtonColor: '#3085d6',
|
|
||||||
cancelButtonColor: '#d33',
|
|
||||||
confirmButtonText: 'Ya, hapus!'
|
|
||||||
}).then((result) => {
|
|
||||||
if (result.isConfirmed) {
|
|
||||||
// Buat form secara dinamis untuk melakukan request DELETE
|
|
||||||
var form = $('<form>', {
|
|
||||||
'method': 'POST',
|
|
||||||
'action': '/admin/munaqosah/' + id
|
|
||||||
});
|
|
||||||
var token = '{{ csrf_token() }}';
|
|
||||||
var hiddenInput = $('<input>', {
|
|
||||||
'name': '_token',
|
|
||||||
'value': token,
|
|
||||||
'type': 'hidden'
|
|
||||||
});
|
|
||||||
var hiddenMethod = $('<input>', {
|
|
||||||
'name': '_method',
|
|
||||||
'value': 'DELETE',
|
|
||||||
'type': 'hidden'
|
|
||||||
});
|
|
||||||
form.append(hiddenInput, hiddenMethod).appendTo('body').submit();
|
|
||||||
}
|
|
||||||
})
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<!-- DataTables CSS & JS -->
|
|
||||||
<link rel="stylesheet"
|
|
||||||
href="https://cdn.datatables.net/1.13.6/css/jquery.dataTables.min.css">
|
|
||||||
<!-- Tambahkan CSS Responsive -->
|
|
||||||
<link rel="stylesheet"
|
|
||||||
href="https://cdn.datatables.net/responsive/2.4.1/css/responsive.dataTables.min.css">
|
|
||||||
|
|
||||||
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
|
|
||||||
<script src="https://cdn.datatables.net/1.13.6/js/jquery.dataTables.min.js"></script>
|
|
||||||
<!-- Tambahkan JS Responsive -->
|
|
||||||
<script src="https://cdn.datatables.net/responsive/2.4.1/js/dataTables.responsive.min.js">
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
$(document).ready(function () {
|
|
||||||
$('#dataTable').DataTable({
|
|
||||||
responsive: true, // Aktifkan fitur responsif
|
|
||||||
"language": {
|
|
||||||
"search": "Cari:",
|
|
||||||
"lengthMenu": "Tampilkan _MENU_ data",
|
|
||||||
"zeroRecords": "Tidak ada data yang cocok",
|
|
||||||
"info": "Menampilkan _START_ sampai _END_ dari _TOTAL_ data",
|
|
||||||
"infoEmpty": "Tidak ada data tersedia",
|
|
||||||
"infoFiltered": "(disaring dari _MAX_ total data)"
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
|
<!-- DataTables & SweetAlert -->
|
||||||
|
<link rel="stylesheet" href="https://cdn.datatables.net/1.13.6/css/jquery.dataTables.min.css">
|
||||||
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/sweetalert2@11.0.19/dist/sweetalert2.min.css">
|
||||||
|
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
|
||||||
|
<script src="https://cdn.datatables.net/1.13.6/js/jquery.dataTables.min.js"></script>
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11.0.19/dist/sweetalert2.min.js"></script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
$(document).ready(function () {
|
||||||
|
$('#dataTable').DataTable({
|
||||||
|
responsive: true,
|
||||||
|
scrollX: true,
|
||||||
|
autoWidth: false,
|
||||||
|
"language": {
|
||||||
|
"search": "Cari:",
|
||||||
|
"lengthMenu": "Tampilkan _MENU_ data",
|
||||||
|
"info": "Menampilkan _START_ sampai _END_ dari _TOTAL_ data",
|
||||||
|
"infoEmpty": "Tidak ada data tersedia",
|
||||||
|
"infoFiltered": "(disaring dari _MAX_ total data)"
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
$(document).on('click', '.btn-delete', function(e){
|
||||||
|
e.preventDefault();
|
||||||
|
var id = $(this).data('id');
|
||||||
|
|
||||||
|
Swal.fire({
|
||||||
|
title: 'Apakah Anda yakin?',
|
||||||
|
text: "Data hanya akan dihapus dari halaman ini, tidak dari database utama!",
|
||||||
|
icon: 'warning',
|
||||||
|
showCancelButton: true,
|
||||||
|
confirmButtonColor: '#3085d6',
|
||||||
|
cancelButtonColor: '#d33',
|
||||||
|
confirmButtonText: 'Ya, hapus!'
|
||||||
|
}).then((result) => {
|
||||||
|
if (result.isConfirmed) {
|
||||||
|
$.ajax({
|
||||||
|
url: "/admin/trainData/" + id,
|
||||||
|
type: "DELETE",
|
||||||
|
data: {
|
||||||
|
_token: "{{ csrf_token() }}"
|
||||||
|
},
|
||||||
|
success: function(response) {
|
||||||
|
Swal.fire(
|
||||||
|
'Terhapus!',
|
||||||
|
'Data berhasil dihapus dari tampilan halaman ini.',
|
||||||
|
'success'
|
||||||
|
);
|
||||||
|
location.reload(); // Refresh tabel setelah dihapus
|
||||||
|
},
|
||||||
|
error: function(response) {
|
||||||
|
Swal.fire(
|
||||||
|
'Gagal!',
|
||||||
|
'Terjadi kesalahan saat menghapus data.',
|
||||||
|
'error'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
$(document).on('click', '.btn-reset', function(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
|
||||||
|
Swal.fire({
|
||||||
|
title: 'Apakah Anda yakin?',
|
||||||
|
text: "Data latih akan diambil ulang dari data riwayat!",
|
||||||
|
icon: 'warning',
|
||||||
|
showCancelButton: true,
|
||||||
|
confirmButtonColor: '#3085d6',
|
||||||
|
cancelButtonColor: '#d33',
|
||||||
|
confirmButtonText: 'Ya, reset!'
|
||||||
|
}).then((result) => {
|
||||||
|
if (result.isConfirmed) {
|
||||||
|
var resetUrl = $(".reset-form").attr("action"); // Ambil URL dari form reset
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
url: resetUrl,
|
||||||
|
type: "POST",
|
||||||
|
data: {
|
||||||
|
_token: "{{ csrf_token() }}"
|
||||||
|
},
|
||||||
|
success: function(response) {
|
||||||
|
Swal.fire(
|
||||||
|
'Reset Berhasil!',
|
||||||
|
'Data latih telah diambil ulang dari data riwayat.',
|
||||||
|
'success'
|
||||||
|
).then(() => {
|
||||||
|
location.reload(); // Refresh tabel setelah reset
|
||||||
|
});
|
||||||
|
},
|
||||||
|
error: function(response) {
|
||||||
|
Swal.fire(
|
||||||
|
'Gagal!',
|
||||||
|
'Terjadi kesalahan saat mereset data.',
|
||||||
|
'error'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
||||||
@endsection
|
@endsection
|
|
@ -83,7 +83,8 @@
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<!-- Tombol Kirim hanya muncul di data terakhir -->
|
<!-- Tombol Kirim hanya muncul di data terakhir -->
|
||||||
@if($loop->first)
|
@if($loop->first && ($item->munaqosah_status === null ||
|
||||||
|
$item->munaqosah_status === 'Belum Diverifikasi'))
|
||||||
<button type="button" class="btn btn-primary btn-sm btn-send"
|
<button type="button" class="btn btn-primary btn-sm btn-send"
|
||||||
data-id="{{ $item->id }}">
|
data-id="{{ $item->id }}">
|
||||||
<i class='bx bxs-send'></i> Kirim
|
<i class='bx bxs-send'></i> Kirim
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
@endphp
|
@endphp
|
||||||
|
|
||||||
<header id="header" class="header fixed-top d-flex align-items-center">
|
<header id="header" class="header fixed-top d-flex align-items-center">
|
||||||
|
|
||||||
<div class="d-flex align-items-center justify-content-between">
|
<div class="d-flex align-items-center justify-content-between">
|
||||||
<a href="#" class="logo d-flex align-items-center">
|
<a href="#" class="logo d-flex align-items-center">
|
||||||
<img src="{{ asset('img/logo.png') }}" alt="">
|
<img src="{{ asset('img/logo.png') }}" alt="">
|
||||||
|
@ -19,8 +18,33 @@
|
||||||
|
|
||||||
<nav class="header-nav ms-auto">
|
<nav class="header-nav ms-auto">
|
||||||
<ul class="d-flex align-items-center">
|
<ul class="d-flex align-items-center">
|
||||||
<li class="nav-item dropdown pe-3">
|
<li class="nav-item dropdown pe-3 d-flex align-items-center">
|
||||||
|
|
||||||
|
<!-- Ikon Info -->
|
||||||
|
<i class="bi bi-info-circle mx-2 text-primary info-icon" style="font-size: 24px; cursor: pointer;"></i>
|
||||||
|
|
||||||
|
<!-- Card Info (Hidden by default) -->
|
||||||
|
<div class="info-card">
|
||||||
|
<div class="card shadow">
|
||||||
|
<div class="card-body">
|
||||||
|
<h6 class="card-title text-center">📜 Info Target</h6>
|
||||||
|
<table class="table table-bordered text-center mb-0">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td><i class="bi bi-book text-success"></i> <b>Quran</b></td>
|
||||||
|
<td>606 Halaman</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><i class="bi bi-book-half text-warning"></i> <b>Hadis</b></td>
|
||||||
|
<td>1997 Halaman</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Profile Icon -->
|
||||||
<a class="nav-link nav-profile d-flex align-items-center pe-0" href="#" data-bs-toggle="dropdown">
|
<a class="nav-link nav-profile d-flex align-items-center pe-0" href="#" data-bs-toggle="dropdown">
|
||||||
<i class='bx bxs-user-circle' style="font-size: 40px; color: #0d6efd;"></i>
|
<i class='bx bxs-user-circle' style="font-size: 40px; color: #0d6efd;"></i>
|
||||||
<span class="d-none d-md-block dropdown-toggle ps-2"></span>
|
<span class="d-none d-md-block dropdown-toggle ps-2"></span>
|
||||||
|
@ -28,7 +52,6 @@
|
||||||
|
|
||||||
<ul class="dropdown-menu dropdown-menu-end dropdown-menu-arrow profile">
|
<ul class="dropdown-menu dropdown-menu-end dropdown-menu-arrow profile">
|
||||||
<li class="dropdown-header">
|
<li class="dropdown-header">
|
||||||
<!-- Tampilkan role & email user yang sedang login -->
|
|
||||||
<h6>{{ $user ? ucfirst($user->role) : 'Guest' }}</h6>
|
<h6>{{ $user ? ucfirst($user->role) : 'Guest' }}</h6>
|
||||||
<span>{{ $user ? $user->email : 'No Email' }}</span>
|
<span>{{ $user ? $user->email : 'No Email' }}</span>
|
||||||
</li>
|
</li>
|
||||||
|
@ -53,10 +76,49 @@
|
||||||
<span>Sign Out</span>
|
<span>Sign Out</span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
</ul><!-- End Profile Dropdown Items -->
|
</ul><!-- End Profile Dropdown Items -->
|
||||||
</li><!-- End Profile Nav -->
|
</li><!-- End Profile Nav -->
|
||||||
</ul>
|
</ul>
|
||||||
</nav><!-- End Icons Navigation -->
|
</nav><!-- End Icons Navigation -->
|
||||||
|
|
||||||
</header><!-- End Header -->
|
</header><!-- End Header -->
|
||||||
|
|
||||||
|
<!-- CSS Styling -->
|
||||||
|
<style>
|
||||||
|
.info-card {
|
||||||
|
position: absolute;
|
||||||
|
top: 50px;
|
||||||
|
right: 70px;
|
||||||
|
display: none;
|
||||||
|
z-index: 999;
|
||||||
|
width: 220px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-card .card {
|
||||||
|
border-radius: 10px;
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<!-- JavaScript -->
|
||||||
|
<script>
|
||||||
|
document.addEventListener("DOMContentLoaded", function() {
|
||||||
|
const infoIcon = document.querySelector(".info-icon");
|
||||||
|
const infoCard = document.querySelector(".info-card");
|
||||||
|
|
||||||
|
infoIcon.addEventListener("click", function() {
|
||||||
|
if (infoCard.style.display === "none" || infoCard.style.display === "") {
|
||||||
|
infoCard.style.display = "block";
|
||||||
|
} else {
|
||||||
|
infoCard.style.display = "none";
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Klik di luar card untuk menutup
|
||||||
|
document.addEventListener("click", function(event) {
|
||||||
|
if (!infoIcon.contains(event.target) && !infoCard.contains(event.target)) {
|
||||||
|
infoCard.style.display = "none";
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
|
@ -38,14 +38,15 @@
|
||||||
<li class="nav-heading">Klasifikasi</li>
|
<li class="nav-heading">Klasifikasi</li>
|
||||||
|
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link {{ Route::is('examData') ? '' : 'collapsed' }}" href="{{ route('examData') }}">
|
<a class="nav-link {{ Route::is('trainData.show') ? '' : 'collapsed' }}"
|
||||||
|
href="{{ route('trainData.show') }}">
|
||||||
<i class='bx bx-data'></i>
|
<i class='bx bx-data'></i>
|
||||||
<span>Data Latih</span>
|
<span>Data Latih</span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link {{ Route::is('trainData') ? '' : 'collapsed' }}" href="{{ route('trainData') }}">
|
<a class="nav-link {{ Route::is('examData') ? '' : 'collapsed' }}" href="{{ route('examData') }}">
|
||||||
<i class='bx bx-test-tube'></i>
|
<i class='bx bx-test-tube'></i>
|
||||||
<span>Data Uji</span>
|
<span>Data Uji</span>
|
||||||
</a>
|
</a>
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
use App\Http\Controllers\SantriController;
|
use App\Http\Controllers\SantriController;
|
||||||
use App\Http\Controllers\HitungController;
|
use App\Http\Controllers\HitungController;
|
||||||
use App\Http\Controllers\MunaqosahController;
|
use App\Http\Controllers\MunaqosahController;
|
||||||
use App\Http\Controllers\ClassifiactionController;
|
use App\Http\Controllers\ClassificationController;
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
| Web Routes
|
| Web Routes
|
||||||
|
@ -67,10 +67,21 @@
|
||||||
->name('munaqosah.reject');
|
->name('munaqosah.reject');
|
||||||
Route::delete('/admin/munaqosah/{id}', [MunaqosahController::class, 'destroy'])
|
Route::delete('/admin/munaqosah/{id}', [MunaqosahController::class, 'destroy'])
|
||||||
->name('munaqosah.destroy');
|
->name('munaqosah.destroy');
|
||||||
Route::get('/admin/examData', [ClassifiactionController::class, 'examData'])
|
Route::post('/admin/trainData/import', [ClassificationController::class, 'importExcel'])->name('trainData.import');
|
||||||
|
Route::get(
|
||||||
|
'/admin/trainData/export',
|
||||||
|
[ClassificationController::class, 'exportExcel']
|
||||||
|
)->name('trainData.export');
|
||||||
|
Route::get(
|
||||||
|
'/admin/trainData',
|
||||||
|
[ClassificationController::class, 'showTrainData']
|
||||||
|
)->name('trainData.show');
|
||||||
|
Route::get('/admin/examData', [ClassificationController::class, 'examData'])
|
||||||
->name('examData');
|
->name('examData');
|
||||||
Route::get('/admin/trainData', [ClassifiactionController::class, 'trainData'])
|
Route::get('/admin/classificationResult', [ClassificationController::class, 'classificationResult'])
|
||||||
->name('trainData');
|
|
||||||
Route::get('/admin/classificationResult', [ClassifiactionController::class, 'classificationResult'])
|
|
||||||
->name('classificationResult');
|
->name('classificationResult');
|
||||||
|
Route::delete('/admin/trainData/{id}', [ClassificationController::class, 'deleteTrainData'])
|
||||||
|
->name('trainData.delete');
|
||||||
|
Route::post('/admin/trainData/reset', [ClassificationController::class, 'resetTrainData'])
|
||||||
|
->name('trainData.reset');
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue