From 41934b31fc12dd842f3f8cd291bf136e39ddb80f Mon Sep 17 00:00:00 2001 From: imadhigp Date: Wed, 5 Aug 2026 10:21:54 +0530 Subject: [PATCH] set result and timetable pages --- app/Http/Controllers/ResultsController.php | 35 ++ app/Http/Controllers/TimetableController.php | 54 +++ app/Models/Result.php | 25 ++ app/Models/Timetable.php | 22 ++ ...2026_08_04_052344_create_results_table.php | 35 ++ ...6_08_05_044438_create_timetables_table.php | 33 ++ resources/views/results.blade.php | 347 ++++++++++-------- resources/views/timetable.blade.php | 178 ++++----- routes/web.php | 33 +- 9 files changed, 494 insertions(+), 268 deletions(-) create mode 100644 app/Http/Controllers/ResultsController.php create mode 100644 app/Http/Controllers/TimetableController.php create mode 100644 app/Models/Result.php create mode 100644 app/Models/Timetable.php create mode 100644 database/migrations/2026_08_04_052344_create_results_table.php create mode 100644 database/migrations/2026_08_05_044438_create_timetables_table.php diff --git a/app/Http/Controllers/ResultsController.php b/app/Http/Controllers/ResultsController.php new file mode 100644 index 0000000..9440ca1 --- /dev/null +++ b/app/Http/Controllers/ResultsController.php @@ -0,0 +1,35 @@ +with('error', 'Please login first!'); + } + + // 2. Log වී සිටින Student ගේ student_log_id එකට අදාළව දත්ත ලබා ගැනීම + $results = Result::where('student_log_id', $studentLogId)->get(); + + // 3. Calculations + $totalModules = $results->count(); + + $passedModules = $results->filter(function ($item) { + return strtolower(trim($item->status)) === 'pass'; + })->count(); + + $averageMarks = $totalModules > 0 ? round($results->avg('marks'), 1) : 0; + + // View එකට Data Pass කිරීම + return view('results', compact('results', 'totalModules', 'passedModules', 'averageMarks')); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/TimetableController.php b/app/Http/Controllers/TimetableController.php new file mode 100644 index 0000000..8638320 --- /dev/null +++ b/app/Http/Controllers/TimetableController.php @@ -0,0 +1,54 @@ +with('error', 'Please login first!'); + } + + // 1. All Timetable Records Get + // (තනි Student ට අදාළ දත්ත හෝ පොදු Timetable දත්ත) + $rawTimetables = Timetable::whereNull('student_log_id') + ->orWhere('student_log_id', $studentLogId) + ->orderBy('sort_order', 'asc') + ->get(); + + // Data එක Table එකට ලෙහෙසියෙන් Group කර ගැනීම + // Array structure: $schedule[TimeSlot][Day] = Item + $schedule = []; + $timeSlots = []; + + foreach ($rawTimetables as $item) { + if (!in_array($item->time_slot, $timeSlots)) { + $timeSlots[] = $item->time_slot; + } + $schedule[$item->time_slot][$item->day] = $item; + } + + // 2. Today's Schedule (අද දවසේ පන්ති පමණක් ලබා ගැනීම) + $todayName = Carbon::now()->format('l'); // Monday, Tuesday etc. + $todaySchedule = Timetable::where('day', $todayName) + ->where(function($q) use ($studentLogId) { + $q->whereNull('student_log_id') + ->orWhere('student_log_id', $studentLogId); + }) + ->where('type', '!=', 'Break') + ->orderBy('sort_order', 'asc') + ->get(); + + $days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']; + + return view('timetable', compact('schedule', 'timeSlots', 'days', 'todaySchedule', 'todayName')); + } +} \ No newline at end of file diff --git a/app/Models/Result.php b/app/Models/Result.php new file mode 100644 index 0000000..12a4859 --- /dev/null +++ b/app/Models/Result.php @@ -0,0 +1,25 @@ +id(); + $table->foreignId('student_log_id')->constrained('student_portal_logs')->onDelete('cascade'); + $table->string('module_code'); + $table->string('academic_year'); + $table->string('semester'); + $table->string('module_name'); + $table->integer('marks'); + $table->string('grade'); // e.g., 'A+', 'A', 'B', 'C', 'F' + $table->string('status')->default('Pass'); // 'Pass' or 'Fail' + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('results'); + } +}; diff --git a/database/migrations/2026_08_05_044438_create_timetables_table.php b/database/migrations/2026_08_05_044438_create_timetables_table.php new file mode 100644 index 0000000..3c1adaf --- /dev/null +++ b/database/migrations/2026_08_05_044438_create_timetables_table.php @@ -0,0 +1,33 @@ +id(); + $table->unsignedBigInteger('student_log_id')->nullable(); // Student-specific Timetable එකක් නම් + $table->string('time_slot'); + $table->string('day'); + $table->string('subject_name'); + $table->enum('type', ['Theory', 'Practical', 'Workshop', 'Break'])->default('Theory'); + $table->integer('sort_order')->default(1); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('timetables'); + } +}; diff --git a/resources/views/results.blade.php b/resources/views/results.blade.php index 47914b3..795fa6c 100644 --- a/resources/views/results.blade.php +++ b/resources/views/results.blade.php @@ -13,6 +13,9 @@ + + +