user()->can('students.view')) { return view("unauthorized.unauthorized"); } $currentRoute = \Route::currentRouteName(); $data['route'] = $currentRoute; $data['title'] = __('student.students'); $data['is_favourite'] = \App\Models\FavouriteMenu::where('route', $currentRoute)->exists(); if (auth()->user()->hasRole('Super Admin')) { $data['businesses'] = \App\Models\Business::all(); } $students = $trashed = []; if ($request->ajax()) { try { // Regular data query $query = \App\Models\Student::query(); if ($request->filled('business_id')) { $query->where('business_id', $request->business_id); } if ($request->filled('academic_year_id')) { $query->where('academic_year_id', $request->academic_year_id); } if ($request->filled('academic_class_id')) { $query->where('academic_class_id', $request->academic_class_id); } if ($request->filled('section_id')) { $query->where('section_id', $request->section_id); } if ($request->filled('group_id')) { $query->where('group_id', $request->group_id); } if ($request->filled('shift_id')) { $query->where('shift_id', $request->shift_id); } if ($request->filled('status_id')) { $query->where('status_id', $request->status_id); } if ($request->filled('admission_date')) { [$start, $end] = explode(' - ', $request->admission_date); $startDate = \Carbon\Carbon::createFromFormat('n/d h:i A', trim($start))->startOfMinute(); $endDate = \Carbon\Carbon::createFromFormat('n/d h:i A', trim($end))->endOfMinute(); $query->whereBetween('admission_date', [$startDate, $endDate]); } $students = $query->with('user')->get(); // Trashed data query $trashedQuery = \App\Models\Student::onlyTrashed()->whereHas('user', function ($q) { $q->onlyTrashed(); }); if ($request->filled('business_id')) { $trashedQuery->where('business_id', $request->business_id); } if ($request->filled('academic_year_id')) { $trashedQuery->where('academic_year_id', $request->academic_year_id); } if ($request->filled('academic_class_id')) { $trashedQuery->where('academic_class_id', $request->academic_class_id); } if ($request->filled('section_id')) { $trashedQuery->where('section_id', $request->section_id); } if ($request->filled('group_id')) { $trashedQuery->where('group_id', $request->group_id); } if ($request->filled('shift_id')) { $trashedQuery->where('shift_id', $request->shift_id); } if ($request->filled('status_id')) { $trashedQuery->where('status_id', $request->status_id); } if ($request->filled('admission_date')) { [$start, $end] = explode(' - ', $request->admission_date); $startDate = \Carbon\Carbon::createFromFormat('n/d h:i A', trim($start))->startOfMinute(); $endDate = \Carbon\Carbon::createFromFormat('n/d h:i A', trim($end))->endOfMinute(); $trashedQuery->whereBetween('admission_date', [$startDate, $endDate]); } $trashed = $trashedQuery->with([ 'user' => function ($q) { $q->withTrashed(); } ])->get(); return response()->json([ 'homeData' => view('students.partials.home_data', compact('data', 'students'))->render(), 'trashData' => view('students.partials.trash_data', compact('data', 'trashed'))->render(), ]); } catch (\Exception $e) { \Log::emergency('File:' . $e->getFile() . ' Line:' . $e->getLine() . ' Message:' . $e->getMessage()); return response()->json([ 'success' => false, 'msg' => __('core.something_went_wrong'), 'error' => 'File:' . $e->getFile() . ' Line:' . $e->getLine() . ' Message:' . $e->getMessage() ]); } } // Initial page load $students = Student::whereHas('user', fn($q) => $q->where('status', 1)) ->with(['user' => fn($q) => $q->where('status', 1)]) ->get(); $trashed = Student::onlyTrashed() ->whereHas('user', fn($q) => $q->onlyTrashed()) ->with(['user' => fn($q) => $q->withTrashed()]) ->get(); return view('students.index', compact('data', 'students', 'trashed')); } /** * Show the form for creating a new resource. */ public function create() { if (!auth()->user()->can('students.create')) { return view("unauthorized.unauthorized"); } $currentRoute = Route::currentRouteName(); $data['route'] = $currentRoute; $data['title'] = __('student.create'); $data['is_favourite'] = FavouriteMenu::where('route', $currentRoute)->exists(); if (auth()->user()->hasRole('Super Admin')) { $data['businesses'] = Business::all(); } $relationTypes = RelationType::all(); $bloodGroups = BloodGroup::all(); $countries = Country::where('status', '1')->get(); return view('students.create', compact('data', 'countries', 'relationTypes', 'bloodGroups')); } public function store(Request $request) { if (!auth()->user()->can('students.create')) { return view("unauthorized.unauthorized"); } dd(request()->input('notify_phones')); $phonesToSendNotification = ['014']; $emailsToSendNotification = ['email']; $sendNotificationIndexes = $request->input('send_notification', []); foreach ($request->input('guardian_name') as $key => $item) { $guardian = Guardian::create([ 'business_id' => $request->input('business_id'), 'student_id' => '1', 'guardian_name' => $item, 'guardian_phone' => $request->input('guardian_phone')[$key] ?? null, 'guardian_email' => $request->input('guardian_email')[$key] ?? null, 'guardian_education' => $request->input('guardian_education')[$key] ?? null, 'guardian_profession' => $request->input('guardian_profession')[$key] ?? null, 'guardian_dead_date' => $request->input('guardian_dead_date')[$key] ?? null, ]); UserGuardianRelation::create([ 'user_id' => '1', 'guardian_id' => $guardian->id, 'relation_type_id' => $request->input('relation_type_id')[$key] ?? null, ]); if (in_array($key, $sendNotificationIndexes)) { $phonesToSendNotification[] = $guardian->guardian_phone; $emailsToSendNotification[] = $guardian->guardian_email; } } dd($request->input('guardian_name'), $request->input('send_notification'), $phonesToSendNotification, $emailsToSendNotification); $request->validate([ 'business_id' => 'required', 'first_name' => 'required', 'gender' => 'required', 'dob' => 'required', 'username' => 'required', 'academic_year_id' => 'required', 'academic_class_id' => 'required', 'admission_no' => 'required', 'admission_date' => 'required', 'joining_date' => 'required', 'guardian_username' => 'required', 'guardian_name' => 'required', 'guardian_phone' => 'required', ]); // create guardain $guardainUser = User::create([ 'business_id' => $request->input('business_id'), 'username' => $request->input('guardian_username'), 'password' => $request->input('guardian_password') ? Hash::make($request->input('guardian_password')) : loadDefaultPassword($request->input('business_id')), ]); // assign guardian role // FacadesDB::table('model_has_roles')->insert([ // 'model_id' => $guardainUser->id, // 'model_type' => 'App\Models\User', // 'role_id' => $request->input('re'), // ]); // store address $presentAddress = Address::create([ 'business_id' => $request->input('business_id'), 'country_id' => $request->input('present_country_id'), 'division_id' => $request->input('present_division_id'), 'district_id' => $request->input('present_district_id'), 'upazila_thana_id' => $request->input('present_upazila_thana_id'), 'hold_no' => $request->input('present_hold_no'), 'road_name' => $request->input('present_road_name'), 'village_name' => $request->input('present_village_name'), 'ward_no' => $request->input('present_ward_no'), 'present_post_office' => $request->input('present_present_post_office'), 'postal_code' => $request->input('present_postal_code'), 'note' => $request->input('present_note'), ]); if ($request->input('same_as_present')) { $permanentAddress = $presentAddress; } else { $permanentAddress = Address::create([ 'business_id' => $request->input('business_id'), 'country_id' => $request->input('permanent_country_id'), 'division_id' => $request->input('permanent_division_id'), 'district_id' => $request->input('permanent_district_id'), 'upazila_thana_id' => $request->input('permanent_upazila_thana_id'), 'hold_no' => $request->input('permanent_hold_no'), 'road_name' => $request->input('permanent_road_name'), 'village_name' => $request->input('permanent_village_name'), 'ward_no' => $request->input('permanent_ward_no'), 'present_post_office' => $request->input('permanent_present_post_office'), 'postal_code' => $request->input('permanent_postal_code'), 'note' => $request->input('permanent_note'), ]); } // create user $user = User::create([ 'business_id' => $request->input('business_id'), 'username' => $request->input('username'), 'email' => $request->input('email'), 'first_name' => $request->input('first_name'), 'middle_name' => $request->input('middle_name'), 'last_name' => $request->input('last_name'), 'nick_name' => $request->input('nick_name'), 'mobile' => $request->input('mobile'), 'dob' => $request->input('dob'), 'gender' => $request->input('gender'), 'present_address_id' => $presentAddress ? $presentAddress->id : null, 'permanent_address_id' => $permanentAddress ? $permanentAddress->id : null, 'photo' => $request->hasFile('photo') ? $request->file('photo')->store('public/uploads/users/photos') : null, 'national_id' => $request->input('national_id'), 'passport_no' => $request->input('passport_no'), 'birth_certificate_no' => $request->input('birth_certificate_no'), 'birth_place' => $request->input('birth_place'), 'religion_id' => $request->input('religion_id'), 'nationality_id' => $request->input('nationality_id'), 'driving_license_no' => $request->input('driving_license_no'), 'password' => $request->input('password') ? Hash::make($request->input('password')) : loadDefaultPassword($request->input('business_id')), ]); $phonesToSendNotification[] = $user->mobile; $emailsToSendNotification[] = $user->email; // assign user roles $userRoleNames = $request->input('user_roles') ?? []; $userRoleIds = Role::whereIn('name', $userRoleNames)->pluck('id')->toArray(); foreach ($userRoleIds as $item) { FacadesDB::table('model_has_roles')->insert([ 'model_id' => $user->id, 'model_type' => 'App\Models\User', 'role_id' => $item, ]); } // Create health information record $healthInformation = HealthInformations::create([ 'blood_group_id' => $request->input('blood_group'), 'emergency_medical_action' => $request->input('emergency_medical_action'), 'medical_history' => $request->input('medical_history'), 'height' => $request->input('height'), 'weight' => $request->input('weight'), 'last_medical_check' => $request->input('last_medical_check') ? date('Y-m-d', strtotime($request->input('last_medical_check'))) : null, 'last_medical_status' => $request->input('last_medical_status'), 'special_user_id' => $request->input('special_user') ?? null, ]); if ($request->hasFile('photo')) { if ($user->photo && Storage::exists($user->photo)) { Storage::delete($user->photo); } $user->update(['photo' => $request->file('photo')->store('public/uploads/users/photos')]); } $academicCertificate = $request->hasFile('academic_certificate') ? $request->file('academic_certificate')->store('public/uploads/students/academic_certificates') : null; $transferCertificate = $request->hasFile('transfer_certificate') ? $request->file('transfer_certificate')->store('public/uploads/students/transfer_certificates') : null; $testimonial = $request->hasFile('testimonial') ? $request->file('testimonial')->store('public/uploads/students/testimonials') : null; // Create the student record with the health information ID $student = Student::create([ 'business_id' => $request->input('business_id'), 'user_id' => $user->id, 'admission_no' => $request->input('admission_no'), 'registration_no' => $request->input('registration_no'), 'unique_id' => $request->input('unique_id'), 'admission_date' => $request->input('admission_date'), 'joining_date' => $request->input('joining_date'), 'guardian_login_user_id' => $guardainUser->id, 'shift_id' => $request->input('shift_id'), 'academic_year_id' => $request->input('academic_year_id'), 'academic_class_id' => $request->input('academic_class_id'), 'group_id' => $request->input('group_id'), 'section_id' => $request->input('section_id'), 'roll_no' => $request->input('roll_no'), 'health_information_id' => $healthInformation ? $healthInformation->id : null, 'previous_school_name' => $request->input('previous_school_name'), 'previous_class' => $request->input('previous_class'), 'previous_section' => $request->input('previous_section'), 'previous_roll' => $request->input('previous_roll'), 'previous_cgpa' => $request->input('previous_cgpa'), 'academic_certificate' => $academicCertificate, 'transfer_certificate' => $transferCertificate, 'testimonial' => $testimonial, 'second_language' => $request->input('second_language'), 'status_id' => $request->input('status_id') ?? null, 'other_mobile' => $request->input('other_mobile'), 'note' => $request->input('student_note'), ]); // save guardians info foreach ($request->input('guardian_name') as $key => $item) { $guardian = Guardian::create([ 'business_id' => $request->input('business_id'), 'student_id' => $student->id, 'guardian_name' => $item, 'guardian_phone' => $request->input('guardian_phone')[$key] ?? null, 'guardian_email' => $request->input('guardian_email')[$key] ?? null, 'guardian_education' => $request->input('guardian_education')[$key] ?? null, 'guardian_profession' => $request->input('guardian_profession')[$key] ?? null, 'guardian_dead_date' => $request->input('guardian_dead_date')[$key] ?? null, ]); UserGuardianRelation::create([ 'user_id' => $user->id, 'guardian_id' => $guardian->id, 'relation_type_id' => $request->input('relation_type_id')[$key] ?? null, ]); if (!empty($request->input('send_notification')[$key])) { $phonesToSendNotification[] = $guardian->guardian_phone; $emailsToSendNotification[] = $guardian->guardian_email; } } dd($phonesToSendNotification, $emailsToSendNotification); foreach ($request->input('guardian_user_id') as $key => $item) { if (!$request->input('existing_relation_type_id')[$key]) { continue; } UserGuardianRelation::create([ 'user_id' => $user->id, 'guardian_id' => $item, 'relation_type_id' => $request->input('existing_relation_type_id')[$key] ?? null, ]); } // NOTIFICATION (start) $admins = User::query()->role('Admin')->where('business_id', $student->business_id)->get(); $superAdmins = User::query()->role('Super Admin')->get(); $data['total_students'] = Student::where('business_id', $user->business_id)->count(); $data['guardian_username'] = $request->input('guardian_username'); $data['guardian_password'] = $request->input('guardian_password') ?? loadDefaultPassword($request->input('business_id')); $data['password'] = $request->input('password') ?? loadDefaultPassword($request->input('business_id')); $data['only_db_notification'] = false; $data['emails'] = $emailsToSendNotification; foreach ($data['emails'] as $email) { Notification::route('mail', $email)->notify(new RegistrationToUserNotification($user, $student, $data)); } $data['mobiles'] = $phonesToSendNotification; foreach ($data['mobiles'] as $mobile) { Notification::route('mim_sms', $mobile)->notify(new RegistrationToUserNotification($user, $student, $data)); } $data['only_db_notification'] = true; $user->notify(new RegistrationToUserNotification($user, $student, $data)); Notification::send($admins, new RegistrationToAdminNotification($user, $student)); Notification::send($superAdmins, new RegistrationToSuperAdminNotification($user, $student, $data)); // NOTIFICATION (end) return redirect()->route('students.index')->with('success', __('core.create_successfully')); } /** * Display the specified resource. */ public function show(string $id) { if (!auth()->user()->can('students.view')) { return view("unauthorized.unauthorized"); } } public function edit($id) { if (!auth()->user()->can('students.update')) { return view("unauthorized.unauthorized"); } $businesses = []; if (auth()->user()->hasRole('Super Admin')) { $businesses = Business::all(); } $student = Student::withoutGlobalScope(BusinessScope::class) ->join('users', 'students.user_id', '=', 'users.id') ->leftjoin('health_informations', 'health_informations.id', '=', 'students.health_information_id') ->where('students.id', $id) ->select('students.*', 'users.*', 'health_informations.*', 'students.id as student_id') ->first(); $guardianLogin = $presentAddress = $permanentAddress = null; if ($student && $student->guardian_login_user_id) { $guardianLogin = User::where('id', $student->guardian_login_user_id)->first(); } if ($student && $student->present_address_id) { $presentAddress = Address::where('id', $student->present_address_id)->first(); } if ($student && $student->permanent_address_id) { $permanentAddress = Address::where('id', $student->permanent_address_id)->first(); } $guardians = Guardian::withoutGlobalScope(BusinessScope::class) ->leftjoin('user_guardian_relations', 'guardians.id', '=', 'user_guardian_relations.guardian_id') ->leftjoin('relation_types', 'relation_types.id', '=', 'user_guardian_relations.relation_type_id') ->where('guardians.business_id', $student->business_id) ->where('user_guardian_relations.user_id', $student->user_id) ->get(); $allGuardians = Guardian::all(); $roles = Role::where('business_id', $student->business_id)->get(); $user = User::findOrFail($student->user_id); $userRoles = $user->roles->pluck('name')->toArray(); $religions = Religion::all(); $nationalities = Nationality::all(); $student_statuses = StudentStatus::all(); $user_types = UserType::all(); $references = UserReferencer::all(); $academic_years = AcademicYear::withoutGlobalScope(BusinessScope::class)->join('academic_basic_settings as abs', 'academic_years.id', '=', 'abs.academic_year_id') ->where('academic_years.business_id', $student->business_id) ->select('academic_years.*') ->get(); $academic_classes = AcademicClass::withoutGlobalScope(BusinessScope::class)->join('aca_basic_setting_class_details', 'academic_classes.id', '=', 'aca_basic_setting_class_details.academic_class_id') ->join('academic_basic_settings', 'academic_basic_settings.id', '=', 'aca_basic_setting_class_details.academic_basic_setting_id') ->where('academic_basic_settings.academic_year_id', $student->academic_year_id) ->where('academic_basic_settings.business_id', $student->business_id) ->select('academic_classes.*') ->get(); $sections = Section::withoutGlobalScope(BusinessScope::class)->join('aca_basic_setting_section_details', 'sections.id', '=', 'aca_basic_setting_section_details.section_id') ->join('academic_basic_settings', 'academic_basic_settings.id', '=', 'aca_basic_setting_section_details.academic_basic_setting_id') ->where('aca_basic_setting_section_details.academic_class_id', $student->academic_class_id) ->where('academic_basic_settings.academic_year_id', $student->academic_year_id) ->where('academic_basic_settings.business_id', $student->business_id) ->select('sections.*') ->get(); $shifts = Shift::withoutGlobalScope(BusinessScope::class)->join('aca_basic_setting_shift_details', 'shifts.id', '=', 'aca_basic_setting_shift_details.shift_id') ->join('academic_basic_settings', 'academic_basic_settings.id', '=', 'aca_basic_setting_shift_details.academic_basic_setting_id') ->where('aca_basic_setting_shift_details.academic_class_id', $student->academic_class_id) ->where('academic_basic_settings.academic_year_id', $student->academic_year_id) ->where('academic_basic_settings.business_id', $student->business_id) ->select('shifts.*') ->get(); $groups = Group::withoutGlobalScope(BusinessScope::class)->join('aca_basic_setting_group_details', 'groups.id', '=', 'aca_basic_setting_group_details.group_id') ->join('academic_basic_settings', 'academic_basic_settings.id', '=', 'aca_basic_setting_group_details.academic_basic_setting_id') ->where('aca_basic_setting_group_details.academic_class_id', $student->academic_class_id) ->where('academic_basic_settings.academic_year_id', $student->academic_year_id) ->where('academic_basic_settings.business_id', $student->business_id) ->select('groups.*') ->get(); $blood_groups = BloodGroup::all(); $special_user_types = SpecialUserType::all(); $relationTypes = RelationType::all(); $countries = Country::where('status', '1')->get(); $divisions = Division::where('status', '1')->get(); $districts = District::where('status', '1')->get(); $upazila_thanas = UpazilaThana::where('status', '1')->get(); // Pass data to the view return view('students.edit', compact( 'businesses', 'student', 'guardianLogin', 'guardians', 'allGuardians', 'presentAddress', 'permanentAddress', 'academic_years', 'academic_classes', 'sections', 'shifts', 'groups', 'student_statuses', 'user_types', 'blood_groups', 'special_user_types', 'relationTypes', 'references', 'nationalities', 'religions', 'roles', 'userRoles', 'countries', 'divisions', 'districts', 'upazila_thanas', )); } /** * Update the specified resource in storage. */ public function update(Request $request, $id) { if (!auth()->user()->can('students.update')) { return view("unauthorized.unauthorized"); } $request->validate([ 'business_id' => 'required', 'first_name' => 'required', 'gender' => 'required', 'dob' => 'required', 'username' => 'required', 'academic_year_id' => 'required', 'academic_class_id' => 'required', 'admission_no' => 'required', 'admission_date' => 'required', 'joining_date' => 'required', 'guardian_username' => 'required', 'guardian_name' => 'required', 'guardian_phone' => 'required', ]); // Find the student & associated user $student = Student::withoutGlobalScope(BusinessScope::class) ->where('id', $id)->first(); $user = User::withoutGlobalScope(BusinessScope::class)->where('id', $student->user_id)->first(); $guardianUser = User::firstOrCreate( ['id' => $student->guardian_login_user_id], [ 'business_id' => $request->input('business_id'), 'username' => $request->input('guardian_username'), 'password' => $request->filled('guardian_password') ? Hash::make($request->input('guardian_password')) : loadDefaultPassword($request->input('business_id')), ] ); // If the user already existed, update the fields $guardianUser->update([ 'business_id' => $request->input('business_id'), 'username' => $request->input('guardian_username'), 'password' => $request->filled('guardian_password') ? Hash::make($request->input('guardian_password')) : $guardianUser->password, ]); if (!$student->guardian_login_user_id) { $student->guardian_login_user_id = $guardianUser->id; $student->save(); } // Update Addresses $presentAddress = Address::updateOrCreate(['id' => $user->present_address_id], [ 'business_id' => $request->input('business_id'), 'country_id' => $request->input('present_country_id'), 'division_id' => $request->input('present_division_id'), 'district_id' => $request->input('present_district_id'), 'upazila_thana_id' => $request->input('present_upazila_thana_id'), 'hold_no' => $request->input('present_hold_no'), 'road_name' => $request->input('present_road_name'), 'village_name' => $request->input('present_village_name'), 'ward_no' => $request->input('present_ward_no'), 'present_post_office' => $request->input('present_present_post_office'), 'postal_code' => $request->input('present_postal_code'), 'note' => $request->input('present_note'), ]); if ($request->input('same_as_present')) { $permanentAddress = $presentAddress; } else { $permanentAddress = Address::updateOrCreate(['id' => $user->permanent_address_id], [ 'business_id' => $request->input('business_id'), 'country_id' => $request->input('permanent_country_id'), 'division_id' => $request->input('permanent_division_id'), 'district_id' => $request->input('permanent_district_id'), 'upazila_thana_id' => $request->input('permanent_upazila_thana_id'), 'hold_no' => $request->input('permanent_hold_no'), 'road_name' => $request->input('permanent_road_name'), 'village_name' => $request->input('permanent_village_name'), 'ward_no' => $request->input('permanent_ward_no'), 'present_post_office' => $request->input('permanent_present_post_office'), 'postal_code' => $request->input('permanent_postal_code'), 'note' => $request->input('permanent_note'), ]); } if ($request->hasFile('photo')) { if ($user->photo && Storage::exists($user->photo)) { Storage::delete($user->photo); } $user->update(['photo' => $request->file('photo')->store('public/uploads/users/photos')]); } if ($request->hasFile('birth_certificate')) { if ($user->birth_certificate && Storage::exists($user->birth_certificate)) { Storage::delete($user->birth_certificate); // Delete old file } $user->update(['birth_certificate' => $request->file('birth_certificate')->store('public/uploads/users/birth_certificates')]); // Store new file } // Update User $user->update([ 'business_id' => $request->input('business_id'), 'username' => $request->input('username'), 'email' => $request->input('email'), 'first_name' => $request->input('first_name'), 'middle_name' => $request->input('middle_name'), 'last_name' => $request->input('last_name'), 'nick_name' => $request->input('nick_name'), 'mobile' => $request->input('mobile'), 'dob' => $request->input('dob'), 'gender' => $request->input('gender'), 'present_address_id' => $presentAddress->id, 'permanent_address_id' => $permanentAddress->id, 'national_id' => $request->input('national_id'), 'passport_no' => $request->input('passport_no'), 'birth_certificate_no' => $request->input('birth_certificate_no'), 'birth_place' => $request->input('birth_place'), 'religion_id' => $request->input('religion_id'), 'nationality_id' => $request->input('nationality_id'), 'driving_license_no' => $request->input('driving_license_no'), 'password' => $request->filled('password') ? Hash::make($request->input('password')) : $user->password, ]); // Update User Roles $userRoleNames = $request->input('user_roles') ?? []; $userRoleIds = Role::whereIn('name', $userRoleNames)->pluck('id')->toArray(); FacadesDB::table('model_has_roles')->where('model_id', $user->id)->delete(); foreach ($userRoleIds as $item) { FacadesDB::table('model_has_roles')->insert([ 'model_id' => $user->id, 'model_type' => 'App\Models\User', 'role_id' => $item, ]); } // Update Health Information if ($student->health_information_id) { HealthInformations::where('id', $student->health_information_id)->update([ 'blood_group_id' => $request->input('blood_group'), 'emergency_medical_action' => $request->input('emergency_medical_action'), 'medical_history' => $request->input('medical_history'), 'height' => $request->input('height'), 'weight' => $request->input('weight'), 'last_medical_check' => $request->input('last_medical_check') ? date('Y-m-d', strtotime($request->input('last_medical_check'))) : null, 'last_medical_status' => $request->input('last_medical_status'), 'special_user_id' => $request->input('special_user') ?? null, ]); } $academicCertificate = $request->hasFile('academic_certificate') ? $request->file('academic_certificate')->store('public/uploads/students/academic_certificates') : null; $transferCertificate = $request->hasFile('transfer_certificate') ? $request->file('transfer_certificate')->store('public/uploads/students/transfer_certificates') : null; $testimonial = $request->hasFile('testimonial') ? $request->file('testimonial')->store('public/uploads/students/testimonials') : null; // Update Student $student->update([ 'business_id' => $request->input('business_id'), 'admission_no' => $request->input('admission_no'), 'registration_no' => $request->input('registration_no'), 'unique_id' => $request->input('unique_id'), 'admission_date' => $request->input('admission_date'), 'joining_date' => $request->input('joining_date'), 'shift_id' => $request->input('shift_id'), 'academic_year_id' => $request->input('academic_year_id'), 'academic_class_id' => $request->input('academic_class_id'), 'group_id' => $request->input('group_id'), 'section_id' => $request->input('section_id'), 'roll_no' => $request->input('roll_no'), 'previous_school_name' => $request->input('previous_school_name'), 'previous_class' => $request->input('previous_class'), 'previous_section' => $request->input('previous_section'), 'previous_roll' => $request->input('previous_roll'), 'previous_cgpa' => $request->input('previous_cgpa'), 'academic_certificate' => $academicCertificate, 'transfer_certificate' => $transferCertificate, 'testimonial' => $testimonial, 'second_language' => $request->input('second_language'), 'status_id' => $request->input('status_id') ?? null, 'other_mobile' => $request->input('other_mobile'), 'note' => $request->input('student_note'), ]); // Update Guardians foreach ($request->input('guardian_name') as $key => $item) { // Update or create Guardian $guardian = Guardian::updateOrCreate( [ 'student_id' => $student->id, 'guardian_name' => $item, 'business_id' => $request->input('business_id'), ], [ 'guardian_phone' => $request->input('guardian_phone')[$key] ?? null, 'guardian_email' => $request->input('guardian_email')[$key] ?? null, 'guardian_education' => $request->input('guardian_education')[$key] ?? null, 'guardian_profession' => $request->input('guardian_profession')[$key] ?? null, 'guardian_dead_date' => $request->input('guardian_dead_date')[$key] ?? null, ] ); // Update or create User-Guardian Relation UserGuardianRelation::updateOrCreate( [ 'user_id' => $user->id, 'guardian_id' => $guardian->id, ], [ 'relation_type_id' => $request->input('relation_type_id')[$key] ?? null, ] ); } // Update Existing Guardian Relations foreach ($request->input('guardian_user_id') as $key => $guardianId) { $relationTypeId = $request->input('existing_relation_type_id')[$key] ?? null; if (!$relationTypeId) { continue; } UserGuardianRelation::updateOrCreate( ['user_id' => $user->id, 'guardian_id' => $guardianId], ['relation_type_id' => $relationTypeId] ); } return redirect()->route('students.index')->with('success', __('core.update_successfully')); } /** * Remove the specified resource from storage. */ public function destroy(string $id) { if (!auth()->user()->can('students.delete')) { return view("unauthorized.unauthorized"); } try { $student = Student::with('user')->findOrFail($id); $student->delete(); } catch (\Exception $e) { \Log::emergency('File:' . $e->getFile() . ' Line:' . $e->getLine() . ' Message:' . $e->getMessage()); return response()->json([ 'success' => false, 'msg' => __('core.something_went_wrong'), ], 500); } return route('students.index'); } public function toggleStatus(Request $request, $id) { if (!auth()->user()->can('students.update')) { return view("unauthorized.unauthorized"); } try { $student = Student::findOrFail($id); $status = $student->status == '1' ? '0' : '1'; $student->update(['status' => $status]); $output = [ 'success' => true, 'msg' => __('core.updated_successfully'), ]; } catch (\Exception $e) { \Log::emergency('File:' . $e->getFile() . 'Line:' . $e->getLine() . 'Message:' . $e->getMessage()); $output = [ 'success' => false, 'msg' => __('messages.something_went_wrong'), ]; } return response()->json($output); } public function admissionStatus(Request $request, $id) { if (!auth()->user()->can('students.update')) { return view("unauthorized.unauthorized"); } if ($request->isMethod('put') && $request->ajax()) { try { $student = Student::findOrFail($id); $student->admission_status = $student->admission_status === '1' ? '2' : '1'; $student->save(); return response()->json([ 'success' => true, 'msg' => __('Toggle Status Updated Successfully'), ]); } catch (\Exception $e) { \Log::emergency('File:' . $e->getFile() . ' Line:' . $e->getLine() . ' Message:' . $e->getMessage()); return response()->json([ 'success' => false, 'msg' => __('core.something_went_wrong'), ], 500); } } } /** * Restore a specific resource. */ public function restore($id) { if (!auth()->user()->can('students.delete')) { return view("unauthorized.unauthorized"); } try { $student = Student::withTrashed()->findOrFail($id); $student->restore(); return response()->json([ 'success' => true, 'msg' => __('employees_restored_success'), ]); } catch (\Exception $e) { \Log::emergency('File:' . $e->getFile() . ' Line:' . $e->getLine() . ' Message:' . $e->getMessage()); return response()->json([ 'success' => false, 'msg' => __('core.something_went_wrong'), ], 500); } } /** * Permanently delete a specific resource. */ public function delete($id) { if (!auth()->user()->can('students.trash_delete')) { return view("unauthorized.unauthorized"); } try { $student = Student::withTrashed()->findOrFail($id); if ($student->user()) { FacadesDB::table('model_has_roles') ->where('model_id', $student->user_id) ->where('model_type', 'App\Models\User') ->delete(); $student->user()->forceDelete(); } $student->forceDelete(); return response()->json([ 'success' => true, 'msg' => __('Employee_force_delete_success'), ]); } catch (\Exception $e) { \Log::emergency('File:' . $e->getFile() . ' Line:' . $e->getLine() . ' Message:' . $e->getMessage()); return response()->json([ 'success' => false, 'msg' => __('core.something_went_wrong'), ], 500); } } //Student data import public function importExcel() { return view('students.excel'); } public function importExcelPost(Request $request) { // dd($request->all()); $request->validate([ 'file' => 'required|mimes:xlsx,xls', ]); $business_id = auth()->user()->business_id; try { Excel::import(new StudentImport($business_id), $request->file('file')); $output = [ 'success' => true, 'msg' => __('core.Students Imported Successfully'), ]; } catch (\Exception $e) { Log::emergency('File:' . $e->getFile() . 'Line:' . $e->getLine() . 'Message:' . $e->getMessage()); $output = [ 'success' => false, 'msg' => __('core.something_went_wrong'), 'er' => 'File:' . $e->getFile() . ' Line:' . $e->getLine() . ' Message:' . $e->getMessage() ]; } return response()->json($output); } public function studentDetails($id) { try { $student = Student::with('user', 'academicYears', 'group', 'shift', 'Status', 'academicClass', 'section', 'healthInfo', 'business', 'user.nationality', 'user.religion', 'healthInfo.bloodGroup', 'healthInfo.SpecialUserType')->find($id); $parents = Guardian::withoutGlobalScope(BusinessScope::class) ->leftjoin('user_guardian_relations', 'guardians.id', '=', 'user_guardian_relations.guardian_id') ->leftjoin('relation_types', 'relation_types.id', '=', 'user_guardian_relations.relation_type_id') ->where('guardians.business_id', $student->business_id) ->where('user_guardian_relations.user_id', $student->user_id) ->whereIn('user_guardian_relations.relation_type_id', [1, 2]) ->get(); $guardians = Guardian::withoutGlobalScope(BusinessScope::class) ->leftjoin('user_guardian_relations', 'guardians.id', '=', 'user_guardian_relations.guardian_id') ->leftjoin('relation_types', 'relation_types.id', '=', 'user_guardian_relations.relation_type_id') ->where('guardians.business_id', $student->business_id) ->where('user_guardian_relations.user_id', $student->user_id) ->whereNotIn('user_guardian_relations.relation_type_id', [1, 2]) ->get(); // return response()->json(get_defined_vars()); return view("students.details", compact('student', 'parents', 'guardians')); } catch (\Exception $e) { Log::emergency('File:' . $e->getFile() . ' Line:' . $e->getLine() . ' Message:' . $e->getMessage()); $output = [ 'success' => false, 'msg' => $e->getMessage(), ]; return response()->json($output); } } public function exportExcel() { return Excel::download(new MultiTableExport, 'multitable.xlsx'); } public function exportStudnetsHeadings() { return Excel::download(new UsersStudentsHeadingsExport, 'student_headings.xlsx'); } /*-----student signup start------*/ public function indexSign(Request $request) { if (!auth()->user()->can('students.view')) { return view("unauthorized.unauthorized"); } $currentRoute = Route::currentRouteName(); $data['route'] = $currentRoute; $data['title'] = __('student.students'); $data['is_favourite'] = FavouriteMenu::where('route', $currentRoute)->exists(); $students = $academic_years = $student_statuses = $trashed = []; if (auth()->user()->hasRole('Super Admin')) { $data['businesses'] = Business::all(); } if (request()->ajax()) { $students = Student::whereHas('user', function ($query) { $query->where('status', '0'); // Only include users with status 0 }) ->with([ 'user' => function ($query) { $query->where('status', '0'); // Eager load users with status 0 } ]) ->get(); $trashed = Student::onlyTrashed() ->whereHas('user', function ($query) { $query->onlyTrashed(); })->with([ 'user' => function ($query) { $query->withTrashed(); } ]) ->get(); $response['homeData'] = view('students.partials.home_data', compact('data', 'students', 'student_statuses'))->render(); $response['trashData'] = view('students.partials.trash_data', compact('data', 'trashed'))->render(); return response()->json($response); } $student_statuses = StudentStatus::all(); $academic_years = AcademicYear::all(); return view('students.index', compact('data', 'students', 'academic_years', 'student_statuses', 'trashed')); } public function createSignUp($loginCode) { if (!$loginCode) { } $businesss_info = Business::where('login_code', $loginCode)->first(); if (!isset($businesss_info)) { return 'not found'; } $groups = Group::all(); $running_academic_year = AcademicBasicSetting::where(['business_id' => $businesss_info->id, 'is_running' => '1'])->first(); $religions = Religion::all(); $nationalities = Nationality::all(); $relationTypes = RelationType::all(); $blood_groups = BloodGroup::all(); $countries = Country::where('status', '1')->get(); return view('students.create_student_sign_up', compact( 'countries', 'relationTypes', 'blood_groups', 'groups', 'running_academic_year', 'religions', 'nationalities', 'loginCode', 'businesss_info' )); } public function store_signup(Request $request) { $request->validate([ 'business_id' => 'required', 'first_name' => 'required', 'gender' => 'required', 'dob' => 'required', 'username' => 'required', 'academic_class_id' => 'required', 'guardian_username' => 'required', 'guardian_name' => 'required', 'guardian_phone' => 'required', ]); // create guardain $guardainUser = User::create([ 'business_id' => $request->input('business_id'), 'username' => $request->input('guardian_username'), 'password' => $request->input('guardian_password') ? Hash::make($request->input('guardian_password')) : loadDefaultPassword($request->input('business_id')), ]); // assign guardian role // FacadesDB::table('model_has_roles')->insert([ // 'model_id' => $guardainUser->id, // 'model_type' => 'App\Models\User', // 'role_id' => $request->input('re'), // ]); // store address $presentAddress = Address::create([ 'business_id' => $request->input('business_id'), 'country_id' => $request->input('present_country_id'), 'division_id' => $request->input('present_division_id'), 'district_id' => $request->input('present_district_id'), 'upazila_thana_id' => $request->input('present_upazila_thana_id'), 'hold_no' => $request->input('present_hold_no'), 'road_name' => $request->input('present_road_name'), 'village_name' => $request->input('present_village_name'), 'ward_no' => $request->input('present_ward_no'), 'present_post_office' => $request->input('present_present_post_office'), 'postal_code' => $request->input('present_postal_code'), 'note' => $request->input('present_note'), ]); if ($request->input('same_as_present')) { $permanentAddress = $presentAddress; } else { $permanentAddress = Address::create([ 'business_id' => $request->input('business_id'), 'country_id' => $request->input('permanent_country_id'), 'division_id' => $request->input('permanent_division_id'), 'district_id' => $request->input('permanent_district_id'), 'upazila_thana_id' => $request->input('permanent_upazila_thana_id'), 'hold_no' => $request->input('permanent_hold_no'), 'road_name' => $request->input('permanent_road_name'), 'village_name' => $request->input('permanent_village_name'), 'ward_no' => $request->input('permanent_ward_no'), 'present_post_office' => $request->input('permanent_present_post_office'), 'postal_code' => $request->input('permanent_postal_code'), 'note' => $request->input('permanent_note'), ]); } // create user $user = User::create([ 'business_id' => $request->input('business_id'), 'username' => $request->input('username'), 'email' => $request->input('email'), 'first_name' => $request->input('first_name'), 'middle_name' => $request->input('middle_name'), 'last_name' => $request->input('last_name'), 'nick_name' => $request->input('nick_name'), 'mobile' => $request->input('mobile'), 'dob' => $request->input('dob'), 'gender' => $request->input('gender'), 'present_address_id' => $presentAddress ? $presentAddress->id : null, 'permanent_address_id' => $permanentAddress ? $permanentAddress->id : null, 'photo' => $request->hasFile('photo') ? $request->file('photo')->store('public/uploads/users/photos') : null, 'national_id' => $request->input('national_id'), 'passport_no' => $request->input('passport_no'), 'birth_certificate_no' => $request->input('birth_certificate_no'), 'birth_place' => $request->input('birth_place'), 'religion_id' => $request->input('religion_id'), 'nationality_id' => $request->input('nationality_id'), 'driving_license_no' => $request->input('driving_license_no'), 'password' => $request->input('password') ? Hash::make($request->input('password')) : loadDefaultPassword($request->input('business_id')), ]); // assign user roles $userRoleNames = $request->input('user_roles') ?? []; $userRoleIds = Role::whereIn('name', $userRoleNames)->pluck('id')->toArray(); foreach ($userRoleIds as $item) { FacadesDB::table('model_has_roles')->insert([ 'model_id' => $user->id, 'model_type' => 'App\Models\User', 'role_id' => $item, ]); } // Create health information record $healthInformation = HealthInformations::create([ 'blood_group_id' => $request->input('blood_group'), 'emergency_medical_action' => $request->input('emergency_medical_action'), 'medical_history' => $request->input('medical_history'), 'height' => $request->input('height'), 'weight' => $request->input('weight'), 'last_medical_check' => $request->input('last_medical_check') ? date('Y-m-d', strtotime($request->input('last_medical_check'))) : null, 'last_medical_status' => $request->input('last_medical_status'), 'special_user_id' => $request->input('special_user') ?? null, ]); if ($request->hasFile('photo')) { if ($user->photo && Storage::exists($user->photo)) { Storage::delete($user->photo); } $user->update(['photo' => $request->file('photo')->store('public/uploads/users/photos')]); } $academicCertificate = $request->hasFile('academic_certificate') ? $request->file('academic_certificate')->store('public/uploads/students/academic_certificates') : null; $transferCertificate = $request->hasFile('transfer_certificate') ? $request->file('transfer_certificate')->store('public/uploads/students/transfer_certificates') : null; $testimonial = $request->hasFile('testimonial') ? $request->file('testimonial')->store('public/uploads/students/testimonials') : null; // Create the student record with the health information ID $student = new Student(); $student->fill([ 'business_id' => $request->input('business_id'), 'user_id' => $user->id, 'admission_no' => $request->input('admission_no'), 'registration_no' => $request->input('registration_no'), 'unique_id' => $request->input('unique_id'), 'admission_date' => $request->input('admission_date'), 'joining_date' => $request->input('joining_date'), 'guardian_login_user_id' => $guardainUser->id, 'shift_id' => $request->input('shift_id'), 'academic_year_id' => $request->input('academic_year_id'), 'academic_class_id' => $request->input('academic_class_id'), 'group_id' => $request->input('group_id'), 'section_id' => $request->input('section_id'), 'roll_no' => $request->input('roll_no'), 'health_information_id' => $healthInformation ? $healthInformation->id : null, 'previous_school_name' => $request->input('previous_school_name'), 'previous_class' => $request->input('previous_class'), 'previous_section' => $request->input('previous_section'), 'previous_roll' => $request->input('previous_roll'), 'previous_cgpa' => $request->input('previous_cgpa'), 'academic_certificate' => $academicCertificate, 'transfer_certificate' => $transferCertificate, 'testimonial' => $testimonial, 'second_language' => $request->input('second_language'), 'status_id' => $request->input('status_id') ?? null, 'other_mobile' => $request->input('other_mobile'), 'note' => $request->input('student_note'), 'created_by' => $user->id, ]); // Manually set admission_status to '1' $student->admission_status = '1'; $student->save(); // save guardians info foreach ($request->input('guardian_name') as $key => $item) { $guardian = Guardian::create([ 'business_id' => $request->input('business_id'), 'student_id' => $student->id, 'guardian_name' => $item, 'guardian_phone' => $request->input('guardian_phone')[$key] ?? null, 'guardian_email' => $request->input('guardian_email')[$key] ?? null, 'guardian_education' => $request->input('guardian_education')[$key] ?? null, 'guardian_profession' => $request->input('guardian_profession')[$key] ?? null, 'guardian_dead_date' => $request->input('guardian_dead_date')[$key] ?? null, 'created_by' => $user->id, ]); UserGuardianRelation::create([ 'user_id' => $user->id, 'guardian_id' => $guardian->id, 'relation_type_id' => $request->input('relation_type_id')[$key] ?? null, ]); } foreach ($request->input('guardian_user_id') as $key => $item) { if (!$request->input('existing_relation_type_id')[$key]) { continue; } UserGuardianRelation::create([ 'user_id' => $user->id, 'guardian_id' => $item, 'relation_type_id' => $request->input('existing_relation_type_id')[$key] ?? null, ]); } $loginCode = $request->input('loginCode'); return redirect()->route('login', $loginCode)->with('success', __('core.create_successfully')); } public function export(Request $request) { $students = Student::all(); // Fetch all students return Excel::download(new StudentsExport($students), 'students.xlsx'); } public function bulk_create() { if (!auth()->user()->can('students.create')) { return view("unauthorized.unauthorized"); } $currentRoute = Route::currentRouteName(); $data['route'] = $currentRoute; $data['title'] = __('student.create'); $data['is_favourite'] = FavouriteMenu::where('route', $currentRoute)->exists(); if (auth()->user()->hasRole('Super Admin')) { $data['businesses'] = Business::all(); } $relationTypes = RelationType::all(); $countries = Country::all(); $bloodGroups = BloodGroup::all(); return view('students.bulk_create', compact('data', 'relationTypes', "countries", "bloodGroups")); } public function bulk_store(Request $request) { $business_id = $request->input("business_id"); $bulk_user_rule = [ "business_id" => "required", 'username.*' => [ 'required', Rule::unique('users', 'username')->where('business_id', $business_id), ], "password" => "nullable", "gender.*" => "required", "dob.*" => "required", "academic_year_id.*" => "required", "academic_class_id.*" => "required", "admission_no.*" => "required", "admission_date.*" => "required", "joining_date.*" => "required", "user_roles.*" => "required", 'guardian_username.*' => [ 'nullable', 'string', Rule::unique('users', 'username') ->where('business_id', $request->input('business_id')) ->whereNull('deleted_at'), // If soft deletes are used ], ]; $userValidation = $request->validate($bulk_user_rule); // Initialize arrays to track created users and students $createdUsers = []; $createdStudents = []; FacadesDB::beginTransaction(); // Start transaction try { $user_input = $request->only(["username", "password", "first_name", "middle_name", "last_name", "nickname"]); foreach ($user_input['username'] as $key => $value) { $exist = User::where("username", $value)->where("business_id", $business_id)->exists(); if ($exist) { continue; } else { if ( $request->input('present_country_id')[$key] || $request->input('present_division_id')[$key] || $request->input('present_district_id')[$key] || $request->input('present_upazila_thana_id')[$key] || $request->input('hold_no')[$key] || $request->input('road_name')[$key] || $request->input('village_name')[$key] || $request->input('ward_no')[$key] || $request->input('post_office')[$key] || $request->input('postal_code')[$key] || $request->input('address')[$key] ) { $presentAddress = Address::create([ 'business_id' => $request->input('business_id'), 'country_id' => $request->input('present_country_id')[$key] ?? null, 'division_id' => $request->input('present_division_id')[$key] ?? null, 'district_id' => $request->input('present_district_id')[$key] ?? null, 'upazila_thana_id' => $request->input('present_upazila_thana_id')[$key] ?? null, 'hold_no' => $request->input('hold_no')[$key] ?? null, 'road_name' => $request->input('road_name')[$key] ?? null, 'village_name' => $request->input('village_name')[$key] ?? null, 'ward_no' => $request->input('ward_no')[$key] ?? null, 'present_post_office' => $request->input('post_office')[$key] ?? null, 'postal_code' => $request->input('postal_code')[$key] ?? null, 'note' => $request->input('address')[$key] ?? null, ]); } $user_create = [ 'username' => $value, 'business_id' => $business_id, 'password' => $request->input('password') ? Hash::make($request->input('password')[$key]) : loadDefaultPassword($business_id), 'first_name' => $user_input['first_name'][$key] ?? null, 'middle_name' => $user_input['middle_name'][$key] ?? null, 'last_name' => $user_input['last_name'][$key] ?? null, 'nick_name' => $user_input['nickname'][$key] ?? null, 'email' => $user_input['email'][$key] ?? null, 'gender' => $user_input['gender'][$key] ?? null, 'dob' => $user_input['dob'][$key] ?? null, 'religion_id' => $user_input['religion_id'][$key] ?? null, 'present_address_id' => $presentAddress->id ?? null, 'permanent_address_id' => null, 'national_id' => $user_input['national_id'][$key] ?? null, 'passport_no' => $user_input['passport_no'][$key] ?? null, 'nationality_id' => $user_input['nationality_id'][$key] ?? null, ]; $user = User::create($user_create); $createdUsers[] = $user->id; // Get role names and assign roles $roleNames = $request->input('user_roles')[$key] ?? []; $roleIds = Role::whereIn('name', $roleNames)->pluck('id')->toArray(); foreach ($roleIds as $roleId) { FacadesDB::table('model_has_roles')->insert([ 'model_id' => $user->id, 'model_type' => 'App\Models\User', 'role_id' => $roleId, ]); } if ($request->input('guardian_username')[$key]) { // create guardain $guardainUser = User::create([ 'business_id' => $request->input('business_id'), 'username' => $request->input('guardian_username')[$key] ?? null, 'password' => $request->input('guardian_password')[$key] ? Hash::make($request->input('guardian_password')[$key]) : loadDefaultPassword($request->input('business_id')), ]); } if ( $request->input('blood_group')[$key] || $request->input('emergency_medical_action')[$key] || $request->input('medical_history')[$key] || $request->input('height')[$key] || $request->input('weight')[$key] || $request->input('last_medical_check')[$key] || $request->input('last_medical_check')[$key] || $request->input('last_medical_status')[$key] || $request->input('special_user')[$key] ) { // Create health information record $healthInformation = HealthInformations::create([ 'blood_group_id' => $request->input('blood_group')[$key] ?? null, 'emergency_medical_action' => $request->input('emergency_medical_action')[$key] ?? null, 'medical_history' => $request->input('medical_history')[$key] ?? null, 'height' => $request->input('height')[$key] ?? null, 'weight' => $request->input('weight')[$key] ?? null, 'last_medical_check' => $request->input('last_medical_check') && $request->input("last_medical_check")[$key] ? date('Y-m-d', strtotime($request->input('last_medical_check')[$key])) : null, 'last_medical_status' => $request->input('last_medical_status')[$key] ?? null, 'special_user_id' => $request->input('special_user')[$key] ?? null, ]); } // Create the student record with the health information ID $student = Student::create([ 'business_id' => $request->input('business_id'), 'user_id' => $user->id, 'admission_no' => $request->input('admission_no')[$key] ?? null, 'registration_no' => $request->input('registration_no')[$key] ?? null, 'unique_id' => $request->input('unique_id')[$key] ?? null, 'admission_date' => $request->input('admission_date')[$key] ?? null, 'joining_date' => $request->input('joining_date')[$key] ?? null, 'guardian_login_user_id' => $guardainUser->id[$key] ?? null, 'shift_id' => $request->input('shift_id')[$key] ?? null, 'academic_year_id' => $request->input('academic_year_id')[$key] ?? null, 'academic_class_id' => $request->input('academic_class_id')[$key] ?? null, 'group_id' => $request->input('group_id')[$key] ?? null, 'section_id' => $request->input('section_id')[$key] ?? null, 'roll_no' => $request->input('roll_no')[$key] ?? null, 'health_information_id' => $healthInformation ? $healthInformation->id : null, 'previous_school_name' => $request->input('previous_school_name')[$key] ?? null, 'previous_class' => $request->input('previous_class')[$key] ?? null, 'previous_section' => $request->input('previous_section')[$key] ?? null, 'previous_roll' => $request->input('previous_roll')[$key] ?? null, 'previous_cgpa' => $request->input('previous_cgpa')[$key] ?? null, 'academic_certificate' => $academicCertificate[$key] ?? null, 'transfer_certificate' => $transferCertificate[$key] ?? null, 'testimonial' => $testimonial[$key] ?? null, 'second_language' => $request->input('second_language')[$key] ?? null, 'status_id' => $request->input('status_id')[$key] ?? null, 'other_mobile' => $request->input('other_mobile')[$key] ?? null, 'note' => $request->input('student_note')[$key] ?? null, ]); $createdStudents[] = $student->id; $guardian = Guardian::create([ 'business_id' => $request->input('business_id'), 'student_id' => $student->id, 'guardian_name' => $request->input('guardian_name')[$key] ?? null, 'guardian_phone' => $request->input('guardian_phone')[$key] ?? null, 'guardian_email' => $request->input('guardian_email')[$key] ?? null, 'guardian_education' => $request->input('guardian_education')[$key] ?? null, 'guardian_profession' => $request->input('guardian_profession')[$key] ?? null, 'guardian_dead_date' => $request->input('guardian_dead_date')[$key] ?? null, ]); UserGuardianRelation::create([ 'user_id' => $user->id, 'guardian_id' => $guardian->id, 'relation_type_id' => $request->input('relation_type_id')[$key] ?? null, ]); } } FacadesDB::commit(); // Commit transaction if successful return response()->json([ 'success' => true, 'msg' => __('core.student_created'), ]); // return view(route('students.index')); } catch (\Exception $e) { FacadesDB::rollback(); // Rollback transaction on error // Force delete created users and students User::whereIn('id', $createdUsers)->forceDelete(); Student::whereIn('id', $createdStudents)->forceDelete(); Log::emergency('File:' . $e->getFile() . ' Line:' . $e->getLine() . ' Message:' . $e->getMessage()); return response()->json([ 'success' => false, 'msg' => __('core.something_went_wrong'), 'er' => 'File:' . $e->getFile() . ' Line:' . $e->getLine() . ' Message:' . $e->getMessage() ]); } } // validate_admission_no function validate_admission_no(Request $request) { $business_id = $request->business_id ?? auth()->user()->business_id; $admission_no = $request->admission_no; if ($admission_no) { $student = Student::where("business_id", $business_id)->where("admission_no", $admission_no)->get(); if ($student && count($student) > 0) { return response()->json(["success" => false]); } else { return response()->json(["success" => true]); } } else { $student = Student::where("business_id", $business_id)->latest()->first(); return response()->json($student); } } }