validate([ 'title' => 'required|string', 'resource_person_name' => 'required|string', 'resource_person_organization' => 'required|string', 'target_audience' => 'required|string', 'number_of_participants' => 'required|integer', 'objective' => 'required|string', 'outcomes' => 'required|string', 'venue' => '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; $userId = $response->user->id; $originalName = $request->file('proof')->getClientOriginalName(); $fileName = $username . '_' . $originalName; // Create path structure: year/faculty_name $folderPath = 'proofs/' . $year . '/' . $userId . '_' . $username . '/Activities-Organised'; // 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->resource_person_name = $validated['resource_person_name']; $response->resource_person_organization = $validated['resource_person_organization']; $response->target_audience = $validated['target_audience']; $response->number_of_participants = $validated['number_of_participants']; $response->objective = $validated['objective']; $response->outcomes = $validated['outcomes']; $response->venue = $validated['venue']; $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; if ($userRole === 'Admin') { return redirect()->route('admin.ActivitiesOrganisedResponses') ->with('status', 'Response updated successfully'); } elseif ($userRole === 'Coordinator') { return redirect()->route('coordinator.ActivitiesOrganisedResponses') ->with('status', 'Response updated successfully'); } else { // For regular users return redirect()->route('faculty.ActivitiesOrganisedResponses') ->with('status', 'Response updated successfully'); } } public function destroy($id) { $response = ActivitiesOrganised::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 getActivitiesOrganisedResponses(Request $request) { $user = auth()->user(); $isAdmin = $user->role->name === 'Admin'; $isCoordinator = $user->role->name === 'Coordinator'; // Query based on role if ($isAdmin) { // Admin sees all records $responses = ActivitiesOrganised::with('user', 'department'); } elseif ($isCoordinator) { // Coordinator sees only their department's records $responses = ActivitiesOrganised::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 = ActivitiesOrganised::with('user', 'department') ->where('faculty_id', $user->id); } // Apply filters if ($request->has('department') && !empty($request->department)) { $responses->whereHas('department', function ($query) use ($request) { $query->where('id', $request->department); }); } if ($request->has('category') && !empty($request->category)) { $responses->where('category', $request->category); } if ($request->has('dateFrom') && !empty($request->dateFrom)) { $responses->where('start_date', '>=', $request->dateFrom); } if ($request->has('dateTo') && !empty($request->dateTo)) { $responses->where('end_date', '<=', $request->dateTo); } 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[] = ''; } else { $actions[] = ''; } // 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.ActivitiesOrganised.edit', $response->id); } elseif ($userRole === 'Coordinator') { $editRoute = route('coordinator.ActivitiesOrganised.edit', $response->id); } else { $editRoute = route('faculty.ActivitiesOrganised.edit', $response->id); } $actions[] = ''; $deleteRoute = route('activitiesOrganised.destroy', $response->id); $actions[] = ''; return implode(' ', $actions); }) ->rawColumns(['action']) ->make(true); } }