validate([ 'company_name' => 'required|string', 'company_address' => 'required|string', 'resource_person_name' => 'required|string', 'resource_person_contact_details' => 'required|string', 'target_audience' => 'required|string', 'student_year' => 'nullable|string', 'number_of_participants' => 'required|integer', 'objective' => 'required|string', 'outcomes' => 'required|string', 'start_date' => 'required|date', 'start_time' => 'required|date_format:H:i', 'end_date' => 'required|date', 'end_time' => 'required|date_format:H:i', '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->company_name = $validated['company_name']; $response->company_address = $validated['company_address']; $response->resource_person_name = $validated['resource_person_name']; $response->resource_person_contact_details = $validated['resource_person_contact_details']; $response->target_audience = $validated['target_audience']; $response->student_year = $validated['student_year']; $response->number_of_participants = $validated['number_of_participants']; $response->objective = $validated['objective']; $response->outcomes = $validated['outcomes']; $response->start_date = $startDateTime; $response->end_date = $endDateTime; $response->save(); $userRole = auth()->user()->role->name; if ($userRole === 'Admin') { return redirect()->route('admin.IvOrganisedResponses') ->with('status', 'Industrial visit updated successfully'); } elseif ($userRole === 'Coordinator') { return redirect()->route('coordinator.IvOrganisedResponses') ->with('status', 'Industrial visit updated successfully'); } else { // For regular users return redirect()->route('faculty.IvOrganisedResponses') ->with('status', 'Industrial visit updated successfully'); } } public function destroy($id) { $response = IvOrganised::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' => 'Industrial visit record deleted successfully']); } public function getIvOrganisedResponses() { $user = auth()->user(); $isAdmin = $user->role->name === 'Admin'; $isCoordinator = $user->role->name === 'Coordinator'; // Query based on role if ($isAdmin) { // Admin sees all records $responses = IvOrganised::with('user', 'department'); } elseif ($isCoordinator) { // Coordinator sees only their department's records $responses = IvOrganised::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 = IvOrganised::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.IvOrganised.edit', $response->id); } elseif ($userRole === 'Coordinator') { $editRoute = route('coordinator.IvOrganised.edit', $response->id); } else { $editRoute = route('faculty.IvOrganised.edit', $response->id); } $actions[] = 'Edit'; $deleteRoute = route('ivOrganised.destroy', $response->id); $actions[] = ''; return implode(' ', $actions); }) ->rawColumns(['action']) ->make(true); } public function store(Request $request) { // Validate the request data $validated = $request->validate([ 'company_name' => 'required|string', 'company_address' => 'required|string', 'resource_person_name' => 'required|string', 'resource_person_contact_details' => 'required|string', 'target_audience' => 'required|string', 'student_year' => 'nullable|string', 'number_of_participants' => 'required|integer', 'objective' => 'required|string', 'outcomes' => 'required|string', 'start_date' => 'required|date', 'start_time' => 'required|date_format:H:i', 'end_date' => 'required|date', 'end_time' => 'required|date_format:H:i', 'faculty_id' => 'required|exists:users,id', 'department_id' => 'required|exists:departments,id', 'proof' => 'required|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']}")); // Create new record $ivOrganised = new IvOrganised(); $ivOrganised->company_name = $validated['company_name']; $ivOrganised->company_address = $validated['company_address']; $ivOrganised->resource_person_name = $validated['resource_person_name']; $ivOrganised->resource_person_contact_details = $validated['resource_person_contact_details']; $ivOrganised->target_audience = $validated['target_audience']; $ivOrganised->student_year = $validated['student_year']; $ivOrganised->number_of_participants = $validated['number_of_participants']; $ivOrganised->objective = $validated['objective']; $ivOrganised->outcomes = $validated['outcomes']; $ivOrganised->start_date = $startDateTime; $ivOrganised->end_date = $endDateTime; $ivOrganised->faculty_id = $validated['faculty_id']; $ivOrganised->department_id = $validated['department_id']; // Handle the file upload if ($request->hasFile('proof')) { $user = auth()->user(); $year = date('Y', strtotime($validated['start_date'])); $username = $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'); $ivOrganised->proof = $proofPath; } $ivOrganised->save(); return redirect()->route('faculty.IvOrganisedResponses') ->with('status', 'Industrial visit submitted successfully'); } public function create() { return view('iv-organised.create'); } }