MIF_E31221225/resources/views/guru/evaluasi/index.blade.php

265 lines
13 KiB
PHP

@extends('guru.layouts.app')
@section('title', 'Evaluasi Tugas dan Ujian')
@section('content')
<section class="section">
<div class="section-header">
<h1>Evaluasi</h1>
</div>
<div class="section-body">
@if (session('success'))
<div class="alert alert-success alert-dismissible fade show" role="alert">
{{ session('success') }}
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
@endif
@if ($errors->any())
<div class="alert alert-danger alert-dismissible fade show" role="alert">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
@endif
{{-- Form Pilih Kelas --}}
<form method="GET" action="{{ route('guru.evaluasi.index') }}" class="mb-4">
<div class="row align-items-end">
<div class="col-md-3">
<label for="kelas_id">Pilih Kelas</label>
<select name="kelas_id" id="kelas_id" class="form-control" required>
<option value="">-- Pilih --</option>
@foreach($daftarKelas as $kelas)
<option value="{{ $kelas->id }}" {{ request('kelas_id') == $kelas->id ? 'selected' : '' }}>
{{ $kelas->nama_kelas }} {{ $kelas->tingkat }}
</option>
@endforeach
</select>
</div>
<div class="col-md-2">
<button type="submit" class="btn btn-primary">Tampilkan</button>
</div>
</div>
</form>
@if($kelas_id)
{{-- Form Simpan Bobot --}}
<form action="{{ route('guru.evaluasi.simpanBobot') }}" method="POST" class="mb-4">
@csrf
<input type="hidden" name="kelas_id" value="{{ $kelas_id }}">
<div class="row align-items-end">
<div class="col-md-2">
<label>Bobot Tugas (%)</label>
<input type="number" name="bobot_tugas" class="form-control @error('bobot_tugas') is-invalid @enderror" value="{{ old('bobot_tugas', $bobot_tugas) }}" min="0" max="100" required>
@error('bobot_tugas')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="col-md-2">
<label>Bobot Ujian (%)</label>
<input type="number" name="bobot_ujian" class="form-control @error('bobot_ujian') is-invalid @enderror" value="{{ old('bobot_ujian', $bobot_ujian) }}" min="0" max="100" required>
@error('bobot_ujian')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="col-md-2">
<label>Bobot Sikap (%)</label>
<input type="number" name="bobot_sikap" class="form-control @error('bobot_sikap') is-invalid @enderror" value="{{ old('bobot_sikap', $bobot_sikap) }}" min="0" max="100" required>
@error('bobot_sikap')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="col-md-3">
<button type="submit" class="btn btn-success">Simpan Bobot</button>
</div>
</div>
@error('bobot')
<div class="alert alert-danger mt-2">{{ $message }}</div>
@enderror
</form>
{{-- Form Simpan Nilai Sikap dan Tabel Rekap Nilai --}}
<form action="{{ route('guru.evaluasi.simpanNilaiSikap') }}" method="POST" class="mb-4">
@csrf
<input type="hidden" name="kelas_id" value="{{ $kelas_id }}">
<div class="card">
<div class="card-header d-flex justify-content-between align-items-center">
<h4>Rekap Nilai Siswa</h4>
<button type="submit" class="btn btn-success btn-sm">Simpan Nilai Sikap</button>
</div>
<div class="card-body p-0">
<div class="table-responsive">
<table class="table table-bordered table-striped m-0">
<thead>
<tr>
<th>Nama Siswa</th>
@foreach($mapelList as $mapel)
<th>{{ $mapel->nama_mapel }}</th>
@endforeach
<th>Nilai Sikap</th>
</tr>
</thead>
<tbody>
@forelse($siswaList as $siswa)
<tr>
<td>{{ $siswa->nama }}</td>
@foreach($mapelList as $mapel)
{{-- Pastikan nilai_total_per_mapel selalu ada untuk mapel ini, kalau tidak 0 --}}
<td>{{ number_format($siswa->nilai_total_per_mapel[$mapel->id] ?? 0, 2) }}</td>
@endforeach
<td>
{{-- Mengambil nilai sikap dari properti baru yang sudah diatur di controller --}}
<input type="number" name="nilai_sikap[{{ $siswa->id }}]"
value="{{ old('nilai_sikap.' . $siswa->id, $siswa->current_nilai_sikap ?? '') }}" {{-- KEY CHANGE HERE --}}
class="form-control @error('nilai_sikap.' . $siswa->id) is-invalid @enderror" step="0.01" min="0" max="100" required>
@error('nilai_sikap.' . $siswa->id)
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</td>
</tr>
@empty
<tr>
<td colspan="{{ count($mapelList) + 2 }}" class="text-center">Tidak ada siswa di kelas ini untuk tahun ajaran aktif.</td>
</tr>
@endforelse
</tbody>
</table>
</div>
</div>
</div>
</form>
{{-- Tombol Hitung Nilai Total --}}
<form action="{{ route('guru.evaluasi.hitungNilaiTotal') }}" method="POST" class="mb-4">
@csrf
<input type="hidden" name="kelas_id" value="{{ $kelas_id }}">
<button type="submit" class="btn btn-info">Hitung Ulang Semua Nilai Total</button>
</form>
{{-- Tab Menu --}}
<ul class="nav nav-tabs" id="evaluasiTab" role="tablist">
<li class="nav-item">
<a class="nav-link active" id="tugas-tab" data-toggle="tab" href="#tugas" role="tab" aria-controls="tugas" aria-selected="true">Tugas</a>
</li>
<li class="nav-item">
<a class="nav-link" id="ujian-tab" data-toggle="tab" href="#ujian" role="tab" aria-controls="ujian" aria-selected="false">Ujian</a>
</li>
</ul>
{{-- Tab Content --}}
<div class="tab-content mt-4" id="evaluasiTabContent">
{{-- Tab Tugas --}}
<div class="tab-pane fade show active" id="tugas" role="tabpanel" aria-labelledby="tugas-tab">
<div class="card">
<div class="card-header">
<h4>Daftar Tugas yang Sudah Dinilai (Tahun Ajaran Aktif)</h4>
</div>
<div class="card-body p-0">
<div class="table-responsive">
<table class="table table-bordered table-striped m-0">
<thead>
<tr>
<th>Judul Tugas</th>
<th>Mata Pelajaran</th>
<th>Jumlah Pengumpulan</th>
<th>Aksi</th>
</tr>
</thead>
<tbody>
@forelse($tugasList as $tugas)
<tr>
<td>{{ $tugas->judul }}</td>
<td>{{ $tugas->materi->mapel->nama_mapel ?? '-' }}</td>
<td>{{ $tugas->pengumpulan_count }}</td>
<td>
<a href="{{ route('guru.tugas.penilaian', $tugas->id) }}" class="btn btn-primary btn-sm">Lihat Penilaian</a>
</td>
</tr>
@empty
<tr>
<td colspan="4" class="text-center">Belum ada tugas di tahun ajaran aktif ini.</td>
</tr>
@endforelse
</tbody>
</table>
</div>
</div>
</div>
</div>
{{-- Tab Ujian --}}
<div class="tab-pane fade" id="ujian" role="tabpanel" aria-labelledby="ujian-tab">
<div class="card">
<div class="card-header">
<h4>Daftar Ujian yang Sudah Selesai (Tahun Ajaran Aktif)</h4>
</div>
<div class="card-body p-0">
<div class="table-responsive">
<table class="table table-bordered table-striped m-0">
<thead>
<tr>
<th>Judul Ujian</th>
<th>Jumlah Peserta</th>
<th>Aksi</th>
</tr>
</thead>
<tbody>
@forelse($ujianList as $ujian)
<tr>
<td>{{ $ujian->judul }}</td>
{{-- Menampilkan jumlah peserta dari hasilUjian yang sudah difilter --}}
<td>{{ $ujian->hasilUjian->count() }}</td>
<td>
<a href="{{ route('guru.ujian.hasil', $ujian->id) }}" class="btn btn-primary btn-sm">Lihat Hasil</a>
</td>
</tr>
@empty
<tr>
<td colspan="3" class="text-center">Belum ada ujian yang selesai di tahun ajaran aktif ini.</td>
</tr>
@endforelse
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
@else
<div class="alert alert-info">Silakan pilih kelas terlebih dahulu untuk melihat dan mengelola evaluasi.</div>
@endif
</div>
</section>
@endsection
@section('scripts')
<script>
$(document).ready(function () {
// Handle tab switching
$('#evaluasiTab a').on('click', function (e) {
e.preventDefault();
$(this).tab('show');
});
// Set active tab on page load if previous tab was active
const activeTab = localStorage.getItem('activeEvaluasiTab');
if (activeTab) {
$(`#evaluasiTab a[href="${activeTab}"]`).tab('show');
}
// Save active tab to local storage on click
$('#evaluasiTab a').on('shown.bs.tab', function (e) {
localStorage.setItem('activeEvaluasiTab', $(e.target).attr('href'));
});
});
</script>
@endsection