Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
forbidals
/
admin_panel
/
database
/
seeders
:
DummySampleDataSeeder.php
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php namespace Database\Seeders; use App\Models\ClassSchool; use App\Models\ClassSection; use App\Models\ClassSubject; use App\Models\Feature; use App\Models\Mediums; use App\Models\Package; use App\Models\PackageFeature; use App\Models\School; use App\Models\Section; use App\Models\SessionYear; use App\Models\Staff; use App\Models\Students; use App\Models\Subject; use App\Models\User; use App\Models\Holiday; use App\Models\Assignment; use App\Models\Announcement; use App\Models\Timetable; use App\Models\OnlineExam; use App\Models\Exam; use App\Models\ExamTimetable; use App\Models\ExamResult; use App\Models\Fee; use App\Models\File; use App\Models\FeesType; use App\Models\FeeInstallment; use App\Models\Attendance; use App\Models\Slider; use App\Models\Notification; use App\Models\Leave; use App\Models\ExpenseCategory; use App\Models\Expense; use App\Models\PayrollSetting; use App\Models\Payroll; use App\Models\FormField; use App\Models\Fees; use App\Models\FeesClassType; use App\Models\FeesInstallment; use App\Models\Lesson; use App\Models\LessonCommon; use App\Models\LessonTopic; use App\Models\TopicCommon; use App\Models\Semester; use App\Models\AssignmentCommon; use App\Services\CachingService; use App\Services\SchoolDataService; use App\Services\UserService; use Illuminate\Database\Seeder; use Illuminate\Support\Carbon; use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Config; use Illuminate\Support\Facades\Storage; use Faker\Factory as Faker; use App\Models\AnnouncementClass; use Spatie\Permission\Models\Permission; use Spatie\Permission\Models\Role; class DummySampleDataSeeder extends Seeder { private SchoolDataService $schoolService; private $faker; private CachingService $cache; public function __construct(SchoolDataService $schoolService, CachingService $cache) { $this->schoolService = $schoolService; $this->cache = $cache; $this->faker = Faker::create(); } public function run() { try { // Create a default school if none exists $school = School::firstOrCreate( ['id' => 1], [ 'name' => 'Demo School', 'address' => '123 Education Street', 'support_phone' => '+1234567890', 'support_email' => 'support@demoschool.com', 'tagline' => 'Education for All', 'logo' => 'default-logo.png', 'status' => 1, 'database_name' => 'school_demo' ] ); $schoolId = $school->id; // Set up database connection if needed if ($school->database_name) { Config::set('database.connections.school.database', $school->database_name); DB::purge('school'); DB::connection('school')->reconnect(); DB::setDefaultConnection('school'); } DB::statement('SET FOREIGN_KEY_CHECKS=0;'); try { // Seed Session Years // $this->seedSessionYears($schoolId); // // Seed Custom Fields // $this->seedCustomFields($schoolId); // // Seed Mediums // $this->seedMediums($schoolId); // // Seed Streams // $this->seedStreams($schoolId); // // Seed Shifts // $this->seedShifts($schoolId); // // Seed Semesters // $this->seedSemesters($schoolId); // // Seed Sections // $this->seedSections($schoolId); // // Seed Classes // $this->seedClasses($schoolId); // // Seed Class Groups // $this->seedClassGroups($schoolId); // // Seed Class Sections // $this->seedClassSections($schoolId); // // Seed Subjects // $this->seedSubjects($schoolId); // // Seed Class Subjects // $this->seedClassSubjects($schoolId); // // Seed Users // $this->seedUsers($schoolId); // // Seed Class Teachers // $this->seedClassTeachers($schoolId); // Seed Students $this->seedStudents($schoolId); // Seed Admission Inquiries // $this->seedAdmissionInquiries($schoolId); // // Seed Fee Types // $this->seedFeesTypes($schoolId); // // Seed Fees // $this->seedManageFees($schoolId); // // Seed Attendance // $this->seedAttendance($schoolId); // // Seed Offline Exams // $this->seedExams($schoolId); // // Seed Online Exams // $this->seedOnlineExams($schoolId); // // Seed Exam Results // $this->seedExamResults($schoolId); // // Seed Expense Categories // $this->seedExpenseCategories($schoolId); // // Seed Expenses // $this->seedExpenses($schoolId); // // Seed Payroll Settings // $this->seedPayrollSettings($schoolId); // // Seed Payrolls // $this->seedPayrolls($schoolId); // // Seed Roles // $this->seedStaffRoles($schoolId); // // Seed Staff // $this->seedStaff($schoolId); // // Seed Leaves // $this->seedLeaves($schoolId); // // Seed Holidays // $this->seedHolidays($schoolId); // // Seed Notifications // $this->seedNotifications($schoolId); // // Seed Announcements // $this->seedAnnouncements($schoolId); // // Seed Gallery // $this->seedGallery($schoolId); // // Seed Certificates // $this->seedCertificates($schoolId); // // Seed Timetable // $this->seedTimetable($schoolId); // // Seed Sliders // $this->seedSliders($schoolId); // // Seed Lesson // $this->seedLesson($schoolId); // // Seed Lesson Topic // $this->seedLessonTopic($schoolId); // // Seed Assignment // $this->seedAssignment($schoolId); $this->command->info('Sample data seeded successfully!'); } catch (\Exception $e) { $this->command->error('Error seeding data: ' . $e->getMessage()); throw $e; } finally { DB::statement('SET FOREIGN_KEY_CHECKS=1;'); } } catch (\Exception $e) { $this->command->error('Error in seeder: ' . $e->getMessage()); throw $e; } } private function seedStaffRoles($schoolId) { $roles = [ 'Accountant', 'Librarian', 'Receptionist', 'Principal', 'Vice Principal', 'Staff', ]; $permissions = Permission::all(); foreach ($roles as $role) { $role = Role::create(['name' => $role, 'school_id' => $schoolId]); $role->syncPermissions($permissions); } } private function seedStaff($schoolId) { $roles = Role::where('school_id', $schoolId)->get(); for ($i = 1; $i <= 10; $i++) { $number = $this->faker->phoneNumber; $user = User::create([ 'first_name' => "Staff " . $i, 'last_name' => $this->faker->lastName, 'email' => strtolower("staff" . $i) . '@example.com', 'password' => Hash::make('1234567890'), 'gender' => rand(0, 1) ? 'Male' : 'Female', 'mobile' => $number, 'dob' => $this->faker->date('Y-m-d', '2000-01-01'), 'image' => null, 'current_address' => "Current Address " . $i, 'permanent_address' => "Permanent Address " . $i, 'occupation' => null, 'status' => 1, 'reset_request' => 0, 'fcm_id' => null, 'school_id' => $schoolId, 'language' => 'en', 'remember_token' => null, 'email_verified_at' => now(), 'two_factor_enabled' => 1, 'two_factor_secret' => null, 'two_factor_expires_at' => null, 'created_at' => now(), 'updated_at' => now(), 'deleted_at' => null ]); foreach ($roles as $role) { $user->assignRole($role); } } } private function seedSessionYears($schoolId) { try { $sessionYears = [ [ 'name' => '2023-2024', 'default' => 1, 'start_date' => '2023-04-01', 'end_date' => '2024-03-31', 'school_id' => $schoolId, ], [ 'name' => '2024-2025', 'default' => 0, 'start_date' => '2024-04-01', 'end_date' => '2025-03-31', 'school_id' => $schoolId, ], ]; foreach ($sessionYears as $year) { SessionYear::updateOrCreate( [ 'name' => $year['name'], 'school_id' => $schoolId ], array_merge($year, [ 'created_at' => now(), 'updated_at' => now() ]) ); } } catch (\Exception $e) { $this->command->error('Error seeding session years: ' . $e->getMessage()); throw $e; } } private function seedCustomFields($schoolId) { $formFields = [ [ 'name' => 'Student First Name', 'type' => 'text', 'is_required' => 0, 'default_values' => null, 'school_id' => $schoolId, 'user_type' => 1, 'rank' => 1, 'display_on_id' => 0, ], [ 'name' => 'Blood group', 'type' => 'dropdown', 'is_required' => 0, 'default_values' => json_encode(["A+", "B+", "A", "B", "O", "O+"]), 'school_id' => $schoolId, 'user_type' => 1, 'rank' => 2, 'display_on_id' => 1, ], [ 'name' => 'Previous School', 'type' => 'text', 'is_required' => 0, 'default_values' => null, 'school_id' => $schoolId, 'user_type' => 1, 'rank' => 3, 'display_on_id' => 0, ], [ 'name' => 'Transport Route', 'type' => 'dropdown', 'is_required' => 0, 'default_values' => json_encode(['Route A', 'Route B', 'Route C', 'Route D']), 'school_id' => $schoolId, 'user_type' => 1, 'rank' => 4, 'display_on_id' => 0, ], [ 'name' => 'Experience Years', 'type' => 'number', 'is_required' => 1, 'default_values' => null, 'school_id' => $schoolId, 'user_type' => 2, 'rank' => 1, 'display_on_id' => 0, ], [ 'name' => 'Additional Qualifications', 'type' => 'textarea', 'is_required' => 0, 'default_values' => null, 'school_id' => $schoolId, 'user_type' => 2, 'rank' => 2, 'display_on_id' => 0, ] ]; foreach ($formFields as $field) { DB::table('form_fields')->insert(array_merge($field, [ 'created_at' => now(), 'updated_at' => now(), ])); } } private function seedMediums($schoolId) { Mediums::insert([ [ 'name' => 'English', 'school_id' => $schoolId, 'created_at' => now(), 'updated_at' => now(), ], [ 'name' => 'Gujarati', 'school_id' => $schoolId, 'created_at' => now(), 'updated_at' => now(), ], [ 'name' => 'Hindi', 'school_id' => $schoolId, 'created_at' => now(), 'updated_at' => now(), ], ]); } private function seedStreams($schoolId) { $streams = [ 'Science', 'Commerce', 'Arts', 'Vocational' ]; foreach ($streams as $stream) { DB::table('streams')->insert([ 'name' => $stream, 'school_id' => $schoolId, 'created_at' => now(), 'updated_at' => now() ]); } } private function seedShifts($schoolId) { $shifts = [ [ 'name' => 'Morning Shift', 'start_time' => '07:30:00', 'end_time' => '13:30:00' ], [ 'name' => 'Afternoon Shift', 'start_time' => '13:00:00', 'end_time' => '19:00:00' ] ]; foreach ($shifts as $shift) { DB::table('shifts')->insert(array_merge($shift, [ 'school_id' => $schoolId, 'status' => 1, 'created_at' => now(), 'updated_at' => now() ])); } } private function seedSemesters($schoolId) { $semesters = [ [ 'name' => 'Semester 1', 'start_month' => 4, // April 'end_month' => 9, // September ], [ 'name' => 'Semester 2', 'start_month' => 10, // October 'end_month' => 3, // March ] ]; foreach ($semesters as $semester) { DB::table('semesters')->insert(array_merge($semester, [ 'school_id' => $schoolId, 'created_at' => now(), 'updated_at' => now() ])); } } private function seedSections($schoolId) { Section::insert([ [ 'name' => 'A', 'school_id' => $schoolId, 'created_at' => now(), 'updated_at' => now(), ], [ 'name' => 'B', 'school_id' => $schoolId, 'created_at' => now(), 'updated_at' => now(), ], [ 'name' => 'C', 'school_id' => $schoolId, 'created_at' => now(), 'updated_at' => now(), ], ]); } private function seedClasses($schoolId) { $mediums = Mediums::where('school_id', $schoolId)->pluck('id'); $shifts = DB::table('shifts')->where('school_id', $schoolId)->pluck('id'); $streams = DB::table('streams')->where('school_id', $schoolId)->pluck('id'); $classes = [ ['name' => 'Class 1', 'include_semesters' => 0], ['name' => 'Class 2', 'include_semesters' => 0], ['name' => 'Class 3', 'include_semesters' => 0], ['name' => 'Class 4', 'include_semesters' => 0], ['name' => 'Class 5', 'include_semesters' => 0], ['name' => 'Class 6', 'include_semesters' => 0], ['name' => 'Class 7', 'include_semesters' => 0], ['name' => 'Class 8', 'include_semesters' => 0], ['name' => 'Class 9', 'include_semesters' => 1], ['name' => 'Class 10', 'include_semesters' => 1], ['name' => 'Class 11', 'include_semesters' => 1], ['name' => 'Class 12', 'include_semesters' => 1], ]; foreach ($mediums as $mediumId) { foreach ($classes as $class) { ClassSchool::create([ 'name' => $class['name'], 'medium_id' => $mediumId, 'shift_id' => $shifts->random(), 'stream_id' => $class['include_semesters'] ? $streams->random() : null, 'include_semesters' => $class['include_semesters'], 'school_id' => $schoolId, 'created_at' => now(), 'updated_at' => now(), ]); } } } private function seedClassGroups($schoolId) { $groups = [ 'Group A - Science', 'Group B - Commerce', 'Group C - Arts', 'Group D - Vocational' ]; foreach ($groups as $group) { DB::table('class_groups')->insert([ 'name' => $group, 'school_id' => $schoolId, 'created_at' => now(), 'updated_at' => now() ]); } } private function seedClassSections($schoolId) { $classes = ClassSchool::where('school_id', $schoolId)->get(); $sections = Section::where('school_id', $schoolId)->get(); foreach ($classes as $class) { foreach ($sections as $section) { // Check if combination already exists $exists = ClassSection::where([ 'class_id' => $class->id, 'section_id' => $section->id, 'medium_id' => $class->medium_id, 'school_id' => $schoolId ])->exists(); if (!$exists) { ClassSection::create([ 'class_id' => $class->id, 'section_id' => $section->id, 'medium_id' => $class->medium_id, 'school_id' => $schoolId, 'created_at' => now(), 'updated_at' => now(), ]); } } } } private function seedSubjects($schoolId) { $classes = ClassSchool::where('school_id', $schoolId)->get(); $subjects = [ [ 'name' => 'Mathematics', 'type' => 'Compulsory', 'code' => 'MATH', 'background_color' => '#000000', ], [ 'name' => 'Science', 'type' => 'Compulsory', 'code' => 'SCI', 'background_color' => '#000000', ], [ 'name' => 'English', 'type' => 'Compulsory', 'code' => 'ENG', 'background_color' => '#000000', ], //elective subjects [ 'name' => 'Elective 1', 'type' => 'Elective', 'code' => 'ELE', 'background_color' => '#000000', ], [ 'name' => 'Elective 2', 'type' => 'Elective', 'code' => 'ELE', 'background_color' => '#000000', ], ]; foreach ($classes as $class) { foreach ($subjects as $subject) { // Check if subject already exists $exists = Subject::where([ 'name' => $subject['name'], 'medium_id' => $class->medium_id, 'school_id' => $schoolId, ])->exists(); if (!$exists) { Subject::create([ 'name' => $subject['name'], 'code' => $subject['code'], 'type' => $subject['type'], 'medium_id' => $class->medium_id, 'school_id' => $schoolId, 'created_at' => now(), 'updated_at' => now(), ]); } } } // After creating subjects, create class subject mappings $this->seedClassSubjects($schoolId); } private function seedClassSubjects($schoolId) { try { $classes = ClassSchool::where('school_id', $schoolId)->get(); $subjects = Subject::where('school_id', $schoolId)->get(); foreach ($classes as $class) { foreach ($subjects as $subject) { DB::table('class_subjects')->updateOrInsert( [ 'class_id' => $class->id, 'subject_id' => $subject->id, 'school_id' => $schoolId, ], [ 'type' => $subject->type, 'created_at' => now(), 'updated_at' => now(), ] ); } } } catch (\Exception $e) { $this->command->error('Error seeding class subjects: ' . $e->getMessage()); throw $e; } } private function seedUsers($schoolId) { $faker = Faker::create(); $sessionYear = SessionYear::where('school_id', $schoolId)->where('default', 1)->first(); for ($i = 1; $i <= 10; $i++) { $firstName = $faker->firstName; $lastName = $faker->lastName; $number = rand(1000000000, 9999999999); $userData = [ 'first_name' => $firstName, 'last_name' => $lastName, 'email' => strtolower($firstName) . $i . '@example.com', 'password' => Hash::make($number), 'gender' => $faker->randomElement(['Male', 'Female']), 'mobile' => $number, 'dob' => $faker->date('Y-m-d', '2000-01-01'), 'image' => null, 'current_address' => $faker->address, 'permanent_address' => $faker->address, 'occupation' => null, 'status' => 1, 'reset_request' => 0, 'fcm_id' => null, 'school_id' => $schoolId, 'language' => 'en', 'remember_token' => null, 'email_verified_at' => now(), 'two_factor_enabled' => 1, 'two_factor_secret' => null, 'two_factor_expires_at' => null, 'created_at' => now(), 'updated_at' => now(), 'deleted_at' => null ]; $user = User::create($userData); $user->assignRole('Teacher'); // Add leave permissions $leave_permission = [ 'leave-list', 'leave-create', 'leave-edit', 'leave-delete', ]; $user->givePermissionTo($leave_permission); // Create staff record Staff::create([ 'user_id' => $user->id, 'qualification' => $faker->randomElement(['B.Ed', 'M.Ed', 'PhD', 'M.A, B.Ed', 'M.Com, B.Ed', 'B.Sc, B.Ed']), 'salary' => $faker->numberBetween(30000, 80000), 'joining_date' => $faker->dateTimeBetween('-2 years', 'now')->format('Y-m-d'), 'session_year_id' => $sessionYear->id, 'join_session_year_id' => $sessionYear->id, 'leave_session_year_id' => null, 'created_at' => now(), 'updated_at' => now() ]); } } private function seedClassTeachers($schoolId) { // Get all class sections $classSections = ClassSection::where('school_id', $schoolId)->get(); // Get all teachers $teachers = User::where('school_id', $schoolId) ->whereHas('roles', function ($query) { $query->where('name', 'Teacher'); }) ->get(); if ($teachers->isEmpty()) { return; } foreach ($classSections as $classSection) { // Randomly assign 1-2 class teachers per section $classTeachers = $teachers->random(rand(1, 2)); foreach ($classTeachers as $teacher) { // Create class teacher assignment DB::table('class_teachers')->insert([ 'class_section_id' => $classSection->id, 'teacher_id' => $teacher->id, 'school_id' => $schoolId, 'created_at' => now(), 'updated_at' => now() ]); } // Get subjects for this class $classSubjects = DB::table('class_subjects') ->where('class_id', $classSection->class_id) ->where('school_id', $schoolId) ->get(); foreach ($classSubjects as $classSubject) { // Randomly assign 1-2 teachers per subject $subjectTeachers = $teachers->random(rand(1, 2)); foreach ($subjectTeachers as $teacher) { // Create subject teacher assignment DB::table('subject_teachers')->insert([ 'class_section_id' => $classSection->id, 'subject_id' => $classSubject->subject_id, 'teacher_id' => $teacher->id, 'class_subject_id' => $classSubject->id, 'school_id' => $schoolId, 'created_at' => now(), 'updated_at' => now() ]); } } } } private function seedStudents($schoolId) { $classSections = ClassSection::where('school_id', $schoolId)->get(); $sessionYear = SessionYear::where('school_id', $schoolId)->where('default', 1)->first(); foreach ($classSections as $classSection) { for ($i = 1; $i <= 10; $i++) { // Create student with admission details $userService = app(UserService::class); $sessionYear = SessionYear::where('school_id', $schoolId)->where('default', 1)->first(); $get_student = Students::latest('id')->withTrashed()->pluck('id')->first(); $admission_no = $sessionYear->name . '0' . $schoolId . '0' . ($get_student + 1); $guardian = $userService->createOrUpdateParent('Guardian ' . $i, 'Guardian ' . $i, "guardian{$i}_{$classSection->id}@example.com", rand(1000000000, 9999999999), rand(1, 2) == 1 ? 'Male' : 'Female', null); $student = $userService->createStudentUser("Student " . $i, "Student " . $i, $admission_no, rand(1000000000, 9999999999), date('Y-m-d', strtotime('-10 years')), rand(1, 2) == 1 ? 'Male' : 'Female', null, $classSection->id, now()->subMonths(rand(1, 6)), 'Test Address', 'Test Permanent Address', $sessionYear->id, $guardian->id, [], 1, false); // if($student){ // // Add custom field data // $this->addStudentCustomFieldData($student->id, $schoolId); // } } } } private function seedAdmissionInquiries($schoolId) { $classSections = ClassSection::where('school_id', $schoolId)->get(); foreach ($classSections as $classSection) { for ($i = 1; $i <= 10; $i++) { $password = rand(1000000000, 9999999999); $parent = array( 'first_name' => "Guardian " . $i, 'last_name' => "Guardian " . $i, 'mobile' => rand(1000000000, 9999999999), 'gender' => rand(1, 2) == 1 ? 'Male' : 'Female', 'school_id' => $schoolId ); //NOTE : This line will return the old values if the user is already exists $user = User::where('email', "guardian{$i}_{$classSection->id}@example.com")->first(); if (!empty($user)) { $user->assignRole('Guardian'); $user->update($parent); } else { $parent['password'] = Hash::make($password); $user = User::create($parent); $user->assignRole('Guardian'); } $student = Students::create([ 'user_id' => $user->id, 'class_section_id' => $classSection->id, 'admission_no' => $admission_no, 'roll_number' => null, 'admission_date' => now(), 'guardian_id' => $user->id, 'session_year_id' => $sessionYear->id, 'class_id' => $classSection->class_id ?? null, 'application_type' => "online", 'application_status' => 0, 'school_id' => $schoolId, ]); } } } private function addStudentCustomFieldData($studentId, $schoolId) { $customFields = FormField::where('school_id', $schoolId)->where('user_type', 1)->get(); dd($customFields); foreach ($customFields as $field) { $value = ''; switch ($field->type) { case 'text': $value = $faker->name; break; case 'dropdown': // Parse the default_values JSON string to array $options = json_decode($field->default_values, true); if (!empty($options)) { $value = $options[array_rand($options)]; } break; case 'number': if (str_contains(strtolower($field->name), 'year')) { $value = $faker->numberBetween(1, 10); } else { $value = $faker->numberBetween(1, 100); } break; case 'textarea': $value = $faker->paragraph(1); break; case 'date': $value = $faker->date(); break; case 'checkbox': $value = $faker->boolean ? '1' : '0'; break; case 'radio': $options = json_decode($field->default_values, true); if (!empty($options)) { $value = $options[array_rand($options)]; } break; default: $value = $faker->word; } // Insert the custom field value DB::table('')->insert([ 'form_field_id' => $field->id, 'field_value' => $value, 'model_type' => 'App\\Models\\Students', 'model_id' => $studentId, 'school_id' => $schoolId, 'created_at' => now(), 'updated_at' => now(), ]); } } private function seedFeesTypes($schoolId) { try { $sessionYear = SessionYear::where('school_id', $schoolId) ->where('default', 1) ->first(); if (!$sessionYear) { throw new \Exception('Default session year not found'); } $feeTypes = [ [ 'name' => 'Tuition Fee', 'description' => 'Monthly tuition fee', 'school_id' => $schoolId ], [ 'name' => 'Development Fee', 'description' => 'Annual development charges', 'school_id' => $schoolId ], [ 'name' => 'Library Fee', 'description' => 'Annual library charges', 'school_id' => $schoolId ], [ 'name' => 'Computer Lab Fee', 'description' => 'Computer laboratory charges', 'school_id' => $schoolId ], [ 'name' => 'Sports Fee', 'description' => 'Sports and physical education charges', 'school_id' => $schoolId ] ]; foreach ($feeTypes as $feeType) { $type = FeesType::updateOrCreate( [ 'name' => $feeType['name'], 'school_id' => $schoolId ], array_merge($feeType, [ 'created_at' => now(), 'updated_at' => now() ]) ); } } catch (\Exception $e) { $this->command->error('Error seeding fee types: ' . $e->getMessage()); throw $e; } } private function seedManageFees($schoolId) { try { // Get required data $sessionYear = SessionYear::where('school_id', $schoolId) ->where('default', 1) ->first(); if (!$sessionYear) { throw new \Exception('Default session year not found'); } $semester = Semester::where('school_id', $schoolId)->first(); // Get all classes $classes = ClassSchool::where('school_id', $schoolId)->get(); // Get or create school admin $schoolAdmin = User::where('school_id', $schoolId) ->whereHas('roles', function ($q) { $q->where('name', 'School Admin'); }) ->first(); if (!$schoolAdmin) { $schoolAdmin = User::create([ 'first_name' => 'School', 'last_name' => 'Admin', 'email' => 'admin_' . $schoolId . '@school.com', 'password' => Hash::make('password'), 'school_id' => $schoolId ]); $schoolAdmin->assignRole('School Admin'); } // Get fee types $feeTypes = FeesType::where('school_id', $schoolId)->get(); if ($feeTypes->isEmpty()) { throw new \Exception('No fee types found. Please run seedFeesTypes first.'); } foreach ($classes as $class) { // Create a fee record for each class $feeName = "School Fees - " . $class->name; $fee = Fee::updateOrCreate( [ 'name' => $feeName, 'class_id' => $class->id, 'school_id' => $schoolId, 'session_year_id' => $sessionYear->id ], [ 'due_date' => now()->addMonths(1), 'due_charges' => 100.00, 'due_charges_amount' => 0.00, 'created_at' => now(), 'updated_at' => now() ] ); // Create fee class types foreach ($feeTypes as $index => $feeType) { FeesClassType::updateOrCreate( [ 'fees_id' => $fee->id, 'class_id' => $class->id, 'fees_type_id' => $feeType->id, ], [ 'amount' => rand(1000, 5000), 'optional' => $index === count($feeTypes) - 1 ? 1 : 0 // Make last fee type optional ] ); } // Create installments $installments = [ [ 'name' => 'First Installment', 'due_date' => now()->addMonth(), 'amount' => 3000 ], [ 'name' => 'Second Installment', 'due_date' => now()->addMonths(2), 'amount' => 3000 ], [ 'name' => 'Final Installment', 'due_date' => now()->addMonths(3), 'amount' => 2000 ] ]; foreach ($installments as $installment) { FeeInstallment::updateOrCreate( [ 'name' => $installment['name'], 'fees_id' => $fee->id, 'session_year_id' => $sessionYear->id ], [ 'due_date' => $installment['due_date'], 'due_charges_type' => 'fixed', 'due_charges' => 100, 'installment_amount' => $installment['amount'], 'created_at' => now(), 'updated_at' => now() ] ); } } } catch (\Exception $e) { $this->command->error('Error seeding fees: ' . $e->getMessage()); throw $e; } } private function seedAttendance($schoolId) { $students = Students::where('school_id', $schoolId)->get(); $sessionYear = SessionYear::where('school_id', $schoolId)->where('default', 1)->first(); // Generate attendance for last 30 days for ($i = 30; $i >= 0; $i--) { $date = now()->subDays($i); // Skip weekends if ($date->isWeekend()) { continue; } foreach ($students as $student) { // 90% chance of present $status = $this->faker->randomElement(['present', 'present', 'present', 'present', 'present', 'present', 'present', 'present', 'present', 'absent']); Attendance::create([ 'student_id' => $student->id, 'class_section_id' => $student->class_section_id, 'session_year_id' => $sessionYear->id, 'date' => $date, 'status' => $status, 'school_id' => $schoolId, 'created_at' => now(), 'updated_at' => now(), ]); } } } private function seedExams($schoolId) { $sessionYear = SessionYear::where('school_id', $schoolId)->where('default', 1)->first(); $classSections = ClassSection::where('school_id', $schoolId)->get(); $examTypes = [ ['name' => 'First Term Examination', 'start_date' => '2024-09-15', 'end_date' => '2024-09-30'], ['name' => 'Mid Term Examination', 'start_date' => '2024-12-15', 'end_date' => '2024-12-30'], ['name' => 'Final Term Examination', 'start_date' => '2025-03-15', 'end_date' => '2025-03-30'], ]; foreach ($examTypes as $examType) { foreach ($classSections as $classSection) { $exam = Exam::create([ 'name' => $examType['name'], 'description' => 'Regular term examination', 'class_section_id' => $classSection->id, 'session_year_id' => $sessionYear->id, 'start_date' => $examType['start_date'], 'end_date' => $examType['end_date'], 'school_id' => $schoolId, 'created_at' => now(), 'updated_at' => now(), ]); // Create exam timetable $subjects = Subject::where('class_id', $classSection->class_id)->get(); $examDate = Carbon::parse($examType['start_date']); foreach ($subjects as $subject) { if ($examDate->isWeekend()) { $examDate->addDays(2); } ExamTimetable::create([ 'exam_id' => $exam->id, 'subject_id' => $subject->id, 'date' => $examDate->format('Y-m-d'), 'start_time' => '09:00:00', 'end_time' => '12:00:00', 'school_id' => $schoolId, 'created_at' => now(), 'updated_at' => now(), ]); $examDate->addDay(); } } } } private function seedExamResults($schoolId) { $exams = Exam::where('school_id', $schoolId)->get(); foreach ($exams as $exam) { $students = Students::where('class_section_id', $exam->class_section_id)->get(); $examTimetables = ExamTimetable::where('exam_id', $exam->id)->get(); foreach ($students as $student) { foreach ($examTimetables as $timetable) { ExamResult::create([ 'exam_id' => $exam->id, 'student_id' => $student->id, 'subject_id' => $timetable->subject_id, 'marks' => $this->faker->numberBetween(60, 98), 'grade' => 'A', 'school_id' => $schoolId, 'created_at' => now(), 'updated_at' => now(), ]); } } } } private function seedExpenseCategories($schoolId) { try { $sessionYear = SessionYear::where('school_id', $schoolId) ->where('default', 1) ->first(); if (!$sessionYear) { throw new \Exception('Default session year not found'); } // Get or create school admin for tracking $schoolAdmin = User::where('school_id', $schoolId) ->whereHas('roles', function ($q) { $q->where('name', 'School Admin'); }) ->first(); if (!$schoolAdmin) { $schoolAdmin = User::create([ 'first_name' => 'School', 'last_name' => 'Admin', 'email' => 'admin_' . $schoolId . '@school.com', 'password' => Hash::make('password'), 'school_id' => $schoolId ]); $schoolAdmin->assignRole('School Admin'); } $expenseCategories = [ [ 'name' => 'Utilities', 'description' => 'Electricity, water, internet bills', 'school_id' => $schoolId, 'created_at' => now(), 'updated_at' => now(), ], [ 'name' => 'Maintenance', 'description' => 'Building and equipment maintenance', 'school_id' => $schoolId, 'created_at' => now(), 'updated_at' => now(), ], [ 'name' => 'Supplies', 'description' => 'Office and educational supplies', 'school_id' => $schoolId, 'created_at' => now(), 'updated_at' => now(), ], [ 'name' => 'Events', 'description' => 'School events and functions', 'school_id' => $schoolId, 'created_at' => now(), 'updated_at' => now(), ] ]; foreach ($expenseCategories as $categoryData) { $expenseCategory = ExpenseCategory::create($categoryData); } } catch (\Exception $e) { \Log::error('Error seeding expense categories: ' . $e->getMessage()); throw $e; } } private function seedExpenses($schoolId) { try { $categories = ExpenseCategory::where('school_id', $schoolId)->get(); $sessionYear = SessionYear::where('school_id', $schoolId) ->where('default', 1) ->first(); if (!$sessionYear) { throw new \Exception('Default session year not found'); } // Get or create school admin for tracking $schoolAdmin = User::where('school_id', $schoolId) ->whereHas('roles', function ($q) { $q->where('name', 'School Admin'); }) ->first(); if (!$schoolAdmin) { $schoolAdmin = User::create([ 'first_name' => 'School', 'last_name' => 'Admin', 'email' => 'admin_' . $schoolId . '@school.com', 'password' => Hash::make('password'), 'school_id' => $schoolId ]); $schoolAdmin->assignRole('School Admin'); } foreach ($categories as $category) { for ($i = 1; $i <= 10; $i++) { $expense = Expense::create([ 'title' => $this->faker->sentence(3), 'category_id' => $category->id, 'ref_no' => $this->faker->unique()->regexify('[A-Z]{2}[0-9]{4}'), 'staff_id' => null, 'basic_salary' => 0, 'paid_leaves' => 0.00, 'month' => now()->month, 'year' => now()->year, 'description' => $this->faker->paragraph(1), 'amount' => $this->faker->randomFloat(2, 5000, 50000), 'date' => $this->faker->dateTimeBetween('-6 months', 'now'), 'school_id' => $schoolId, 'session_year_id' => $sessionYear->id, 'created_at' => now(), 'updated_at' => now() ]); } } } catch (\Exception $e) { \Log::error('Error seeding expenses: ' . $e->getMessage()); throw $e; } } private function seedPayrollSettings($schoolId) { try { // Get required data $sessionYear = SessionYear::where('school_id', $schoolId) ->where('default', 1) ->first(); if (!$sessionYear) { throw new \Exception('Default session year not found'); } // Get or create school admin for tracking $schoolAdmin = User::where('school_id', $schoolId) ->whereHas('roles', function ($q) { $q->where('name', 'School Admin'); }) ->first(); if (!$schoolAdmin) { $schoolAdmin = User::create([ 'first_name' => 'School', 'last_name' => 'Admin', 'email' => 'admin_' . $schoolId . '@school.com', 'password' => Hash::make('password'), 'school_id' => $schoolId ]); $schoolAdmin->assignRole('School Admin'); } $payrollSettingList = [ [ 'name' => 'Basic Salary', 'amount' => 10000, 'percentage' => null, 'type' => 'allowance', 'school_id' => $schoolId, ], [ 'name' => 'HRA', 'amount' => 1000, 'percentage' => null, 'type' => 'allowance', 'school_id' => $schoolId, ], [ 'name' => 'DA', 'amount' => null, 'percentage' => 15, 'type' => 'allowance', 'school_id' => $schoolId, ], [ 'name' => 'Medical Allowance', 'amount' => null, 'percentage' => 8, 'type' => 'allowance', 'school_id' => $schoolId, ], [ 'name' => 'Professional Tax', 'amount' => 200, 'percentage' => null, 'type' => 'deduction', 'school_id' => $schoolId, ], [ 'name' => 'PF (Provident Fund)', 'amount' => null, 'percentage' => 12, 'type' => 'deduction', 'school_id' => $schoolId, ], [ 'name' => 'Income Tax', 'amount' => null, 'percentage' => 10, 'type' => 'deduction', 'school_id' => $schoolId, ] ]; foreach ($payrollSettingList as $payrollSetting) { $payrollSetting = PayrollSetting::create($payrollSetting); $sessionYear = SessionYear::where('school_id', $schoolId)->where('default', 1)->first(); } } catch (\Exception $e) { \Log::error('Error seeding payroll settings: ' . $e->getMessage()); throw $e; } } private function seedPayrolls($schoolId) { $staff = Staff::where('school_id', $schoolId)->where('role', 'teacher')->orWhere('role', 'Staff')->get(); $settings = PayrollSetting::where('school_id', $schoolId)->first(); foreach ($staff as $employee) { $basicSalary = $employee->salary; $hra = ($basicSalary * $settings->hra_percentage) / 100; $da = ($basicSalary * $settings->da_percentage) / 100; $pf = ($basicSalary * $settings->pf_percentage) / 100; $medical = ($basicSalary * $settings->medical_allowance_percentage) / 100; Payroll::create([ 'staff_id' => $employee->id, 'month' => now()->format('m'), 'year' => now()->format('Y'), 'basic_salary' => $basicSalary, 'hra' => $hra, 'da' => $da, 'pf' => $pf, 'medical_allowance' => $medical, 'net_salary' => $basicSalary + $hra + $da - $pf + $medical, 'status' => 'paid', 'school_id' => $schoolId, 'created_at' => now(), 'updated_at' => now(), ]); } } private function seedLeaves($schoolId) { $staff = Staff::where('school_id', $schoolId)->get(); $leaveTypes = ['Sick Leave', 'Casual Leave', 'Emergency Leave']; foreach ($staff as $employee) { for ($i = 1; $i <= 3; $i++) { $startDate = $this->faker->dateTimeBetween('-3 months', '+1 month'); $endDate = Carbon::parse($startDate)->addDays($this->faker->numberBetween(1, 3)); Leave::create([ 'staff_id' => $employee->id, 'type' => $this->faker->randomElement($leaveTypes), 'start_date' => $startDate, 'end_date' => $endDate, 'reason' => $this->faker->sentence(), 'status' => $this->faker->randomElement(['approved', 'pending', 'rejected']), 'school_id' => $schoolId, 'created_at' => now(), 'updated_at' => now(), ]); } } } private function seedHolidays($schoolId) { $sessionYear = SessionYear::where('school_id', $schoolId)->where('default', 1)->first(); $startDate = Carbon::parse($sessionYear->start_date); $endDate = Carbon::parse($sessionYear->end_date); Holiday::insert([ [ 'date' => $startDate->copy()->addDays(rand(1, 30))->format('Y-m-d'), 'title' => 'Republic Day', 'description' => 'National Holiday', 'school_id' => $schoolId, ], [ 'date' => $startDate->copy()->addDays(rand(31, 60))->format('Y-m-d'), 'title' => 'Independence Day', 'description' => 'National Holiday', 'school_id' => $schoolId, ], [ 'date' => $startDate->copy()->addDays(rand(61, 90))->format('Y-m-d'), 'title' => 'Gandhi Jayanti', 'description' => 'National Holiday', 'school_id' => $schoolId, ], [ 'date' => $startDate->copy()->addDays(rand(91, 120))->format('Y-m-d'), 'title' => 'Christmas', 'description' => 'National Holiday', 'school_id' => $schoolId, ], [ 'date' => $startDate->copy()->addDays(rand(121, 150))->format('Y-m-d'), 'title' => 'New Year', 'description' => 'National Holiday', 'school_id' => $schoolId, ], [ 'date' => $startDate->copy()->addDays(rand(151, 180))->format('Y-m-d'), 'title' => 'Holi', 'description' => 'National Holiday', 'school_id' => $schoolId, ], [ 'date' => $startDate->copy()->addDays(rand(181, 210))->format('Y-m-d'), 'title' => 'Baisakhi', 'description' => 'National Holiday', 'school_id' => $schoolId, ] ]); } private function seedNotifications($schoolId) { $sessionYear = SessionYear::where('school_id', $schoolId)->where('default', 1)->first(); $users = User::where('school_id', $schoolId)->get(); $notifications = [ [ 'title' => 'Welcome to the New Session', 'message' => 'Get ready for an exciting academic year ahead!', 'image' => null, 'send_to' => 'Guardian', 'session_year_id' => $sessionYear->id, 'school_id' => $schoolId, ], [ 'title' => 'Parent-Teacher Meeting', 'message' => 'A PTM is scheduled for this Friday at 10 AM.', 'image' => null, 'send_to' => 'Guardian', 'session_year_id' => $sessionYear->id, 'school_id' => $schoolId, ], [ 'title' => 'Holiday Notice', 'message' => 'School will remain closed on Monday due to public holiday.', 'image' => null, 'send_to' => 'Guardian', 'session_year_id' => $sessionYear->id, 'school_id' => $schoolId, ], [ 'title' => 'Exam Schedule Released', 'message' => 'The mid-term exam schedule has been uploaded.', 'image' => null, 'send_to' => 'Student', 'session_year_id' => $sessionYear->id, 'school_id' => $schoolId, ], [ 'title' => 'Library Week', 'message' => 'Join us for Library Week and discover amazing books!', 'image' => null, 'send_to' => 'Student', 'session_year_id' => $sessionYear->id, 'school_id' => $schoolId, ], [ 'title' => 'Science Fair', 'message' => 'Students from all classes are invited to participate in the science fair.', 'image' => null, 'send_to' => 'Student', 'session_year_id' => $sessionYear->id, 'school_id' => $schoolId, ], [ 'title' => 'Fee Reminder', 'message' => 'Please pay your fees before the 10th of this month to avoid late charges.', 'image' => null, 'send_to' => 'Guardian', 'session_year_id' => $sessionYear->id, 'school_id' => $schoolId, ], [ 'title' => 'New Uniform Guidelines', 'message' => 'Please refer to the updated uniform policy effective from next week.', 'image' => null, 'send_to' => 'Guardian', 'session_year_id' => $sessionYear->id, 'school_id' => $schoolId, ], [ 'title' => 'Annual Sports Meet', 'message' => 'Cheer for your house! Annual sports meet is on 25th Nov.', 'image' => null, 'send_to' => 'Guardian', 'session_year_id' => $sessionYear->id, 'school_id' => $schoolId, ], [ 'title' => 'Mobile App Update', 'message' => 'A new version of the school mobile app is now available.', 'image' => null, 'send_to' => 'Guardian', 'session_year_id' => $sessionYear->id, 'school_id' => $schoolId, ], ]; foreach ($notifications as $notification) { $notification = Notification::create($notification); } } private function seedAssignment($schoolId) { try { // Get required data $sessionYear = SessionYear::where('school_id', $schoolId) ->where('default', 1) ->first(); if (!$sessionYear) { throw new \Exception('Default session year not found'); } // Get a teacher for assignment creation $teachers = User::where('school_id', $schoolId) ->whereHas('roles', function ($q) { $q->where('name', 'Teacher'); }) ->get(); // Get all class sections $classSections = ClassSection::where('school_id', $schoolId)->get(); foreach ($classSections as $classSection) { // Get subjects for this class $classSubjects = DB::table('class_subjects') ->where('class_id', $classSection->class_id) ->where('school_id', $schoolId) ->get(); foreach ($classSubjects as $classSubject) { foreach ($teachers as $teacher) { // Create assignment data $assignmentData = [ 'class_section_id' => $classSection->id, 'class_subject_id' => $classSubject->id, 'name' => "Assignment - " . $classSubject->subject_id, 'instructions' => "Please complete all questions", 'due_date' => now()->addDays(7), 'points' => 100, 'resubmission' => false, 'extra_days_for_resubmission' => null, 'session_year_id' => $sessionYear->id, 'school_id' => $schoolId, 'created_by' => $teacher->id, // Use teacher ID 'edited_by' => $teacher->id // Use teacher ID ]; // Create the assignment $assignment = Assignment::create($assignmentData); // Create assignment common data $assignmentCommon = AssignmentCommon::create([ 'assignment_id' => $assignment->id, 'class_section_id' => $classSection->id, 'class_subject_id' => $classSubject->id, ]); } } } // Return teacher credentials for reference return [ 'email' => $teacher->email, 'password' => '1234567890' ]; } catch (\Exception $e) { \Log::error('Error seeding assignments: ' . $e->getMessage()); throw $e; } } private function seedAnnouncements($schoolId) { $sessionYear = SessionYear::where('school_id', $schoolId)->where('default', 1)->first(); // Get the first semester instead of looking for default $semester = Semester::where('school_id', $schoolId)->first(); $section_ids = ClassSection::where('school_id', $schoolId)->get()->pluck('id'); // Get a school admin user for creating announcements $schoolAdmin = User::where('school_id', $schoolId) ->whereHas('roles', function ($q) { $q->where('name', 'School Admin'); }) ->first(); if (!$schoolAdmin) { // Create a school admin if none exists $schoolAdmin = User::create([ 'first_name' => 'School', 'last_name' => 'Admin', 'email' => 'admin_' . $schoolId . '@school.com', 'password' => Hash::make('password'), 'school_id' => $schoolId ]); $schoolAdmin->assignRole('School Admin'); } $announcements = array( array( 'title' => 'School Annual Day', 'description' => 'Annual day celebration will be held next month.', 'session_year_id' => $sessionYear->id, 'school_id' => $schoolId ), array( 'title' => 'Parent Teacher Meeting', 'description' => 'PTM scheduled for next weekend. Please do not miss it!', 'session_year_id' => $sessionYear->id, 'school_id' => $schoolId ), array( 'title' => 'Winter Break Notice', 'description' => 'School will remain closed from Dec 24th to Jan 2nd for winter holidays.', 'session_year_id' => $sessionYear->id, 'school_id' => $schoolId ), array( 'title' => 'Exam Timetable Released', 'description' => 'The final exam timetable is now available in the app and website.', 'session_year_id' => $sessionYear->id, 'school_id' => $schoolId ), array( 'title' => 'Science Fair Registration', 'description' => 'Registrations are open for the inter-school science fair!', 'session_year_id' => $sessionYear->id, 'school_id' => $schoolId ) ); foreach ($announcements as $announcementData) { try { // Create the announcement $announcement = Announcement::create($announcementData); // Create announcement class associations for all sections foreach ($section_ids as $section_id) { $announcementClassData = array( 'announcement_id' => $announcement->id, 'class_section_id' => $section_id ); $announcementClass = AnnouncementClass::create($announcementClassData); } // Get all students for notifications $students = Students::whereIn('class_section_id', $section_ids) ->with('user') ->get(); // Create notifications for students foreach ($students as $student) { Notification::create(array( 'title' => 'New Announcement: ' . $announcement->title, 'message' => $announcement->description, 'user_id' => $student->user_id, 'school_id' => $schoolId, 'session_year_id' => $sessionYear->id, 'send_to' => 'Student' )); } } catch (\Exception $e) { // Log the error but continue with other announcements \Log::error('Error creating announcement: ' . $e->getMessage()); continue; } } } private function seedTimetable($schoolId) { $classSections = ClassSection::where('school_id', $schoolId)->get(); $sessionYear = SessionYear::where('school_id', $schoolId)->where('default', 1)->first(); $staff = Staff::where('school_id', $schoolId)->get(); $timeSlots = [ ['start' => '08:00:00', 'end' => '08:45:00'], ['start' => '08:45:00', 'end' => '09:30:00'], ['start' => '09:30:00', 'end' => '10:15:00'], ['start' => '10:15:00', 'end' => '11:00:00'], ['start' => '11:30:00', 'end' => '12:15:00'], ['start' => '12:15:00', 'end' => '13:00:00'], ['start' => '13:00:00', 'end' => '13:45:00'], ]; foreach ($classSections as $classSection) { $subjects = Subject::where('class_id', $classSection->class_id)->get(); for ($day = 1; $day <= 5; $day++) { // Monday to Friday foreach ($timeSlots as $index => $timeSlot) { // Skip one slot for break time if ($index === 4) { continue; } Timetable::create([ 'class_section_id' => $classSection->id, 'subject_id' => $subjects->random()->id, 'staff_id' => $staff->random()->id, 'day' => $day, 'start_time' => $timeSlot['start'], 'end_time' => $timeSlot['end'], 'session_year_id' => $sessionYear->id, 'school_id' => $schoolId, 'created_at' => now(), 'updated_at' => now(), ]); } } } } private function seedOnlineExams($schoolId) { $sessionYear = SessionYear::where('school_id', $schoolId)->where('default', 1)->first(); $classSections = ClassSection::where('school_id', $schoolId)->get(); foreach ($classSections as $classSection) { $subjects = Subject::where('class_id', $classSection->class_id)->get(); foreach ($subjects as $subject) { $exam = OnlineExam::create([ 'name' => "Online Test - {$subject->name}", 'description' => "Online assessment for {$subject->name}", 'class_section_id' => $classSection->id, 'subject_id' => $subject->id, 'session_year_id' => $sessionYear->id, 'duration' => 60, // 60 minutes 'start_date' => now()->addDays(7), 'end_date' => now()->addDays(7)->addHours(24), 'total_marks' => 100, 'passing_marks' => 35, 'school_id' => $schoolId, 'created_at' => now(), 'updated_at' => now(), ]); // Add questions for ($i = 1; $i <= 10; $i++) { DB::table('online_exam_questions')->insert([ 'online_exam_id' => $exam->id, 'question' => "Question {$i} for {$subject->name}", 'options' => json_encode([ 'option_1' => "Option 1 for question {$i}", 'option_2' => "Option 2 for question {$i}", 'option_3' => "Option 3 for question {$i}", 'option_4' => "Option 4 for question {$i}", ]), 'correct_answer' => 'option_' . $this->faker->numberBetween(1, 4), 'marks' => 10, 'school_id' => $schoolId, 'created_at' => now(), 'updated_at' => now(), ]); } } } } private function seedGallery($schoolId) { $categories = [ 'Annual Day', 'Sports Day', 'Independence Day', 'Republic Day', 'Science Exhibition' ]; foreach ($categories as $category) { $galleryId = DB::table('gallery')->insertGetId([ 'title' => $category . ' Celebration', 'description' => "Photos from {$category} celebration", 'school_id' => $schoolId, 'created_at' => now(), 'updated_at' => now(), ]); // Add dummy image entries for ($i = 1; $i <= 5; $i++) { DB::table('gallery_images')->insert([ 'gallery_id' => $galleryId, 'image_url' => "gallery/default{$i}.jpg", 'school_id' => $schoolId, 'created_at' => now(), 'updated_at' => now(), ]); } } } private function seedCertificates($schoolId) { $certificateTypes = [ [ 'name' => 'Transfer Certificate', 'template' => '<div class="certificate"> <h1>{SCHOOL_NAME}</h1> <h2>Transfer Certificate</h2> <p>This is to certify that {STUDENT_NAME} has successfully completed their education up to Class {CLASS_NAME} for the academic year {ACADEMIC_YEAR}.</p> </div>' ], [ 'name' => 'Character Certificate', 'template' => '<div class="certificate"> <h1>{SCHOOL_NAME}</h1> <h2>Character Certificate</h2> <p>This is to certify that {STUDENT_NAME} of Class {CLASS_NAME} has maintained good character and discipline during their stay in the school.</p> </div>' ], [ 'name' => 'Bonafide Certificate', 'template' => '<div class="certificate"> <h1>{SCHOOL_NAME}</h1> <h2>Bonafide Certificate</h2> <p>This is to certify that {STUDENT_NAME} is a bonafide student of our school studying in Class {CLASS_NAME} for the academic year {ACADEMIC_YEAR}.</p> </div>' ] ]; foreach ($certificateTypes as $type) { DB::table('certificate_templates')->insert([ 'name' => $type['name'], 'template' => $type['template'], 'school_id' => $schoolId, 'created_at' => now(), 'updated_at' => now(), ]); } } private function seedSliders($schoolId) { $sliders = [ [ 'title' => 'Welcome to Our School', 'image' => 'sliders/welcome.jpg', 'description' => 'Nurturing minds, building futures', ], [ 'title' => 'Academic Excellence', 'image' => 'sliders/academic.jpg', 'description' => 'Committed to academic excellence', ], [ 'title' => 'Sports Facilities', 'image' => 'sliders/sports.jpg', 'description' => 'State-of-the-art sports facilities', ], [ 'title' => 'Cultural Activities', 'image' => 'sliders/cultural.jpg', 'description' => 'Promoting cultural values', ], ]; foreach ($sliders as $slider) { Slider::create(array_merge($slider, [ 'school_id' => $schoolId, 'created_at' => now(), 'updated_at' => now(), ])); } } private function seedLesson($schoolId) { try { // Get required data $sessionYear = SessionYear::where('school_id', $schoolId) ->where('default', 1) ->first(); if (!$sessionYear) { throw new \Exception('Default session year not found'); } // Get school admin for tracking $schoolAdmin = User::where('school_id', $schoolId) ->whereHas('roles', function ($q) { $q->where('name', 'School Admin'); }) ->first(); if (!$schoolAdmin) { throw new \Exception('School admin not found'); } // Get all class sections for the school $classSections = ClassSection::where('school_id', $schoolId)->get(); // For each class section, create sample lessons foreach ($classSections as $classSection) { // Get subjects for this class from the pivot table $classSubjects = DB::table('class_subjects') ->where('class_id', $classSection->class_id) ->where('school_id', $schoolId) ->get(); foreach ($classSubjects as $classSubject) { // Create lesson data $lessonData = [ 'name' => 'Sample Lesson - ' . $classSubject->subject_id, 'description' => 'This is a sample lesson for subject ID ' . $classSubject->subject_id, 'class_section_id' => $classSection->id, 'class_subject_id' => $classSubject->id, 'school_id' => $schoolId, ]; // Create or update the lesson $lesson = Lesson::updateOrCreate( [ 'name' => $lessonData['name'], 'class_section_id' => $classSection->id, 'class_subject_id' => $classSubject->id, 'school_id' => $schoolId, ], $lessonData ); // Create lesson common data LessonCommon::updateOrCreate( [ 'lesson_id' => $lesson->id, 'class_section_id' => $classSection->id, 'class_subject_id' => $classSubject->id, ] ); // Get semester data $semester = Semester::where('school_id', $schoolId) ->where('start_month', '<=', now()->month) ->where('end_month', '>=', now()->month) ->first(); } } } catch (\Exception $e) { $this->command->error('Error seeding lessons: ' . $e->getMessage()); throw $e; } } private function seedLessonTopic($schoolId) { try { // Get required data $sessionYear = SessionYear::where('school_id', $schoolId) ->where('default', 1) ->first(); if (!$sessionYear) { throw new \Exception('Default session year not found'); } // Get school admin for tracking $schoolAdmin = User::where('school_id', $schoolId) ->whereHas('roles', function ($q) { $q->where('name', 'School Admin'); }) ->first(); if (!$schoolAdmin) { throw new \Exception('School admin not found'); } // Get all class sections for the school $classSections = ClassSection::where('school_id', $schoolId)->get(); // For each class section, create sample lesson topics foreach ($classSections as $classSection) { // Get subjects for this class from the pivot table $classSubjects = DB::table('class_subjects') ->where('class_id', $classSection->class_id) ->where('school_id', $schoolId) ->get(); foreach ($classSubjects as $classSubject) { // First check if a lesson exists for this subject $lesson = Lesson::where('class_subject_id', $classSubject->id) ->where('school_id', $schoolId) ->first(); if (!$lesson) { continue; // Skip if no lesson exists } // Create lesson topic data $lessonTopicData = [ 'name' => 'Sample Topic - ' . $classSubject->subject_id, 'description' => 'This is a sample topic for subject ID ' . $classSubject->subject_id, 'lesson_id' => $lesson->id, 'school_id' => $schoolId, ]; // Create or update the lesson topic $topic = LessonTopic::updateOrCreate( [ 'name' => $lessonTopicData['name'], 'lesson_id' => $lesson->id, 'school_id' => $schoolId, ], $lessonTopicData ); // Create or update topic common data TopicCommon::updateOrCreate( [ 'lesson_topics_id' => $topic->id, 'class_section_id' => $classSection->id, 'class_subject_id' => $classSubject->id ] ); // Get semester data $semester = Semester::where('school_id', $schoolId) ->where('start_month', '<=', now()->month) ->where('end_month', '>=', now()->month) ->first(); } } } catch (\Exception $e) { $this->command->error('Error seeding lesson topics: ' . $e->getMessage()); throw $e; } } }