Feat: Add Year filter to graphs and remove all the not needed graphs
This commit is contained in:
@@ -19,7 +19,20 @@ class AdminController extends Controller
|
||||
public function index()
|
||||
{
|
||||
$departments = Department::all();
|
||||
return view('admin.dashboard', compact('departments'));
|
||||
|
||||
// Collect distinct years from all relevant date fields
|
||||
$years = collect([
|
||||
ActivitiesAttended::selectRaw('YEAR(end_date) as year')->distinct()->pluck('year'),
|
||||
ActivitiesOrganised::selectRaw('YEAR(end_date) as year')->distinct()->pluck('year'),
|
||||
BooksPublished::selectRaw('YEAR(date_of_publication) as year')->distinct()->pluck('year'),
|
||||
ExternalEngagement::selectRaw('YEAR(end_date) as year')->distinct()->pluck('year'),
|
||||
IvOrganised::selectRaw('YEAR(end_date) as year')->distinct()->pluck('year'),
|
||||
OnlineCourse::selectRaw('YEAR(end_date) as year')->distinct()->pluck('year'),
|
||||
Patent::selectRaw('YEAR(date_of_submission) as year')->distinct()->pluck('year'),
|
||||
Publication::selectRaw('YEAR(end_date) as year')->distinct()->pluck('year'),
|
||||
])->flatten()->unique()->sortDesc();
|
||||
|
||||
return view('admin.dashboard', compact('departments', 'years'));
|
||||
}
|
||||
|
||||
// View responses submitted by users
|
||||
@@ -186,30 +199,37 @@ class AdminController extends Controller
|
||||
public function analyticsComparison(Request $request)
|
||||
{
|
||||
$departmentId = $request->query('department_id');
|
||||
$year = $request->query('year');
|
||||
|
||||
$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,
|
||||
'ActivitiesAttended' => ['class' => ActivitiesAttended::class, 'date_field' => 'end_date'],
|
||||
'ActivitiesOrganised' => ['class' => ActivitiesOrganised::class, 'date_field' => 'end_date'],
|
||||
'BooksPublished' => ['class' => BooksPublished::class, 'date_field' => 'date_of_publication'],
|
||||
'ExternalEngagement' => ['class' => ExternalEngagement::class, 'date_field' => 'end_date'],
|
||||
'IvOrganised' => ['class' => IvOrganised::class, 'date_field' => 'end_date'],
|
||||
'OnlineCourse' => ['class' => OnlineCourse::class, 'date_field' => 'end_date'],
|
||||
'Patent' => ['class' => Patent::class, 'date_field' => 'date_of_submission'],
|
||||
'Publication' => ['class' => Publication::class, 'date_field' => 'end_date'],
|
||||
];
|
||||
|
||||
$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'));
|
||||
|
||||
foreach ($models as $label => $modelConfig) {
|
||||
$query = $modelConfig['class']::where('department_id', $departmentId);
|
||||
if ($year && $year !== 'all') {
|
||||
$query->whereYear($modelConfig['date_field'], $year);
|
||||
}
|
||||
$count = $query->count();
|
||||
if ($count > 0) { // Only include data with non-zero 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'),
|
||||
@@ -220,16 +240,17 @@ class AdminController extends Controller
|
||||
public function analyticsContribution(Request $request)
|
||||
{
|
||||
$model = $request->query('model', 'all');
|
||||
$year = $request->query('year');
|
||||
|
||||
$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,
|
||||
'ActivitiesAttended' => ['class' => ActivitiesAttended::class, 'date_field' => 'end_date'],
|
||||
'ActivitiesOrganised' => ['class' => ActivitiesOrganised::class, 'date_field' => 'end_date'],
|
||||
'BooksPublished' => ['class' => BooksPublished::class, 'date_field' => 'date_of_publication'],
|
||||
'ExternalEngagement' => ['class' => ExternalEngagement::class, 'date_field' => 'end_date'],
|
||||
'IvOrganised' => ['class' => IvOrganised::class, 'date_field' => 'end_date'],
|
||||
'OnlineCourse' => ['class' => OnlineCourse::class, 'date_field' => 'end_date'],
|
||||
'Patent' => ['class' => Patent::class, 'date_field' => 'date_of_submission'],
|
||||
'Publication' => ['class' => Publication::class, 'date_field' => 'end_date'],
|
||||
];
|
||||
|
||||
$data = [];
|
||||
@@ -239,25 +260,37 @@ class AdminController extends Controller
|
||||
|
||||
foreach ($departments as $department) {
|
||||
$count = 0;
|
||||
foreach ($models as $modelClass) {
|
||||
$count += $modelClass::where('department_id', $department->id)->count();
|
||||
foreach ($models as $modelConfig) {
|
||||
$query = $modelConfig['class']::where('department_id', $department->id);
|
||||
if ($year && $year !== 'all') {
|
||||
$query->whereYear($modelConfig['date_field'], $year);
|
||||
}
|
||||
$count += $query->count();
|
||||
}
|
||||
if ($count > 0) { // Only include data with non-zero count
|
||||
$data[] = [
|
||||
'label' => $department->name,
|
||||
'count' => $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')
|
||||
$modelConfig = $models[$model];
|
||||
$query = $modelConfig['class']::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'));
|
||||
->groupBy('departments.name');
|
||||
|
||||
if ($year && $year !== 'all') {
|
||||
$query->whereYear($modelConfig['date_field'], $year);
|
||||
}
|
||||
|
||||
$data = $query->get()->filter(function ($item) {
|
||||
return $item['count'] > 0; // Filter out data with zero count
|
||||
})->toArray();
|
||||
}
|
||||
|
||||
$total = array_sum(array_column($data, 'count'));
|
||||
|
||||
return response()->json([
|
||||
'labels' => array_column($data, 'label'),
|
||||
'values' => array_column($data, 'count'),
|
||||
|
||||
Reference in New Issue
Block a user