diff --git a/app/Http/Controllers/AdminBackend/AdminPeriodController.php b/app/Http/Controllers/AdminBackend/AdminPeriodController.php new file mode 100644 index 0000000..4d49f9b --- /dev/null +++ b/app/Http/Controllers/AdminBackend/AdminPeriodController.php @@ -0,0 +1,81 @@ +id_periode) { + $selectPeriod->id_periode = 'Belum Ditambahkan'; + } else { + $checkPeriod = Periode::findOrFail($selectPeriod->id_periode); + if ($checkPeriod->semester == 1) { + $checkPeriod->semester = 'Ganjil'; + } else { + $checkPeriod->semester = 'Genap'; + } + $selectPeriod->id_periode = $checkPeriod->semester . ' ' . $checkPeriod->tahun; + } + + return view('admin_backend.admin_period', compact('periods', 'selectPeriod')); + } + + + public function store(Request $request) + { + $semester = $request->semester; + $tahunAwal = $request->tahun_awal; + $tahunAkhir = $request->tahun_akhir; + $tahun = $tahunAwal . '/' . $tahunAkhir; + $checkPeriod = Periode::where('semester', $semester)->where('tahun', $tahun)->count(); + if ($checkPeriod > 0) { + return redirect()->route('adminPeriod.index')->with('error', 'Gagal, periode yang anda buat sudah ada'); + } + if ($tahunAkhir - $tahunAwal != 1) { + return redirect()->route('adminPeriod.index')->with('error', 'Gagal, tahun yang anda masukkan tidak valid'); + } + Periode::create([ + 'semester' => $request->semester, + 'tahun' => $tahun + ]); + return redirect()->route('adminPeriod.index')->with('success', 'Periode semester baru berhasil dibuat'); + } + + + public function update(Request $request, $id) + { + $semester = $request->semester; + $tahunAwal = $request->tahun_awal; + $tahunAkhir = $request->tahun_akhir; + $tahun = $tahunAwal . '/' . $tahunAkhir; + $checkPeriod = Periode::where('semester', $semester)->where('tahun', $tahun)->count(); + if ($checkPeriod > 0) { + return redirect()->route('adminPeriod.index')->with('error', 'Gagal, periode yang anda buat sudah ada'); + } + if ($tahunAkhir - $tahunAwal != 1) { + return redirect()->route('adminPeriod.index')->with('error', 'Gagal, tahun yang anda masukkan tidak valid'); + } + $period = Periode::findOrFail($id); + $period->semester = $semester; + $period->tahun = $tahun; + $period->update(); + return redirect()->route('adminPeriod.index')->with('success', 'Periode tersebut telah diubah'); + } + + + public function destroy($id) + { + $period = Periode::findOrFail($id); + $period->delete(); + return redirect()->route('adminPeriod.index')->with('success', 'Periode tersebut telah dihapus'); + } +} diff --git a/app/Http/Controllers/AdminBackend/AdminResultController.php b/app/Http/Controllers/AdminBackend/AdminResultController.php new file mode 100644 index 0000000..f332264 --- /dev/null +++ b/app/Http/Controllers/AdminBackend/AdminResultController.php @@ -0,0 +1,14 @@ +id_periode; + $pilihPeriode = PilihPeriode::first(); + $pilihPeriode->id_periode = $id; + $pilihPeriode->aktif = '1'; + $pilihPeriode->update(); + return redirect()->route('adminPeriod.index')->with('success', 'Periode kuesioner telah diubah'); + } +} diff --git a/app/Http/Controllers/Backend/QuestionnaireController.php b/app/Http/Controllers/Backend/QuestionnaireController.php index 3148a4a..d0bdba1 100644 --- a/app/Http/Controllers/Backend/QuestionnaireController.php +++ b/app/Http/Controllers/Backend/QuestionnaireController.php @@ -3,12 +3,91 @@ namespace App\Http\Controllers\Backend; use App\Http\Controllers\Controller; +use App\Models\Hasil; +use App\Models\Kuesioner; +use App\Models\Periode; use Illuminate\Http\Request; class QuestionnaireController extends Controller { public function index() { - return view('backend.users_questionnaire'); + $kuesioners = Kuesioner::get(); + return view('backend.users_questionnaire', compact('kuesioners')); + } + + public function store(Request $request) + { + $idUser = auth()->user()->id; + + $lastPeriode = Periode::latest()->first(); + $periode = Hasil::where('id_user', $idUser)->where('id_periode', $lastPeriode)->count(); + if ($periode > 0) { + return redirect()->route('user.checkFilled')->with('error', 'Gagal, anda sudah pernah mengisikan kuesioner'); + } + $answer = []; // Array yang berisi data jawaban + + foreach ($request->id as $index => $id) { + $value = $request->input('optionsGroup' . $id); + $kategori = $request->input('kategori')[$index]; + + // Membuat array asosiatif dengan kategori + $answerItem = [ + 'id' => $id, + 'answer' => $value, + 'kategori' => $kategori, + ]; + + // Menambahkan array asosiatif ke dalam array $answer + $answer[] = $answerItem; + } + + // Menginisialisasi array untuk menyimpan total jawaban per kategori + $totalsPerGroup = array_fill(1, 8, 0); + + // Menghitung total jawaban untuk setiap kategori + foreach ($answer as $item) { + $kategori = $item['kategori']; + $totalsPerGroup[$kategori] += $item['answer']; + } + + $kmTotal = $totalsPerGroup[1] + $totalsPerGroup[2] + $totalsPerGroup[3]; + $kmClass = null; + if ($kmTotal >= 63) { + $kmClass = 'Tinggi'; + } else if ($kmTotal >= 42) { + $kmClass = 'Sedang'; + } else { + $kmClass = 'Rendah'; + } + + $rmTotal = $totalsPerGroup[4] + $totalsPerGroup[5] + $totalsPerGroup[6] + $totalsPerGroup[7] + $totalsPerGroup[8]; + $rmClass = null; + if ($rmTotal >= 63) { + $rmClass = 'Tinggi'; + } else if ($rmTotal >= 42) { + $rmClass = 'Sedang'; + } else { + $rmClass = 'Rendah'; + } + + Hasil::create([ + 'id_user' => $idUser, + 'id_periode' => 1, + 'declarative_knowledge' => $totalsPerGroup[1], + 'procedural_knowledge' => $totalsPerGroup[2], + 'conditional_knowledge' => $totalsPerGroup[3], + 'km_total' => $kmTotal, + 'km_class' => $kmClass, + 'planning' => $totalsPerGroup[4], + 'information_management' => $totalsPerGroup[5], + 'monitoring' => $totalsPerGroup[6], + 'debugging' => $totalsPerGroup[7], + 'evaluation' => $totalsPerGroup[8], + 'rm_total' => $rmTotal, + 'rm_class' => $rmClass, + ]); + + return $idUser; } } diff --git a/app/Models/Hasil.php b/app/Models/Hasil.php new file mode 100644 index 0000000..bf7c838 --- /dev/null +++ b/app/Models/Hasil.php @@ -0,0 +1,28 @@ +id(); + $table->integer('id', true); $table->integer('id_user'); + $table->integer('id_periode'); $table->integer('declarative_knowledge'); $table->integer('procedural_knowledge'); $table->integer('conditional_knowledge'); diff --git a/database/migrations/2023_10_03_120230_create_periode_table.php b/database/migrations/2023_10_03_120230_create_periode_table.php new file mode 100644 index 0000000..f0e85e7 --- /dev/null +++ b/database/migrations/2023_10_03_120230_create_periode_table.php @@ -0,0 +1,23 @@ +id(); // Kolom ID dengan tipe data INT dan Auto Increment + $table->enum('semester', ['1', '2'])->notNullable(); // Kolom ENUM untuk semester (1 atau 2) + $table->char('tahun', 9)->notNullable(); // Kolom CHAR untuk tahun (misalnya, "2021/2023") + $table->timestamps(); + }); + } + + public function down() + { + Schema::dropIfExists('periode'); + } +} diff --git a/database/migrations/2023_10_03_120608_add_id_periode_to_hasil.php b/database/migrations/2023_10_03_120608_add_id_periode_to_hasil.php new file mode 100644 index 0000000..194bd04 --- /dev/null +++ b/database/migrations/2023_10_03_120608_add_id_periode_to_hasil.php @@ -0,0 +1,29 @@ +foreign('id_periode')->references('id')->on('periode'); + $table->foreign(['id_periode'], 'produk_ibfk_2') + ->references(['id']) + ->on('periode') + ->onUpdate('CASCADE') + ->onDelete('CASCADE'); + }); + } + + public function down() + { + // Schema::table('hasil', function (Blueprint $table) { + // $table->dropForeign(['id_periode']); // Menghapus foreign key + // $table->dropColumn('id_periode'); // Menghapus kolom foreign key + // }); + } +} diff --git a/database/migrations/2023_10_04_013735_create_pilih_periode_table.php b/database/migrations/2023_10_04_013735_create_pilih_periode_table.php new file mode 100644 index 0000000..df4a1e9 --- /dev/null +++ b/database/migrations/2023_10_04_013735_create_pilih_periode_table.php @@ -0,0 +1,25 @@ +id(); + $table->unsignedBigInteger('id_periode'); + $table->enum('aktif', ['0', '1']); + + // Menambahkan foreign key constraint ke tabel periode + $table->foreign('id_periode')->references('id')->on('periode'); + }); + } + + public function down() + { + Schema::dropIfExists('pilih_periode'); + } +} diff --git a/public/admin_backend/assets/img/not_filled.png b/public/admin_backend/assets/img/not_filled.png new file mode 100644 index 0000000..0132dda Binary files /dev/null and b/public/admin_backend/assets/img/not_filled.png differ diff --git a/resources/views/admin_backend/admin_period.blade.php b/resources/views/admin_backend/admin_period.blade.php new file mode 100644 index 0000000..4204f80 --- /dev/null +++ b/resources/views/admin_backend/admin_period.blade.php @@ -0,0 +1,220 @@ +@extends('admin_backend/layouts.template') +@section('content') +
+
+ {{--! start header --}} +
+
+

Periode Tahun Ajar

+

Tambahkan periode pengajaran untuk membuka kembali kuesioner semester baru.

+
+
+ +
+
+ {{--! end header --}} + +
+
+
Periode Terpilih
+
{{ $selectPeriod->id_periode }}
+
+ + + + +
+
+
+ + {{--! start table --}} +
+
+ + + + + + + + + + @foreach ($periods as $index => $period) + + + + + + + + @endforeach + +
NOSEMESTERTAHUNACTIONPERIODE
{{ $index+1 }}{{ $period->semester == 1 ? 'Ganjil' : 'Genap' }}{{ $period->tahun }} + + +
+ @csrf + @method('DELETE') + +
+
+
+ @csrf + + +
+
+
+
+ {{--! end table --}} + + {{--! start modal create --}} +
+ @csrf + +
+ {{--! end modal create --}} + + {{--! start edit modal --}} +
+ @csrf + @method('PUT') + +
+ {{--! end edit modal --}} +
+
+@endsection + +@section('script') + +@endsection \ No newline at end of file diff --git a/resources/views/admin_backend/admin_questionnaire.blade.php b/resources/views/admin_backend/admin_questionnaire.blade.php index 76a052e..6476543 100644 --- a/resources/views/admin_backend/admin_questionnaire.blade.php +++ b/resources/views/admin_backend/admin_questionnaire.blade.php @@ -15,7 +15,7 @@ {{--! end header --}} {{--! start table --}} -
+
@@ -61,14 +61,14 @@
@@ -104,14 +104,14 @@
@@ -149,13 +149,14 @@ $('.delete-form').click(function(event){ event.preventDefault(); Swal.fire({ - title: 'Are you sure?', - text: "You won't be able to revert this!", + title: 'Yakin untuk dihapus?', + text: "Kamu tidak akan bisa mengembalikan ini!", icon: 'warning', showCancelButton: true, confirmButtonColor: '#dc3545', cancelButtonColor: '#6c757d', - confirmButtonText: 'Yes, delete it!', + confirmButtonText: 'Ya, hapus ini!', + cancelButtonText: 'Batalkan', reverseButtons: true }).then((result) => { if (result.isConfirmed) { diff --git a/resources/views/admin_backend/admin_result.blade.php b/resources/views/admin_backend/admin_result.blade.php new file mode 100644 index 0000000..1b5c7c9 --- /dev/null +++ b/resources/views/admin_backend/admin_result.blade.php @@ -0,0 +1,33 @@ +@extends('admin_backend/layouts.template') +@section('content') +
+
+

Hasil Kategori Metakognitif

+

Lorem ipsum dolor sit amet consectetur, adipisicing elit. Explicabo, tempora.

+
+
+
NOMOR
+ + + + + + + + + + + + + + + + +
NAMAANGKATANTANGGALHASILACTION
Fajar Gunawan2021Apr 23, 2023lorem ipsum
+
+ +@endsection + +@section('script') + +@endsection \ No newline at end of file diff --git a/resources/views/admin_backend/layouts/sidebar.blade.php b/resources/views/admin_backend/layouts/sidebar.blade.php index d9bfb57..3165f5e 100644 --- a/resources/views/admin_backend/layouts/sidebar.blade.php +++ b/resources/views/admin_backend/layouts/sidebar.blade.php @@ -20,12 +20,19 @@ + +
{{--! start fill --}} -
-
-
-

1.

-
-

Saya bertanya kepada diri sendiri, ”Apakah saya sudah mencapai tujuan saya?”, ketika sedang berupaya mencapai tujuan secara intensif.

+ + + @csrf + @foreach ($kuesioners as $index => $kuesioner) +
+ + +
+
+
+

{{ $index + 1 }}.

+
+

{{ $kuesioner->soal }}

- - - - - - - - - - - - - - - -
- Pertanyaan belum dijawab! + + + + + + + + + + + + + + + +
+ Pertanyaan belum dijawab! +
+
- - -
+ @endforeach
diff --git a/routes/web.php b/routes/web.php index 8944936..96e7478 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,5 +1,8 @@ names('userQuestionnaire'); + // hanya tampilan Route::get('instruction', function () { return view('backend.questionnaire_instructions'); })->name('user.instruction'); + Route::get('check-questionnaire', function () { + return view('backend.not_filled_questionnaire'); + })->name('user.checkFilled'); }); }); @@ -46,6 +53,10 @@ Route::resource('listuser', 'ListUserController')->names('adminListUser'); Route::resource('listadmin', 'ListAdminController')->names('adminListAdmin'); Route::resource('admin-questionnaire', 'AdminQuestionnaireController')->names('adminQuestionnaire'); + Route::resource('admin-result', 'AdminResultController')->names('adminResult'); + Route::resource('admin-period', 'AdminPeriodController')->names('adminPeriod'); + + Route::post('/select-period', [SelectPeriodController::class, 'update'])->name('adminSelectPeriod'); // Route::post('listuser', [UserController::class, 'store']); }); });