From 75f40b7147c36f96a90e5d58e46ae3ee69183cec Mon Sep 17 00:00:00 2001 From: Sallu9007 Date: Sun, 27 Apr 2025 18:57:12 +0530 Subject: [PATCH] Feat: Add global Graphs --- app/Http/Controllers/AdminController.php | 85 ++++++++- resources/views/admin/dashboard.blade.php | 210 +++++++++++++++++++++- routes/web.php | 4 + 3 files changed, 289 insertions(+), 10 deletions(-) diff --git a/app/Http/Controllers/AdminController.php b/app/Http/Controllers/AdminController.php index e807fcc..7855e3e 100644 --- a/app/Http/Controllers/AdminController.php +++ b/app/Http/Controllers/AdminController.php @@ -18,7 +18,8 @@ class AdminController extends Controller // Admin dashboard (optional) public function index() { - return view('admin.dashboard'); + $departments = Department::all(); + return view('admin.dashboard', compact('departments')); } // View responses submitted by users @@ -181,4 +182,86 @@ class AdminController extends Controller 'total' => $total, ]); } + + public function analyticsComparison(Request $request) + { + $departmentId = $request->query('department_id'); + + $models = [ + 'ActivitiesAttended' => ActivitiesAttended::class, + 'ActivitiesOrganised' => ActivitiesOrganised::class, + 'BooksPublished' => BooksPublished::class, + 'ExternalEngagement' => ExternalEngagement::class, + 'IvOrganised' => IvOrganised::class, + 'OnlineCourse' => OnlineCourse::class, + 'Patent' => Patent::class, + 'Publication' => Publication::class, + ]; + + $data = []; + + foreach ($models as $label => $model) { + $count = $model::where('department_id', $departmentId)->count(); + $data[] = [ + 'label' => $label, + 'count' => $count, + ]; + $total = array_sum(array_column($data, 'count')); + + } + + return response()->json([ + 'labels' => array_column($data, 'label'), + 'values' => array_column($data, 'count'), + 'total' => $total + ]); + } + + public function analyticsContribution(Request $request) + { + $model = $request->query('model', 'all'); + + $models = [ + 'ActivitiesAttended' => ActivitiesAttended::class, + 'ActivitiesOrganised' => ActivitiesOrganised::class, + 'BooksPublished' => BooksPublished::class, + 'ExternalEngagement' => ExternalEngagement::class, + 'IvOrganised' => IvOrganised::class, + 'OnlineCourse' => OnlineCourse::class, + 'Patent' => Patent::class, + 'Publication' => Publication::class, + ]; + + $data = []; + + if ($model === 'all') { + $departments = Department::all(); + + foreach ($departments as $department) { + $count = 0; + foreach ($models as $modelClass) { + $count += $modelClass::where('department_id', $department->id)->count(); + } + $data[] = [ + 'label' => $department->name, + 'count' => $count, + ]; + $total = array_sum(array_column($data, 'count')); + } + } else { + $modelClass = $models[$model]; + $data = $modelClass::selectRaw('departments.name as label, COUNT(*) as count') + ->join('departments', 'department_id', '=', 'departments.id') + ->groupBy('departments.name') + ->get() + ->toArray(); + $total = array_sum(array_column($data, 'count')); + } + + return response()->json([ + 'labels' => array_column($data, 'label'), + 'values' => array_column($data, 'count'), + 'total' => $total + ]); + } } diff --git a/resources/views/admin/dashboard.blade.php b/resources/views/admin/dashboard.blade.php index 76c02d6..b8cd3df 100644 --- a/resources/views/admin/dashboard.blade.php +++ b/resources/views/admin/dashboard.blade.php @@ -18,39 +18,71 @@

Analytics

+ +
+

Comparison of All Models by Department

+ + +
+ +
+

Total Contribution by Department

+ + +

Activities Attended by Department

-
+ + + -
+ -
+ -
+ -
+ -
+ -
+ - +
+ + +
+
@@ -65,9 +97,158 @@ --> @section('scripts') - @endsection \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index b373b9b..60f1999 100644 --- a/routes/web.php +++ b/routes/web.php @@ -128,6 +128,7 @@ Route::middleware(['auth', CheckRole::class . ':Admin'])->group(function () { Route::get('/admin/Patents/{id}/edit', [PatentsController::class, 'edit'])->name('admin.Patents.edit'); Route::put('/admin/Patents/{id}', [PatentsController::class, 'update'])->name('admin.Patents.update'); Route::delete('/admin/Patents/{id}', [PatentsController::class, 'destroy'])->name('admin.Patents.destroy'); + }); // Coordinator routes @@ -282,4 +283,7 @@ Route::prefix('admin')->name('admin.')->group(function () { Route::get('analytics/externalEngagement', [AdminController::class, 'analyticsExternalEngagement'])->name('analytics.externalEngagement'); Route::get('analytics/onlineCourse', [AdminController::class, 'analyticsOnlineCourse'])->name('analytics.onlineCourse'); Route::get('analytics/patent', [AdminController::class, 'analyticsPatent'])->name('analytics.patent'); + + Route::get('analytics/comparison', [AdminController::class, 'analyticsComparison'])->name('analytics.comparison'); + Route::get('analytics/contribution', [AdminController::class, 'analyticsContribution'])->name('analytics.contribution'); });