From 4352abdbd1eaadd64ba701caef24ab81abbe332e Mon Sep 17 00:00:00 2001 From: Sallu9007 Date: Mon, 24 Mar 2025 00:44:40 +0530 Subject: [PATCH] Feat: Activities Controller totally independent --- .../ActivitiesAttendedController.php | 184 ++++++++++++++++++ app/Http/Controllers/AdminController.php | 124 +----------- .../Controllers/CoordinatorController.php | 44 +---- app/Http/Controllers/FacultyController.php | 7 +- .../activities-attended/edit.blade.php | 5 +- .../index.blade.php} | 19 +- routes/web.php | 19 +- 7 files changed, 226 insertions(+), 176 deletions(-) create mode 100644 app/Http/Controllers/ActivitiesAttendedController.php rename resources/views/{admin => }/activities-attended/edit.blade.php (93%) rename resources/views/{admin/activities-attended-responses.blade.php => activities-attended/index.blade.php} (93%) diff --git a/app/Http/Controllers/ActivitiesAttendedController.php b/app/Http/Controllers/ActivitiesAttendedController.php new file mode 100644 index 0000000..5cb600b --- /dev/null +++ b/app/Http/Controllers/ActivitiesAttendedController.php @@ -0,0 +1,184 @@ +validate([ + 'title' => 'required|string', + 'organising_institute' => 'required|string', + 'address' => 'required|string', + 'start_date' => 'required|date', + 'start_time' => 'required|date_format:H:i', + 'end_date' => 'required|date', + 'end_time' => 'required|date_format:H:i', + 'num_days' => 'required|integer', + 'activity_type' => 'required|string', + 'category' => 'required|string', + 'level' => 'required|string', + 'proof' => 'nullable|mimes:jpg,jpeg,png,pdf,doc,docx,zip', + ]); + + // Combine start date and time + $startDateTime = date('Y-m-d H:i:s', strtotime("{$validated['start_date']} {$validated['start_time']}")); + $endDateTime = date('Y-m-d H:i:s', strtotime("{$validated['end_date']} {$validated['end_time']}")); + + // Handle the file upload if a new file is provided + if ($request->hasFile('proof')) { + // Delete old file if exists + if ($response->proof && Storage::disk('public')->exists($response->proof)) { + Storage::disk('public')->delete($response->proof); + } + + // Extract year from start_date + $year = date('Y', strtotime($validated['start_date'])); + $username = $response->user->name; + + $originalName = $request->file('proof')->getClientOriginalName(); + $fileName = $username . '_' . $originalName; + + // Create path structure: year/faculty_name + $folderPath = 'proofs/' . $year . '/' . $username; + + // Store file in the specified path + $proofPath = $request->file('proof')->storeAs($folderPath, $fileName, 'public'); + + $response->proof = $proofPath; + } + + // Update other fields + $response->title = $validated['title']; + $response->organising_institute = $validated['organising_institute']; + $response->address = $validated['address']; + $response->start_date = $startDateTime; + $response->end_date = $endDateTime; + $response->num_days = $validated['num_days']; + $response->activity_type = $validated['activity_type']; + $response->category = $validated['category']; + $response->level = $validated['level']; + + $response->save(); + + $userRole = auth()->user()->role->name; + // dd($userRole); + + if ($userRole === 'Admin') { + return redirect()->route('admin.ActivitiesAttendedResponses') + ->with('status', 'Response updated successfully'); + } elseif ($userRole === 'Coordinator') { + return redirect()->route('coordinator.ActivitiesAttendedResponses') + ->with('status', 'Response updated successfully'); + } else { + // For regular users + return redirect()->route('faculty.ActivitiesAttendedResponses') + ->with('status', 'Response updated successfully'); + } + // return redirect()->route('admin.ActivitiesAttendedResponses')->with('status', 'Response updated successfully'); + } + + public function destroy($id) + { + $response = ActivitiesAttended::findOrFail($id); + + // Delete the file if it exists + if ($response->proof && Storage::disk('public')->exists($response->proof)) { + Storage::disk('public')->delete($response->proof); + } + + $response->delete(); + + return response()->json(['success' => 'Record deleted successfully']); + } + + public function getActivitiesAttendedResponses() + { + $user = auth()->user(); + $isAdmin = $user->role->name === 'Admin'; + $isCoordinator = $user->role->name === 'Coordinator'; + + // Query based on role + if ($isAdmin) { + // Admin sees all records + $responses = ActivitiesAttended::with('user', 'department'); + } elseif ($isCoordinator) { + // Coordinator sees only their department's records + $responses = ActivitiesAttended::with('user', 'department') + ->whereHas('user', function ($query) use ($user) { + $query->where('department_id', $user->department_id); + }); + } else { + // Regular users see only their own records + $responses = ActivitiesAttended::with('user', 'department') + ->where('faculty_id', $user->id); + } + + return DataTables::of($responses) + ->addColumn('user_name', function ($response) { + return $response->user->name ?? 'Unknown'; + }) + ->addColumn('department_name', function ($response) { + return $response->department->name ?? 'Unknown'; + }) + ->addColumn('start_date', function ($response) { + return \Carbon\Carbon::parse($response->start_date)->format('d-m-Y'); + }) + ->addColumn('start_time', function ($response) { + return \Carbon\Carbon::parse($response->start_date)->format('h:i A'); + }) + ->addColumn('end_date', function ($response) { + return \Carbon\Carbon::parse($response->end_date)->format('d-m-Y'); + }) + ->addColumn('end_time', function ($response) { + return \Carbon\Carbon::parse($response->end_date)->format('h:i A'); + }) + ->addColumn('action', function ($response) { + $actions = []; + + // View proof button for everyone + if ($response->proof) { + $actions[] = 'View'; + } else { + $actions[] = 'No Proof'; + } + + // Edit button with role-appropriate route + $userRole = auth()->user()->role->name; + // Determine the appropriate route based on user role + if ($userRole === 'Admin') { + $editRoute = route('admin.ActivitiesAttended.edit', $response->id); + } elseif ($userRole === 'Coordinator') { + $editRoute = route('coordinator.ActivitiesAttended.edit', $response->id); + } else { + $editRoute = route('faculty.ActivitiesAttended.edit', $response->id); + } + + $actions[] = 'Edit'; + + $deleteRoute = route('activitiesAttended.destroy', $response->id); + $actions[] = ''; + + + return implode(' ', $actions); + }) + ->rawColumns(['action']) + ->make(true); + } +} diff --git a/app/Http/Controllers/AdminController.php b/app/Http/Controllers/AdminController.php index f1df43b..9fcccb9 100644 --- a/app/Http/Controllers/AdminController.php +++ b/app/Http/Controllers/AdminController.php @@ -20,127 +20,7 @@ class AdminController extends Controller // View responses submitted by users public function viewActivitiesAttendedResponses() { - return view('admin.activities-attended-responses'); - } - - public function edit($id) - { - $response = ActivitiesAttended::findOrFail($id); - return view('admin.activities-attended.edit', compact('response')); - } - - public function update(Request $request, $id) - { - $response = ActivitiesAttended::findOrFail($id); - - // Validate the request data - $validated = $request->validate([ - 'title' => 'required|string', - 'organising_institute' => 'required|string', - 'address' => 'required|string', - 'start_date' => 'required|date', - 'start_time' => 'required|date_format:H:i', - 'end_date' => 'required|date', - 'end_time' => 'required|date_format:H:i', - 'num_days' => 'required|integer', - 'activity_type' => 'required|string', - 'category' => 'required|string', - 'level' => 'required|string', - 'proof' => 'nullable|mimes:jpg,jpeg,png,pdf,doc,docx,zip', - ]); - - // Combine start date and time - $startDateTime = date('Y-m-d H:i:s', strtotime("{$validated['start_date']} {$validated['start_time']}")); - $endDateTime = date('Y-m-d H:i:s', strtotime("{$validated['end_date']} {$validated['end_time']}")); - - // Handle the file upload if a new file is provided - if ($request->hasFile('proof')) { - // Delete old file if exists - if ($response->proof && Storage::disk('public')->exists($response->proof)) { - Storage::disk('public')->delete($response->proof); - } - - // Extract year from start_date - $year = date('Y', strtotime($validated['start_date'])); - $username = $response->user->name; - - $originalName = $request->file('proof')->getClientOriginalName(); - $fileName = $username . '_' . $originalName; - - // Create path structure: year/faculty_name - $folderPath = 'proofs/' . $year . '/' . $username; - - // Store file in the specified path - $proofPath = $request->file('proof')->storeAs($folderPath, $fileName, 'public'); - - $response->proof = $proofPath; - } - - // Update other fields - $response->title = $validated['title']; - $response->organising_institute = $validated['organising_institute']; - $response->address = $validated['address']; - $response->start_date = $startDateTime; - $response->end_date = $endDateTime; - $response->num_days = $validated['num_days']; - $response->activity_type = $validated['activity_type']; - $response->category = $validated['category']; - $response->level = $validated['level']; - - $response->save(); - - return redirect()->route('admin.ActivitiesAttendedResponses')->with('status', 'Response updated successfully'); - } - - public function destroy($id) - { - $response = ActivitiesAttended::findOrFail($id); - - // Delete the file if it exists - if ($response->proof && Storage::disk('public')->exists($response->proof)) { - Storage::disk('public')->delete($response->proof); - } - - $response->delete(); - - return response()->json(['success' => 'Record deleted successfully']); - } - - public function getActivitiesAttendedResponses() - { - $responses = ActivitiesAttended::with('user', 'department'); - - return DataTables::of($responses) - ->addColumn('user_name', function ($response) { - return $response->user->name ?? 'Unknown'; - }) - ->addColumn('department_name', function ($response) { - return $response->department->name ?? 'Unknown'; - }) - ->addColumn('start_date', function ($response) { - return \Carbon\Carbon::parse($response->start_date)->format('d-m-Y'); - }) - ->addColumn('start_time', function ($response) { - return \Carbon\Carbon::parse($response->start_date)->format('h:i A'); - }) - ->addColumn('end_date', function ($response) { - return \Carbon\Carbon::parse($response->end_date)->format('d-m-Y'); - }) - ->addColumn('end_time', function ($response) { - return \Carbon\Carbon::parse($response->end_date)->format('h:i A'); - }) - ->addColumn('action', function ($response) { - $viewButton = $response->proof - ? 'View' - : 'No Proof'; - - $editButton = 'Edit'; - - $deleteButton = ''; - - return $viewButton . ' ' . $editButton . ' ' . $deleteButton; - }) - ->rawColumns(['action']) - ->make(true); + return view('activities-attended.index'); } + } diff --git a/app/Http/Controllers/CoordinatorController.php b/app/Http/Controllers/CoordinatorController.php index f62448c..b88ccb9 100644 --- a/app/Http/Controllers/CoordinatorController.php +++ b/app/Http/Controllers/CoordinatorController.php @@ -18,49 +18,7 @@ class CoordinatorController extends Controller // View responses submitted by users public function viewActivitiesAttendedResponses() { - return view('coordinator.activities-attended-responses'); + return view('activities-attended.index'); } - -public function getActivitiesAttendedResponses() -{ - // Get the current logged-in user - $currentUser = Auth::user(); - - // Get the department ID of the current user - $userDepartmentId = $currentUser->department->id ?? null; - - // Fetch the responses and filter by department_id - $responses = ActivitiesAttended::with('user', 'department') - ->where('department_id', $userDepartmentId); // Filter by current user's department_id - - return DataTables::of($responses) - ->addColumn('user_name', function ($response) { - return $response->user->name ?? 'Unknown'; - }) - ->addColumn('department_name', function ($response) { - return $response->department->name ?? 'Unknown'; - }) - ->addColumn('start_date', function ($response) { - return \Carbon\Carbon::parse($response->start_date)->format('d-m-Y'); - }) - ->addColumn('start_time', function ($response) { - return \Carbon\Carbon::parse($response->start_date)->format('h:i A'); - }) - ->addColumn('end_date', function ($response) { - return \Carbon\Carbon::parse($response->end_date)->format('d-m-Y'); - }) - ->addColumn('end_time', function ($response) { - return \Carbon\Carbon::parse($response->end_date)->format('h:i A'); - }) - ->addColumn('action', function ($response) { - $viewButton = $response->proof - ? 'View' - : 'No Proof'; - return $viewButton; - }) - ->rawColumns(['action']) - ->make(true); -} - } diff --git a/app/Http/Controllers/FacultyController.php b/app/Http/Controllers/FacultyController.php index 83d422f..4a1ae6f 100644 --- a/app/Http/Controllers/FacultyController.php +++ b/app/Http/Controllers/FacultyController.php @@ -20,9 +20,14 @@ class FacultyController extends Controller return view('faculty.activities-attended-form'); } + public function viewActivitiesAttendedResponses() + { + return view('activities-attended.index'); + } + public function ActivitiesAttendedFormResponse(Request $request) { - // dd($request->all()); + // dd($request->all(),"hello"); try { // Validate the request data $validated = $request->validate([ diff --git a/resources/views/admin/activities-attended/edit.blade.php b/resources/views/activities-attended/edit.blade.php similarity index 93% rename from resources/views/admin/activities-attended/edit.blade.php rename to resources/views/activities-attended/edit.blade.php index 9f1b50c..eb5bcfe 100644 --- a/resources/views/admin/activities-attended/edit.blade.php +++ b/resources/views/activities-attended/edit.blade.php @@ -20,7 +20,7 @@ @endif -
+ @csrf @method('PUT') @@ -145,7 +145,8 @@
- + + Cancel