From 4156ebe873f5f8ac4777739b3b05692bc422a0f7 Mon Sep 17 00:00:00 2001 From: Sallu9007 Date: Sun, 27 Apr 2025 17:43:27 +0530 Subject: [PATCH] Feat: implement Chart Js for analytics --- app/Http/Controllers/AdminController.php | 139 ++++++- resources/views/admin/dashboard.blade.php | 476 +++++++++++++++++++++- routes/web.php | 13 +- 3 files changed, 608 insertions(+), 20 deletions(-) diff --git a/app/Http/Controllers/AdminController.php b/app/Http/Controllers/AdminController.php index d9b11dd..e807fcc 100644 --- a/app/Http/Controllers/AdminController.php +++ b/app/Http/Controllers/AdminController.php @@ -2,13 +2,16 @@ namespace App\Http\Controllers; -namespace App\Http\Controllers; - -use Illuminate\Http\Request; -use Yajra\DataTables\Facades\DataTables; use App\Models\ActivitiesAttended; +use App\Models\ActivitiesOrganised; +use App\Models\BooksPublished; use App\Models\Department; -use Illuminate\Support\Facades\Storage; +use App\Models\ExternalEngagement; +use App\Models\IvOrganised; +use App\Models\OnlineCourse; +use App\Models\Patent; +use App\Models\Publication; +use Illuminate\Http\Request; class AdminController extends Controller { @@ -52,4 +55,130 @@ class AdminController extends Controller { return view('pages.patents.index'); } + public function analyticsActivitiesAttended() + { + $data = ActivitiesAttended::selectRaw('departments.name as department, COUNT(*) as count') + ->join('departments', 'activities_attendeds.department_id', '=', 'departments.id') + ->groupBy('departments.name') + ->get(); + + $total = $data->sum('count'); + + return response()->json([ + 'labels' => $data->pluck('department'), + 'values' => $data->pluck('count'), + 'total' => $total, + ]); + } + + public function analyticsActivitiesOrganised() + { + $data = ActivitiesOrganised::selectRaw('departments.name as department, COUNT(*) as count') + ->join('departments', 'activities_organiseds.department_id', '=', 'departments.id') + ->groupBy('departments.name') + ->get(); + + $total = $data->sum('count'); + + return response()->json([ + 'labels' => $data->pluck('department'), + 'values' => $data->pluck('count'), + 'total' => $total, + ]); + } + + public function analyticsIvOrganised() + { + $data = IvOrganised::selectRaw('departments.name as department, COUNT(*) as count') + ->join('departments', 'iv_organiseds.department_id', '=', 'departments.id') + ->groupBy('departments.name') + ->get(); + + $total = $data->sum('count'); + + return response()->json([ + 'labels' => $data->pluck('department'), + 'values' => $data->pluck('count'), + 'total' => $total, + ]); + } + + public function analyticsPaperPublished() + { + $data = Publication::selectRaw('departments.name as department, COUNT(*) as count') + ->join('departments', 'publications.department_id', '=', 'departments.id') + ->groupBy('departments.name') + ->get(); + + $total = $data->sum('count'); + + return response()->json([ + 'labels' => $data->pluck('department'), + 'values' => $data->pluck('count'), + 'total' => $total, + ]); + } + + public function analyticsBooksPublished() + { + $data = BooksPublished::selectRaw('departments.name as department, COUNT(*) as count') + ->join('departments', 'books_published.department_id', '=', 'departments.id') + ->groupBy('departments.name') + ->get(); + + $total = $data->sum('count'); + + return response()->json([ + 'labels' => $data->pluck('department'), + 'values' => $data->pluck('count'), + 'total' => $total, + ]); + } + + public function analyticsExternalEngagement() + { + $data = ExternalEngagement::selectRaw('departments.name as department, COUNT(*) as count') + ->join('departments', 'external_engagements.department_id', '=', 'departments.id') + ->groupBy('departments.name') + ->get(); + + $total = $data->sum('count'); + + return response()->json([ + 'labels' => $data->pluck('department'), + 'values' => $data->pluck('count'), + 'total' => $total, + ]); + } + + public function analyticsOnlineCourse() + { + $data = OnlineCourse::selectRaw('departments.name as department, COUNT(*) as count') + ->join('departments', 'online_courses.department_id', '=', 'departments.id') + ->groupBy('departments.name') + ->get(); + + $total = $data->sum('count'); + + return response()->json([ + 'labels' => $data->pluck('department'), + 'values' => $data->pluck('count'), + 'total' => $total, + ]); + } + public function analyticsPatent() + { + $data = Patent::selectRaw('departments.name as department, COUNT(*) as count') + ->join('departments', 'patents.department_id', '=', 'departments.id') + ->groupBy('departments.name') + ->get(); + + $total = $data->sum('count'); + + return response()->json([ + 'labels' => $data->pluck('department'), + 'values' => $data->pluck('count'), + 'total' => $total, + ]); + } } diff --git a/resources/views/admin/dashboard.blade.php b/resources/views/admin/dashboard.blade.php index f76671f..76c02d6 100644 --- a/resources/views/admin/dashboard.blade.php +++ b/resources/views/admin/dashboard.blade.php @@ -1,23 +1,471 @@ @extends('layouts.app') @section('header') -

- Admin Dashboard -

+

+ Admin Dashboard +

@endsection @section('content') -
-
-
- Welcome, Admin! Here you can manage roles, users, and departments. -
-
-
- Manage Roles
- Manage Departments
- Manage Users
- Edit Profile +
+
+
+ Welcome, Admin! Here you can manage roles, users, and departments.
+ + +
+

Analytics

+
+
+

Activities Attended by Department

+ +
+
+

Activities Organised by Department

+ +
+
+

Iv Organised by Department

+ +
+
+

Publications by Department

+ +
+
+

Books Published by Department

+ +
+
+

External Engagement by Department

+ +
+
+

Online Course by Department

+ +
+
+

Patents by Department

+ +
+ +
+
+
@endsection + + + +@section('scripts') + + +@endsection \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index a201e87..b373b9b 100644 --- a/routes/web.php +++ b/routes/web.php @@ -20,7 +20,7 @@ use App\Http\Controllers\PublicationsController; use App\Http\Middleware\CheckRole; Route::get('/', function () { - return view('welcome'); + return redirect('/login'); }); Route::get('/dashboard', function () { @@ -272,3 +272,14 @@ Route::apiResources([ Route::get('/api/users', [UserController::class, 'index'])->name('api.users.index'); require __DIR__ . '/auth.php'; + +Route::prefix('admin')->name('admin.')->group(function () { + Route::get('analytics/activitiesAttended', [AdminController::class, 'analyticsActivitiesAttended'])->name('analytics.activitiesAttended'); + Route::get('analytics/activitiesOrganised', [AdminController::class, 'analyticsActivitiesOrganised'])->name('analytics.activitiesOrganised'); + Route::get('analytics/ivOrganised', [AdminController::class, 'analyticsIvOrganised'])->name('analytics.ivOrganised'); + Route::get('analytics/paperPublished', [AdminController::class, 'analyticsPaperPublished'])->name('analytics.paperPublished'); + Route::get('analytics/booksPublished', [AdminController::class, 'analyticsBooksPublished'])->name('analytics.booksPublished'); + 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'); +});