265 lines
13 KiB
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">×</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">×</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 |