diff --git a/app/Services/Events/EventChargeService.php b/app/Services/Events/EventChargeService.php index d9f1370d..a05e7e6e 100644 --- a/app/Services/Events/EventChargeService.php +++ b/app/Services/Events/EventChargeService.php @@ -19,7 +19,7 @@ class EventChargeService ->where('enrollments.school_year', $schoolYear) ->whereIn('enrollments.enrollment_status', ['enrolled', 'payment pending']) ->get() - ->map(fn ($row) => (array) $row) + ->map(fn ($row) => $row->toArray()) ->all(); $parentIds = []; @@ -152,7 +152,7 @@ class EventChargeService $charges = EventCharges::query() ->where('event_id', $eventId) ->get() - ->map(fn ($row) => (array) $row) + ->map(fn ($row) => $row->toArray()) ->all(); $parentIds = []; diff --git a/app/Services/Reports/ReportCards/ReportCardService.php b/app/Services/Reports/ReportCards/ReportCardService.php index d7770e62..d39aa176 100644 --- a/app/Services/Reports/ReportCards/ReportCardService.php +++ b/app/Services/Reports/ReportCards/ReportCardService.php @@ -675,7 +675,7 @@ class ReportCardService $query->where('student_class.school_year', $schoolYear); } - return $query->get()->map(fn ($r) => (array) $r)->all(); + return $query->get()->map(fn ($r) => $r->toArray())->all(); } private function normalizeSemester(?string $input): string diff --git a/database/migrations/2026_02_23_204001_create_users_table.php b/database/migrations/2026_02_23_204001_create_users_table.php index a24570f8..e0985d64 100644 --- a/database/migrations/2026_02_23_204001_create_users_table.php +++ b/database/migrations/2026_02_23_204001_create_users_table.php @@ -19,25 +19,25 @@ CREATE TABLE `users` ( `firstname` varchar(255) NOT NULL, `lastname` varchar(255) NOT NULL, `gender` enum('Male','Female') DEFAULT NULL, - `cellphone` varchar(25) NOT NULL, + `cellphone` varchar(25) DEFAULT NULL, `email` varchar(255) NOT NULL, - `address_street` varchar(255) NOT NULL, + `address_street` varchar(255) DEFAULT NULL, `apt` varchar(25) DEFAULT NULL, - `city` varchar(255) NOT NULL, - `state` varchar(25) NOT NULL, - `zip` varchar(25) NOT NULL, - `accept_school_policy` tinyint(1) NOT NULL, + `city` varchar(255) DEFAULT NULL, + `state` varchar(25) DEFAULT NULL, + `zip` varchar(25) DEFAULT NULL, + `accept_school_policy` tinyint(1) DEFAULT '0', `is_verified` tinyint(1) NOT NULL DEFAULT '0', `status` varchar(10) NOT NULL DEFAULT 'Inactive', `is_suspended` tinyint(1) NOT NULL DEFAULT '0', `failed_attempts` int DEFAULT '0', - `password` varchar(255) NOT NULL, + `password` varchar(255) DEFAULT NULL, `created_at` datetime DEFAULT NULL, `updated_at` datetime DEFAULT NULL, `token` varchar(255) DEFAULT NULL, `account_id` varchar(255) DEFAULT NULL, `user_type` enum('primary','secondary','tertiary') DEFAULT 'primary', - `semester` varchar(255) NOT NULL, + `semester` varchar(255) DEFAULT NULL, `school_year` varchar(9) DEFAULT NULL, `rfid_tag` varchar(100) DEFAULT NULL, `last_failed_at` datetime DEFAULT NULL diff --git a/database/migrations/2026_02_23_204002_create_students_table.php b/database/migrations/2026_02_23_204002_create_students_table.php index 19a15ddb..80ef80a3 100644 --- a/database/migrations/2026_02_23_204002_create_students_table.php +++ b/database/migrations/2026_02_23_204002_create_students_table.php @@ -15,22 +15,22 @@ return new class extends Migration SqliteCompat::statement(<<<'SQL' CREATE TABLE `students` ( `id` int UNSIGNED NOT NULL, - `school_id` char(100) COLLATE utf8mb4_general_ci NOT NULL, + `school_id` char(100) COLLATE utf8mb4_general_ci DEFAULT NULL, `firstname` varchar(255) COLLATE utf8mb4_general_ci NOT NULL, `lastname` varchar(255) COLLATE utf8mb4_general_ci NOT NULL, `dob` date DEFAULT NULL, - `age` int NOT NULL, - `gender` varchar(10) COLLATE utf8mb4_general_ci NOT NULL, + `age` int DEFAULT NULL, + `gender` varchar(10) COLLATE utf8mb4_general_ci DEFAULT NULL, `is_active` tinyint(1) NOT NULL DEFAULT '1', `registration_grade` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL, `is_new` tinyint(1) NOT NULL DEFAULT '1' COMMENT '1 = new student, 0 = returning student', - `photo_consent` tinyint(1) NOT NULL, - `parent_id` int NOT NULL, + `photo_consent` tinyint(1) DEFAULT NULL, + `parent_id` int DEFAULT NULL, `registration_date` datetime DEFAULT NULL, `tuition_paid` tinyint(1) NOT NULL DEFAULT '0', `rfid_tag` varchar(100) COLLATE utf8mb4_general_ci DEFAULT NULL, `semester` varchar(10) COLLATE utf8mb4_general_ci DEFAULT NULL, - `year_of_registration` varchar(25) COLLATE utf8mb4_general_ci NOT NULL, + `year_of_registration` varchar(25) COLLATE utf8mb4_general_ci DEFAULT NULL, `school_year` varchar(9) COLLATE utf8mb4_general_ci DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; SQL diff --git a/database/migrations/2026_02_23_204056_create_parents_table.php b/database/migrations/2026_02_23_204056_create_parents_table.php index b6388df5..ba4a24ad 100644 --- a/database/migrations/2026_02_23_204056_create_parents_table.php +++ b/database/migrations/2026_02_23_204056_create_parents_table.php @@ -15,15 +15,15 @@ return new class extends Migration SqliteCompat::statement(<<<'SQL' CREATE TABLE `parents` ( `id` int NOT NULL, - `secondparent_firstname` varchar(100) COLLATE utf8mb4_general_ci NOT NULL, - `secondparent_lastname` varchar(100) COLLATE utf8mb4_general_ci NOT NULL, + `secondparent_firstname` varchar(100) COLLATE utf8mb4_general_ci DEFAULT NULL, + `secondparent_lastname` varchar(100) COLLATE utf8mb4_general_ci DEFAULT NULL, `secondparent_gender` enum('Male','Female') COLLATE utf8mb4_general_ci DEFAULT NULL, - `secondparent_email` varchar(150) COLLATE utf8mb4_general_ci NOT NULL, - `secondparent_phone` varchar(15) COLLATE utf8mb4_general_ci NOT NULL, - `firstparent_id` int NOT NULL, - `secondparent_id` int NOT NULL, + `secondparent_email` varchar(150) COLLATE utf8mb4_general_ci DEFAULT NULL, + `secondparent_phone` varchar(15) COLLATE utf8mb4_general_ci DEFAULT NULL, + `firstparent_id` int DEFAULT NULL, + `secondparent_id` int DEFAULT NULL, `semester` varchar(10) COLLATE utf8mb4_general_ci DEFAULT NULL, - `school_year` varchar(20) COLLATE utf8mb4_general_ci NOT NULL, + `school_year` varchar(20) COLLATE utf8mb4_general_ci DEFAULT NULL, `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; diff --git a/database/migrations/2026_02_23_204134_create_student_class_table.php b/database/migrations/2026_02_23_204134_create_student_class_table.php index de07d35e..689a5422 100644 --- a/database/migrations/2026_02_23_204134_create_student_class_table.php +++ b/database/migrations/2026_02_23_204134_create_student_class_table.php @@ -18,7 +18,7 @@ CREATE TABLE `student_class` ( `student_id` int NOT NULL, `class_section_id` int DEFAULT NULL, `is_event_only` tinyint UNSIGNED NOT NULL DEFAULT '0', - `semester` varchar(255) NOT NULL, + `semester` varchar(255) DEFAULT NULL, `school_year` varchar(25) DEFAULT NULL, `description` text, `created_at` datetime DEFAULT NULL, diff --git a/database/migrations/2026_02_23_204138_create_teacher_class_table.php b/database/migrations/2026_02_23_204138_create_teacher_class_table.php index 399b8ea7..6e2faaa8 100644 --- a/database/migrations/2026_02_23_204138_create_teacher_class_table.php +++ b/database/migrations/2026_02_23_204138_create_teacher_class_table.php @@ -18,7 +18,7 @@ CREATE TABLE `teacher_class` ( `class_section_id` int DEFAULT NULL, `teacher_id` int DEFAULT NULL, `position` enum('main','ta') COLLATE utf8mb4_general_ci DEFAULT NULL, - `semester` varchar(25) COLLATE utf8mb4_general_ci NOT NULL, + `semester` varchar(25) COLLATE utf8mb4_general_ci DEFAULT NULL, `school_year` varchar(25) COLLATE utf8mb4_general_ci DEFAULT NULL, `description` text COLLATE utf8mb4_general_ci, `created_at` datetime DEFAULT NULL, diff --git a/database/migrations/2026_02_23_900012_create_classSection_table.php b/database/migrations/2026_02_23_900012_create_classSection_table.php index 19ce0541..0fa4f0d1 100644 --- a/database/migrations/2026_02_23_900012_create_classSection_table.php +++ b/database/migrations/2026_02_23_900012_create_classSection_table.php @@ -20,7 +20,7 @@ CREATE TABLE `classSection` ( `class_section_name` varchar(100) NOT NULL, `created_at` datetime DEFAULT NULL, `updated_at` datetime DEFAULT NULL, - `semester` varchar(255) NOT NULL, + `semester` varchar(255) DEFAULT NULL, `school_year` varchar(9) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; SQL diff --git a/database/migrations/2026_02_23_900017_create_classes_table.php b/database/migrations/2026_02_23_900017_create_classes_table.php index 74a9ebad..bacf6ac8 100644 --- a/database/migrations/2026_02_23_900017_create_classes_table.php +++ b/database/migrations/2026_02_23_900017_create_classes_table.php @@ -16,9 +16,9 @@ return new class extends Migration CREATE TABLE `classes` ( `id` int UNSIGNED NOT NULL, `class_name` varchar(100) NOT NULL, - `schedule` varchar(100) NOT NULL, - `capacity` int NOT NULL, - `semester` varchar(255) NOT NULL, + `schedule` varchar(100) DEFAULT NULL, + `capacity` int DEFAULT NULL, + `semester` varchar(255) DEFAULT NULL, `school_year` varchar(9) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; SQL diff --git a/database/migrations/2026_02_23_900030_create_enrollments_table.php b/database/migrations/2026_02_23_900030_create_enrollments_table.php index f7c2e491..62df43f3 100644 --- a/database/migrations/2026_02_23_900030_create_enrollments_table.php +++ b/database/migrations/2026_02_23_900030_create_enrollments_table.php @@ -17,14 +17,14 @@ CREATE TABLE `enrollments` ( `id` int UNSIGNED NOT NULL, `student_id` int UNSIGNED NOT NULL, `class_section_id` int UNSIGNED DEFAULT NULL, - `parent_id` int UNSIGNED NOT NULL, - `enrollment_date` date NOT NULL, + `parent_id` int UNSIGNED DEFAULT NULL, + `enrollment_date` date DEFAULT NULL, `enrollment_status` enum('admission under review','payment pending','enrolled','withdraw under review','refund pending','withdrawn','waitlist','denied') COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'admission under review', `withdrawal_date` date DEFAULT NULL, `is_withdrawn` tinyint(1) NOT NULL DEFAULT '0', `admission_status` enum('pending','accepted','denied') COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'pending', `semester` varchar(25) COLLATE utf8mb4_general_ci DEFAULT NULL, - `school_year` varchar(25) COLLATE utf8mb4_general_ci NOT NULL, + `school_year` varchar(25) COLLATE utf8mb4_general_ci DEFAULT NULL, `created_at` datetime DEFAULT NULL, `updated_at` datetime DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; diff --git a/database/migrations/2026_06_04_140000_add_strong_lifecycle_and_section_placement_tables.php b/database/migrations/2026_06_04_140000_add_strong_lifecycle_and_section_placement_tables.php index c3717448..6f5fc8de 100644 --- a/database/migrations/2026_06_04_140000_add_strong_lifecycle_and_section_placement_tables.php +++ b/database/migrations/2026_06_04_140000_add_strong_lifecycle_and_section_placement_tables.php @@ -72,6 +72,7 @@ return new class extends Migration $exists = DB::table('configuration')->where('config_key', 'promotion.section_capacity')->exists(); if (! $exists) { DB::table('configuration')->insert([ + 'id' => 10000, 'config_key' => 'promotion.section_capacity', 'config_value' => '20', ]); diff --git a/database/migrations/2026_06_25_230000_add_legacy_ci_compatibility_columns.php b/database/migrations/2026_06_25_230000_add_legacy_ci_compatibility_columns.php new file mode 100644 index 00000000..7b88389f --- /dev/null +++ b/database/migrations/2026_06_25_230000_add_legacy_ci_compatibility_columns.php @@ -0,0 +1,81 @@ +addColumns('classes', [ + 'created_at' => fn (Blueprint $table) => $table->timestamp('created_at')->nullable(), + 'updated_at' => fn (Blueprint $table) => $table->timestamp('updated_at')->nullable(), + ]); + + $this->addColumns('event_charges', [ + 'created_by' => fn (Blueprint $table) => $table->unsignedInteger('created_by')->nullable(), + ]); + + $this->addColumns('students', [ + 'created_at' => fn (Blueprint $table) => $table->timestamp('created_at')->nullable(), + 'updated_at' => fn (Blueprint $table) => $table->timestamp('updated_at')->nullable(), + 'badge_scan' => fn (Blueprint $table) => $table->string('badge_scan', 100)->nullable(), + ]); + } + + public function down(): void + { + $this->dropColumns('students', ['badge_scan', 'updated_at', 'created_at']); + $this->dropColumns('event_charges', ['created_by']); + $this->dropColumns('classes', ['updated_at', 'created_at']); + } + + /** + * @param array $columns + */ + private function addColumns(string $table, array $columns): void + { + if (! Schema::hasTable($table)) { + return; + } + + $missing = array_filter( + array_keys($columns), + static fn (string $column): bool => ! Schema::hasColumn($table, $column) + ); + + if ($missing === []) { + return; + } + + Schema::table($table, function (Blueprint $blueprint) use ($columns, $missing): void { + foreach ($missing as $column) { + $columns[$column]($blueprint); + } + }); + } + + /** + * @param list $columns + */ + private function dropColumns(string $table, array $columns): void + { + if (! Schema::hasTable($table)) { + return; + } + + $existing = array_filter( + $columns, + static fn (string $column): bool => Schema::hasColumn($table, $column) + ); + + if ($existing === []) { + return; + } + + Schema::table($table, function (Blueprint $blueprint) use ($existing): void { + $blueprint->dropColumn($existing); + }); + } +}; diff --git a/storage/uploads/exams/drafts/exam_6a3db81c1ca1f6.25923479.docx b/storage/uploads/exams/drafts/exam_6a3db81c1ca1f6.25923479.docx new file mode 100644 index 00000000..e69de29b