diff --git a/app/Http/Controllers/Api/Integration/StudentSyncController.php b/app/Http/Controllers/Api/Integration/StudentSyncController.php index 0533207..40efcbd 100644 --- a/app/Http/Controllers/Api/Integration/StudentSyncController.php +++ b/app/Http/Controllers/Api/Integration/StudentSyncController.php @@ -27,6 +27,7 @@ class StudentSyncController extends Controller 'academicYear:id,name,start_year,end_year,is_active', 'department:id,code,name,description,is_active', 'classRoom:id,academic_year_id,department_id,name,level,is_active', + 'parents:id,student_id,relation_type,name,nik,phone_number,is_alive', ]) ->orderBy('full_name') ->get([ @@ -99,6 +100,17 @@ class StudentSyncController extends Controller 'email' => $student->email, 'photo_path' => $student->photo_path, 'notes' => $student->notes, + 'parents' => $student->parents + ->where('is_alive', true) + ->values() + ->map(fn ($p) => [ + 'id' => $p->id, + 'relation' => $p->relation_type, + 'name' => $p->name, + 'nik' => $p->nik, + 'phone_number' => $p->phone_number, + ]) + ->all(), 'updated_at' => $student->updated_at?->toISOString(), ]; }) diff --git a/app/Http/Controllers/StudentAchievementController.php b/app/Http/Controllers/StudentAchievementController.php index 8b152b2..8ba22da 100644 --- a/app/Http/Controllers/StudentAchievementController.php +++ b/app/Http/Controllers/StudentAchievementController.php @@ -82,7 +82,7 @@ class StudentAchievementController extends Controller 'category' => $category, ], 'academicYears' => AcademicYear::orderBy('name')->pluck('name', 'id'), - 'classes' => SchoolClass::orderBy('name')->pluck('name', 'id'), + 'classes' => SchoolClass::forActiveAcademicYear()->orderBy('name')->pluck('name', 'id'), 'categoryOptions' => $categoryOptions, 'levelOptions' => $this->levelOptions(), 'summary' => [ diff --git a/app/Http/Controllers/StudentController.php b/app/Http/Controllers/StudentController.php index b7545a7..bda831c 100644 --- a/app/Http/Controllers/StudentController.php +++ b/app/Http/Controllers/StudentController.php @@ -187,7 +187,11 @@ class StudentController extends Controller ], 'academicYears' => AcademicYear::orderBy('name')->pluck('name', 'id'), 'departments' => Department::where('is_active', true)->orderBy('name')->pluck('name', 'id'), - 'classes' => SchoolClass::orderBy('name')->pluck('name', 'id'), + 'classes' => SchoolClass::when( + $academicYearId, + fn ($query) => $query->where('academic_year_id', $academicYearId), + fn ($query) => $query->forActiveAcademicYear() + )->orderBy('name')->pluck('name', 'id'), 'statuses' => $viewConfig['view'] === 'all' ? [ 'active' => 'Aktif', @@ -506,9 +510,6 @@ class StudentController extends Controller 'Tanggal Lahir (YYYY-MM-DD)', 'Agama', 'Kewarganegaraan', - 'No. Kartu Keluarga', - 'Anak Ke', - 'Jumlah Saudara', 'Nomor HP', 'Email', 'Alamat', @@ -523,30 +524,6 @@ class StudentController extends Controller 'Tanggal Masuk (YYYY-MM-DD)', 'Status', 'Catatan', - 'Nama Ayah', - 'NIK Ayah', - 'Tahun Lahir Ayah', - 'Pendidikan Ayah', - 'Pekerjaan Ayah', - 'No. HP Ayah', - 'Alamat Ayah', - 'Status Hidup Ayah', - 'Nama Ibu', - 'NIK Ibu', - 'Tahun Lahir Ibu', - 'Pendidikan Ibu', - 'Pekerjaan Ibu', - 'No. HP Ibu', - 'Alamat Ibu', - 'Status Hidup Ibu', - 'Nama Wali', - 'NIK Wali', - 'Tahun Lahir Wali', - 'Pendidikan Wali', - 'Pekerjaan Wali', - 'No. HP Wali', - 'Alamat Wali', - 'Status Hidup Wali', ]; $sheet->fromArray($headers, null, 'A1'); @@ -560,9 +537,6 @@ class StudentController extends Controller '2010-01-15', 'Islam', 'Indonesia', - '3512345678901235', - '1', - '2', '081234567890', 'contoh@siswa.local', 'Jl. Contoh No. 1', @@ -577,30 +551,6 @@ class StudentController extends Controller '2026-07-15', 'active', 'Catatan opsional', - 'Budi Santoso', - '3512345678901111', - '1980', - 'SMA', - 'Wiraswasta', - '081200000001', - 'Jl. Ayah No. 1', - 'Ya', - 'Siti Aminah', - '3512345678902222', - '1982', - 'SMA', - 'Ibu Rumah Tangga', - '081200000002', - 'Jl. Ibu No. 1', - 'Ya', - 'Ahmad Wali', - '3512345678903333', - '1975', - 'S1', - 'Pegawai Swasta', - '081200000003', - 'Jl. Wali No. 1', - 'Ya', ], null, 'A2'); for ($columnIndex = 1; $columnIndex <= count($headers); $columnIndex++) { @@ -636,9 +586,6 @@ class StudentController extends Controller ['Tanggal Lahir (YYYY-MM-DD)', 'Format contoh: 2010-01-15.'], ['Agama', 'Opsional, contoh: Islam, Kristen, Katolik, Hindu, Buddha, Konghucu.'], ['Kewarganegaraan', 'Opsional, default aman: Indonesia.'], - ['No. Kartu Keluarga', 'Opsional.'], - ['Anak Ke', 'Opsional, angka bulat minimal 1.'], - ['Jumlah Saudara', 'Opsional, angka bulat minimal 0.'], ['Nomor HP', 'Opsional.'], ['Email', 'Opsional, harus format email valid bila diisi.'], ['Alamat', 'Opsional.'], @@ -652,31 +599,6 @@ class StudentController extends Controller ['Kelas', 'Isi dengan nama kelas persis seperti sheet Referensi.'], ['Tanggal Masuk (YYYY-MM-DD)', 'Format contoh: 2026-07-15.'], ['Status', 'Gunakan: active, inactive, transferred, graduated, dropped.'], - ['Catatan', 'Opsional.'], - ['Nama Ayah', 'Opsional.'], - ['NIK Ayah', 'Opsional.'], - ['Tahun Lahir Ayah', 'Opsional, angka 4 digit.'], - ['Pendidikan Ayah', 'Opsional.'], - ['Pekerjaan Ayah', 'Opsional.'], - ['No. HP Ayah', 'Opsional.'], - ['Alamat Ayah', 'Opsional.'], - ['Status Hidup Ayah', 'Opsional, isi Ya/Tidak atau Hidup/Meninggal.'], - ['Nama Ibu', 'Opsional.'], - ['NIK Ibu', 'Opsional.'], - ['Tahun Lahir Ibu', 'Opsional, angka 4 digit.'], - ['Pendidikan Ibu', 'Opsional.'], - ['Pekerjaan Ibu', 'Opsional.'], - ['No. HP Ibu', 'Opsional.'], - ['Alamat Ibu', 'Opsional.'], - ['Status Hidup Ibu', 'Opsional, isi Ya/Tidak atau Hidup/Meninggal.'], - ['Nama Wali', 'Opsional.'], - ['NIK Wali', 'Opsional.'], - ['Tahun Lahir Wali', 'Opsional, angka 4 digit.'], - ['Pendidikan Wali', 'Opsional.'], - ['Pekerjaan Wali', 'Opsional.'], - ['No. HP Wali', 'Opsional.'], - ['Alamat Wali', 'Opsional.'], - ['Status Hidup Wali', 'Opsional, isi Ya/Tidak atau Hidup/Meninggal.'], ], null, 'A1'); foreach (range('A', 'B') as $column) { $guideSheet->getColumnDimension($column)->setAutoSize(true); @@ -788,11 +710,8 @@ class StudentController extends Controller protected function formData(?Student $student = null): array { $classOptionsQuery = SchoolClass::query() - ->when( - $student?->class_id, - fn ($query) => $query->where('is_active', true)->orWhere('id', $student->class_id), - fn ($query) => $query->where('is_active', true) - ) + ->forActiveAcademicYear() + ->when($student?->class_id, fn ($query) => $query->orWhere('id', $student->class_id)) ->orderBy('name'); return [ @@ -829,7 +748,7 @@ class StudentController extends Controller { $academicYears = AcademicYear::where('is_active', true)->orderBy('name')->pluck('name', 'id'); $departments = Department::where('is_active', true)->orderBy('name')->pluck('name', 'id'); - $classes = SchoolClass::with(['academicYear', 'department'])->where('is_active', true)->orderBy('name')->get(); + $classes = SchoolClass::with(['academicYear', 'department'])->forActiveAcademicYear()->where('is_active', true)->orderBy('name')->get(); return [ 'academicYears' => $academicYears, diff --git a/app/Http/Controllers/StudentExitController.php b/app/Http/Controllers/StudentExitController.php index 0c67584..62f54e5 100644 --- a/app/Http/Controllers/StudentExitController.php +++ b/app/Http/Controllers/StudentExitController.php @@ -61,7 +61,7 @@ class StudentExitController extends Controller ], 'academicYears' => AcademicYear::orderBy('name')->pluck('name', 'id'), 'departments' => Department::orderBy('name')->pluck('name', 'id'), - 'classes' => SchoolClass::orderBy('name')->pluck('name', 'id'), + 'classes' => SchoolClass::forActiveAcademicYear()->orderBy('name')->pluck('name', 'id'), 'summary' => [ 'total' => $totalExits, 'with_letter' => $withLetterCount, diff --git a/app/Http/Controllers/StudentSelfServiceController.php b/app/Http/Controllers/StudentSelfServiceController.php index 10557fd..d61c9be 100644 --- a/app/Http/Controllers/StudentSelfServiceController.php +++ b/app/Http/Controllers/StudentSelfServiceController.php @@ -52,7 +52,7 @@ class StudentSelfServiceController extends Controller 'status' => $status, ], 'academicYears' => AcademicYear::orderBy('name')->pluck('name', 'id'), - 'classes' => SchoolClass::orderBy('name')->pluck('name', 'id'), + 'classes' => SchoolClass::forActiveAcademicYear()->orderBy('name')->pluck('name', 'id'), 'statuses' => $statusLabels, 'summary' => [ 'total' => (clone $summaryBaseQuery)->count(), diff --git a/app/Http/Controllers/StudentTransferController.php b/app/Http/Controllers/StudentTransferController.php index 23632a5..c888ca1 100644 --- a/app/Http/Controllers/StudentTransferController.php +++ b/app/Http/Controllers/StudentTransferController.php @@ -61,7 +61,7 @@ class StudentTransferController extends Controller ], 'academicYears' => AcademicYear::orderBy('name')->pluck('name', 'id'), 'departments' => Department::orderBy('name')->pluck('name', 'id'), - 'classes' => SchoolClass::orderBy('name')->pluck('name', 'id'), + 'classes' => SchoolClass::forActiveAcademicYear()->orderBy('name')->pluck('name', 'id'), 'summary' => [ 'total' => $totalTransfers, 'with_letter' => $withLetterCount, diff --git a/app/Models/SchoolClass.php b/app/Models/SchoolClass.php index 56c1da7..1e7df0f 100644 --- a/app/Models/SchoolClass.php +++ b/app/Models/SchoolClass.php @@ -36,6 +36,14 @@ class SchoolClass extends Model return $this->belongsTo(AcademicYear::class); } + /** + * Scope: hanya kelas pada tahun ajaran yang sedang aktif. + */ + public function scopeForActiveAcademicYear($query) + { + return $query->whereHas('academicYear', fn ($q) => $q->where('is_active', true)); + } + public function department(): BelongsTo { return $this->belongsTo(Department::class); diff --git a/resources/views/students/import.blade.php b/resources/views/students/import.blade.php index 8fad5fa..320070a 100644 --- a/resources/views/students/import.blade.php +++ b/resources/views/students/import.blade.php @@ -148,9 +148,6 @@