input('categories', []); if (empty($selectedCategories)) { return redirect()->back()->with('error', 'Please select at least one category.'); } // Array to store missing proofs by faculty $missingProofsByFaculty = []; // Check each selected category foreach ($selectedCategories as $category) { switch ($category) { case 'publications': $this->checkPublications($missingProofsByFaculty); break; case 'activities_attended': $this->checkActivitiesAttended($missingProofsByFaculty); break; case 'activities_organised': $this->checkActivitiesOrganised($missingProofsByFaculty); break; case 'iv_organised': $this->checkIVOrganised($missingProofsByFaculty); break; case 'books_published': $this->checkBooksPublished($missingProofsByFaculty); break; case 'external_engagement': $this->checkExternalEngagement($missingProofsByFaculty); break; case 'online_courses': $this->checkOnlineCourses($missingProofsByFaculty); break; case 'patents_copyrights': $this->checkPatentsCopyrights($missingProofsByFaculty); break; } } // Send emails to faculty members $this->sendMissingProofEmails($missingProofsByFaculty); return redirect()->back()->with('success', 'Emails sent successfully to faculty members with missing proofs.'); } private function checkPublications(&$missingProofsByFaculty) { // Find publications with missing proofs (paper_file is null) $missingProofs = Publication::whereNull('paper_file')->get(); foreach ($missingProofs as $publication) { $facultyId = $publication->faculty_id; if (!isset($missingProofsByFaculty[$facultyId])) { $missingProofsByFaculty[$facultyId] = [ 'faculty' => User::find($facultyId), 'items' => [] ]; } $missingProofsByFaculty[$facultyId]['items'][] = [ 'type' => 'Publication', 'id' => $publication->id, 'primary_name' => $publication->title, 'details' => [ 'Affiliation' => $publication->affiliation, 'Start Date' => $publication->start_date->format('d-m-Y'), 'End Date' => $publication->end_date->format('d-m-Y'), 'First Author' => $publication->first_author_name ] ]; } } private function checkActivitiesAttended(&$missingProofsByFaculty) { $missingProofs = ActivitiesAttended::whereNull('proof')->get(); foreach ($missingProofs as $activity) { $facultyId = $activity->faculty_id; if (!isset($missingProofsByFaculty[$facultyId])) { $missingProofsByFaculty[$facultyId] = [ 'faculty' => User::find($facultyId), 'items' => [] ]; } $missingProofsByFaculty[$facultyId]['items'][] = [ 'type' => 'Activity Attended', 'id' => $activity->id, 'primary_name' => $activity->title, 'details' => [ 'Organising Institute' => $activity->organising_institute, 'Start Date' => $activity->start_date->format('d-m-Y'), 'End Date' => $activity->end_date->format('d-m-Y') ] ]; } } private function checkActivitiesOrganised(&$missingProofsByFaculty) { $missingProofs = ActivitiesOrganised::whereNull('proof')->get(); foreach ($missingProofs as $activity) { $facultyId = $activity->faculty_id; if (!isset($missingProofsByFaculty[$facultyId])) { $missingProofsByFaculty[$facultyId] = [ 'faculty' => User::find($facultyId), 'items' => [] ]; } $missingProofsByFaculty[$facultyId]['items'][] = [ 'type' => 'Activity Organised', 'id' => $activity->id, 'primary_name' => $activity->title, 'details' => [ 'Objective' => $activity->objective, 'Outcomes' => $activity->outcomes, 'Start Date' => $activity->start_date->format('d-m-Y'), 'End Date' => $activity->end_date->format('d-m-Y') ] ]; } } private function checkIVOrganised(&$missingProofsByFaculty) { $missingProofs = IvOrganised::whereNull('proof')->get(); foreach ($missingProofs as $activity) { $facultyId = $activity->faculty_id; if (!isset($missingProofsByFaculty[$facultyId])) { $missingProofsByFaculty[$facultyId] = [ 'faculty' => User::find($facultyId), 'items' => [] ]; } $missingProofsByFaculty[$facultyId]['items'][] = [ 'type' => 'Industrial Visit Organised', 'id' => $activity->id, 'primary_name' => $activity->company_name, 'details' => [ 'Company Address' => $activity->company_address, 'Objective' => $activity->objective, 'Outcomes' => $activity->outcomes, 'Start Date' => $activity->start_date->format('d-m-Y'), 'End Date' => $activity->end_date->format('d-m-Y') ] ]; } } private function checkBooksPublished(&$missingProofsByFaculty) { $missingProofs = BooksPublished::whereNull('proof')->get(); foreach ($missingProofs as $book) { $facultyId = $book->faculty_id; if (!isset($missingProofsByFaculty[$facultyId])) { $missingProofsByFaculty[$facultyId] = [ 'faculty' => User::find($facultyId), 'items' => [] ]; } $missingProofsByFaculty[$facultyId]['items'][] = [ 'type' => 'Book Published', 'id' => $book->id, 'primary_name' => $book->title, 'details' => [ 'Author' => $book->author, 'Publisher' => $book->publisher, 'ISSN' => $book->issn, 'Date Of Publication' => $book->date_of_publication->format('d-m-Y'), ] ]; } } private function checkExternalEngagement(&$missingProofsByFaculty) { $missingProofs = ExternalEngagement::whereNull('proof')->get(); foreach ($missingProofs as $engagement) { $facultyId = $engagement->faculty_id; if (!isset($missingProofsByFaculty[$facultyId])) { $missingProofsByFaculty[$facultyId] = [ 'faculty' => User::find($facultyId), 'items' => [] ]; } $missingProofsByFaculty[$facultyId]['items'][] = [ 'type' => 'External Engagement', 'id' => $engagement->id, 'primary_name' => $engagement->activity, 'details' => [ 'Activity Description' => $engagement->activity_description, 'Inviting Organization' => $engagement->inviting_organization, 'Start Date' => $engagement->start_date->format('d-m-Y'), 'End Date' => $engagement->end_date->format('d-m-Y') ] ]; } } private function checkOnlineCourses(&$missingProofsByFaculty) { $missingProofs = OnlineCourse::whereNull('proof')->get(); foreach ($missingProofs as $course) { $facultyId = $course->faculty_id; if (!isset($missingProofsByFaculty[$facultyId])) { $missingProofsByFaculty[$facultyId] = [ 'faculty' => User::find($facultyId), 'items' => [] ]; } $missingProofsByFaculty[$facultyId]['items'][] = [ 'type' => 'Online Course', 'id' => $course->id, 'primary_name' => $course->course, 'details' => [ 'Offered By' => $course->offered_by, 'Publisher' => $course->publisher, 'Start Date' => $course->start_date->format('d-m-Y'), 'End Date' => $course->end_date->format('d-m-Y') ] ]; } } private function checkPatentsCopyrights(&$missingProofsByFaculty) { $missingProofs = Patent::whereNull('proof')->get(); foreach ($missingProofs as $patent) { $facultyId = $patent->faculty_id; if (!isset($missingProofsByFaculty[$facultyId])) { $missingProofsByFaculty[$facultyId] = [ 'faculty' => User::find($facultyId), 'items' => [] ]; } $missingProofsByFaculty[$facultyId]['items'][] = [ 'type' => 'Patent/Copyright', 'id' => $patent->id, 'primary_name' => $patent->title, 'details' => [ 'Investigator' => $patent->investigator, 'Application No' => $patent->application_no, 'Status' => $patent->status, 'Date Of Submission' => $patent->date_of_submission->format('d-m-Y'), 'Date Of Filling' => $patent->date_of_filling->format('d-m-Y'), ] ]; } } private function sendMissingProofEmails($missingProofsByFaculty) { foreach ($missingProofsByFaculty as $facultyData) { $faculty = $facultyData['faculty']; $items = $facultyData['items']; // Send email try { Mail::to($faculty->email)->send(new MissingProofsMail($faculty, $items)); } catch (\Exception $e) { // Handle the exception (log or report) \Log::error('Failed to send email: ' . $e->getMessage()); // You could flash a message for admin if this is run from an admin panel } } } }