{{ __('Library Database Soal CBT') }}

Dashboard Review
@if(session('success'))
{{ session('success') }}
@endif @if(session('error'))
{{ session('error') }}
@endif
@php $totalQuestions = \App\Models\CbtQuestion::count(); // Menggunakan query sederhana berdasarkan kolom status di tabel cbt_questions $approvedQuestions = \App\Models\CbtQuestion::where('status', 'approved')->count(); $reviewQuestions = \App\Models\CbtQuestion::where('status', 'review')->count(); $draftQuestions = \App\Models\CbtQuestion::where('status', 'draft')->count(); $noStatusQuestions = \App\Models\CbtQuestion::whereNull('status')->orWhere('status', '')->count(); @endphp

Total Soal

{{ $totalQuestions }}

Approved

{{ $approvedQuestions }}

In Review

{{ $reviewQuestions }}

Draft

{{ $draftQuestions }}

No Status

{{ $noStatusQuestions }}

Reset

Daftar Soal CBT

@php // Get questions with filters using correct table relations $query = \App\Models\CbtQuestion::with('reviews'); if (request('search')) { $search = request('search'); $query->where(function($q) use ($search) { $q->where('question_code', 'like', "%{$search}%") ->orWhere('question', 'like', "%{$search}%") ->orWhere('author_name', 'like', "%{$search}%") ->orWhere('keywords', 'like', "%{$search}%"); }); } if (request('review_status')) { switch (request('review_status')) { case 'completed': $query->whereHas('reviews', function($q) { $q->where('status', 'completed'); }); break; case 'in_progress': $query->whereHas('reviews', function($q) { $q->where('status', 'in_progress'); }); break; case 'no_review': $query->whereDoesntHave('reviews'); break; case 'recommended': $query->whereHas('reviews', function($q) { $q->where('status', 'completed')->where('recommendation', 'approved'); }); break; } } if (request('department')) { $query->where('department', request('department')); } if (request('institution')) { $query->where('institution', request('institution')); } // Filter by status column if exists if (request('question_status')) { $query->where('status', request('question_status')); } // Sorting switch (request('sort', 'newest')) { case 'oldest': $query->orderBy('created_at', 'asc'); break; case 'code': $query->orderBy('question_code', 'asc'); break; case 'department': $query->orderBy('department', 'asc'); break; default: $query->orderBy('created_at', 'desc'); } $questions = $query->paginate(20); @endphp @forelse($questions as $question) @php $reviews = $question->reviews; // Menggunakan relasi yang benar $completedReviews = $reviews->where('status', 'completed'); $averageScores = []; // Calculate percentage of "ya" responses for key criteria $materialSkaiResponses = $completedReviews->pluck('q1_material_skai')->filter(); $practicalCaseResponses = $completedReviews->pluck('q2_practical_case')->filter(); $competencyResponses = $completedReviews->pluck('q3_competency_relevant')->filter(); $averageScores['Material'] = $materialSkaiResponses->count() > 0 ? round(($materialSkaiResponses->filter(fn($val) => $val === 'ya')->count() / $materialSkaiResponses->count()) * 100, 1) : null; $averageScores['Practical'] = $practicalCaseResponses->count() > 0 ? round(($practicalCaseResponses->filter(fn($val) => $val === 'ya')->count() / $practicalCaseResponses->count()) * 100, 1) : null; $averageScores['Competency'] = $competencyResponses->count() > 0 ? round(($competencyResponses->filter(fn($val) => $val === 'ya')->count() / $competencyResponses->count()) * 100, 1) : null; $totalAverage = array_filter($averageScores) ? round(array_sum(array_filter($averageScores)) / count(array_filter($averageScores)), 1) : 0; @endphp @empty @endforelse
Kode Soal Pembuat Departemen/Institusi Status Soal Status Review Recommendation Aksi
{{ $question->question_code }} ID: {{ $question->id }}
{{ $question->author_name }} {{ $question->institution_code }}
{{ $question->department }} @if($question->institution)
{{ $question->institution }}
@endif
@if($question->status === 'approved') ✅ Approved @elseif($question->status === 'review') 🔍 Review @elseif($question->status === 'draft') 📝 Draft @else ❓ Unknown @endif @if($completedReviews->count() > 0)
{{ $completedReviews->count() }} Review(s) @if($totalAverage > 0) ⭐ {{ $totalAverage }}% @endif
@foreach($averageScores as $aspect => $score) @if($score !== null)
{{ $score }}
{{ $aspect }}
@endif @endforeach
@elseif($reviews->count() > 0) 🔄 Review in Progress @else ⏳ No Reviews @endif
@php $approveRecommendations = $completedReviews->where('recommendation', 'approved')->count(); $reviseRecommendations = $completedReviews->where('recommendation', 'revise')->count(); $rejectRecommendations = $completedReviews->where('recommendation', 'reject')->count(); @endphp @if($completedReviews->count() > 0) @if($approveRecommendations > 0 && $approveRecommendations >= $reviseRecommendations && $approveRecommendations >= $rejectRecommendations) ✅ Recommended ({{ $approveRecommendations }}) @elseif($rejectRecommendations > 0 && $rejectRecommendations >= $approveRecommendations) ❌ Not Recommended ({{ $rejectRecommendations }}) @else ⚠️ Need Revision ({{ $reviseRecommendations }}) @endif @if($completedReviews->whereNotNull('overall_comments')->count() > 0)
📝 {{ $completedReviews->whereNotNull('overall_comments')->count() }} comment(s)
@endif @else ⏳ No Decision @endif

Tidak ada soal ditemukan

Coba ubah filter pencarian atau tambahkan soal baru.

@if($questions->hasPages())
{{ $questions->appends(request()->query())->links() }}
@endif