['name' => 'KETERLAMBATAN & KEHADIRAN'], 'B' => ['name' => 'PAKAIAN'], 'C' => ['name' => 'KEPRIBADIAN'], 'D' => ['name' => 'KETERTIBAN'], 'E' => ['name' => 'MEROKOK'], 'F' => ['name' => 'PORNOGRAFI'], 'G' => ['name' => 'SENJATA TAJAM'], 'H' => ['name' => 'NAPZA DAN / MINUMAN KERAS'], 'I' => ['name' => 'BERKELAHI / TAWURAN'], 'J' => ['name' => 'TINDAK PIDANA HUKUM'], ]; $catIds = []; foreach ($categories as $code => $cfg) { $row = $db->table('violation_categories')->where('code', $code)->get()->getRowArray(); if (! $row) { $db->table('violation_categories')->insert([ 'code' => $code, 'name' => $cfg['name'], 'description' => null, 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s'), ]); $catIds[$code] = (int) $db->insertID(); } else { $catIds[$code] = (int) $row['id']; } } // Helper untuk insert jika belum ada (berdasarkan title) $insertViolation = function (string $code, string $title, int $score, ?string $description = null) use ($db, $catIds): void { if (! isset($catIds[$code])) { return; } $exists = $db->table('violations') ->where('category_id', $catIds[$code]) ->where('title', $title) ->countAllResults(); if ($exists > 0) { return; } $db->table('violations')->insert([ 'category_id' => $catIds[$code], 'code' => null, 'title' => $title, 'description' => $description, 'score' => $score, 'is_active' => 1, 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s'), ]); }; // 2) Seed pelanggaran per kategori (ringkas dari tabel yang kamu kirim) // A — Keterlambatan & Kehadiran $insertViolation('A', 'Terlambat (dipulangkan dicatat tidak hadir tanpa keterangan)', 5); $insertViolation('A', 'Tidak masuk tanpa keterangan', 5); $insertViolation('A', 'Tidak masuk dengan membuat keterangan palsu', 10); $insertViolation('A', 'Tidak mengikuti jam pelajaran tertentu', 5); $insertViolation('A', 'Keluar saat pelajaran berlangsung dan tidak kembali sampai pulang', 5); $insertViolation('A', 'Tidak ikut upacara bendera', 5); $insertViolation('A', 'Meninggalkan pelajaran atau sekolah dengan izin palsu', 10); // B — Pakaian $insertViolation('B', 'Memakai seragam tidak sesuai aturan (teguran 1)', 2); $insertViolation('B', 'Memakai seragam tidak sesuai aturan (teguran 2 + surat pernyataan 1)', 2); $insertViolation('B', 'Memakai seragam tidak sesuai aturan (teguran 3 + sanksi sekolah)', 2); $insertViolation('B', 'Tidak memakai seragam sekolah sesuai jadwal', 3); // C — Kepribadian $insertViolation('C', 'Berhias berlebihan', 5); $insertViolation('C', 'Siswa putra memakai gelang, kalung, anting', 10); $insertViolation('C', 'Memakai tindik di wajah atau tubuh lain (siswi)', 10); $insertViolation('C', 'Memakai tato / atribut tidak wajar bagi pelajar', 20); $insertViolation('C', 'Berduaan/bermesraan/pacaran (tindak asusila, melanggar kesopanan)', 50); $insertViolation('C', 'Melawan kepala sekolah/guru/karyawan dengan ancaman', 75); $insertViolation('C', 'Melawan kepala sekolah/guru/karyawan dengan pemukulan', 100); $insertViolation('C', 'Intimidasi / bullying dengan kekerasan', 75); $insertViolation('C', 'Tindakan tidak menyenangkan sesama siswa', 15); $insertViolation('C', 'Mengaktifkan HP saat KBM berlangsung', 5); $insertViolation('C', 'Mencemarkan nama kepala sekolah/guru/karyawan/sekolah', 50); $insertViolation('C', 'Diketahui hamil / menikah', 100); // D — Ketertiban $insertViolation('D', 'Mengotori / mencoret benda milik sekolah/guru/karyawan/teman/lingkungan', 15); $insertViolation('D', 'Merusak atau mengambil barang milik sekolah/guru/karyawan/teman', 50); $insertViolation('D', 'Membawa/menggunakan benda tak terkait KBM tanpa izin', 15); $insertViolation('D', 'Memakai sandal/sepatu sandal saat pelajaran tanpa izin', 5); $insertViolation('D', 'Melompat pagar sekolah untuk keluar/masuk', 20); $insertViolation('D', 'Tidak membuang sampah pada tempatnya', 3); $insertViolation('D', 'Merusak tanaman dengan sengaja', 5); // E — Merokok $insertViolation('E', 'Membawa rokok ke sekolah', 20); $insertViolation('E', 'Menghisap rokok di sekolah', 25); // F — Pornografi $insertViolation('F', 'Memiliki/membawa/mempergunakan media berkonten pornografi/kekerasan', 65); $insertViolation('F', 'Memperjualbelikan media berkonten pornografi/kekerasan', 75); // G — Senjata tajam $insertViolation('G', 'Membawa senjata tajam/api/bahan peledak tanpa izin', 100); $insertViolation('G', 'Memperjualbelikan senjata tajam/api/bahan peledak', 100); $insertViolation('G', 'Menggunakan senjata tajam/api/bahan peledak untuk mengancam/melukai', 100); // H — NAPZA / minuman keras $insertViolation('H', 'Menggunakan napza dan/atau minuman terlarang', 100); $insertViolation('H', 'Membawa napza dan/atau minuman terlarang', 100); $insertViolation('H', 'Mengedarkan/memperjualbelikan napza/minuman keras', 100); // I — Berkelahi / tawuran $insertViolation('I', 'Indikasi / berkelahi / tawuran dengan siswa sekolah lain', 100); $insertViolation('I', 'Berkelahi antar siswa', 100); // J — Tindak pidana hukum lain $insertViolation('J', 'Tersangkut tindak pidana lainnya', 10); } public function down() { // Tidak perlu menghapus data seed; biarkan tetap ada. } }