academy/app/Http/Controllers/AdminResultsController.php

100 lines
3.7 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Result;
use App\Imports\ResultsImport;
use Maatwebsite\Excel\Facades\Excel;
class AdminResultsController extends Controller
{
public function index(Request $request)
{
$query = Result::query();
// 1. Student Log ID, Module Code, හෝ Module Name මගින් Search කිරීම
if ($request->filled('search')) {
$search = $request->search;
$query->where(function ($q) use ($search) {
$q->where('student_log_id', 'like', "%{$search}%")
->orWhere('module_code', 'like', "%{$search}%")
->orWhere('module_name', 'like', "%{$search}%");
});
}
// 2. Academic Year මගින් Filter කිරීම
if ($request->filled('academic_year')) {
$query->where('academic_year', 'like', "%{$request->academic_year}%");
}
// 3. Pass/Fail Status මගින් Filter කිරීම
if ($request->filled('status')) {
$query->where('status', $request->status);
}
// Filter වූ Data Pagination (පිටුවකට 15 බැගින්) සමග ලබා ගැනීම
// (Pagination අවශ්‍ය නැතිනම් ->paginate(15) වෙනුවට ->get() භාවිතා කරන්න)
$results = $query->orderBy('id', 'desc')->paginate(15)->withQueryString();
return view('admin.adminresults', compact('results'));
}
public function store(Request $request)
{
$validated = $request->validate([
'student_log_id' => 'required|string|max:255',
'module_code' => 'required|string|max:255',
'module_name' => 'required|string|max:255',
'academic_year' => 'required|string|max:255',
'semester' => 'required|string|max:255',
'marks' => 'required|numeric|min:0|max:100',
'grade' => 'required|string|max:10',
'status' => 'required|in:Pass,Fail',
]);
Result::create($validated);
return redirect()->route('admin.results')->with('success', 'Exam result added successfully.');
}
public function update(Request $request, $id)
{
$validated = $request->validate([
'student_log_id' => 'required|string|max:255',
'module_code' => 'required|string|max:255',
'module_name' => 'required|string|max:255',
'academic_year' => 'required|string|max:255',
'semester' => 'required|string|max:255',
'marks' => 'required|numeric|min:0|max:100',
'grade' => 'required|string|max:10',
'status' => 'required|in:Pass,Fail',
]);
$result = Result::findOrFail($id);
$result->update($validated);
return redirect()->route('admin.results')->with('success', 'Exam result updated successfully.');
}
public function destroy($id)
{
$result = Result::findOrFail($id);
$result->delete();
return redirect()->route('admin.results')->with('success', 'Exam result deleted successfully.');
}
public function import(Request $request)
{
$request->validate([
'excel_file' => 'required|mimes:xlsx,xls,csv|max:2048'
]);
// Excel file එක Import කිරීම
Excel::import(new ResultsImport, $request->file('excel_file'));
// Upload වූ පසු කෙලින්ම Admin Results Table එකට Redirect කිරීම
return redirect()->route('admin.results')->with('success', 'Excel file imported successfully!');
}
}