Files
presensi/app/Database/Migrations/2026-02-27-110300_SeedViolationsFromPolicy.php
2026-03-05 14:37:36 +07:00

147 lines
6.7 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace App\Database\Migrations;
use CodeIgniter\Database\Migration;
/**
* Seed awal master pelanggaran berdasarkan tabel tata tertib
* yang kamu kirim (kategori AI + tindak pidana).
*
* Catatan: migration ini hanya menambah data jika belum ada
* (dicek berdasarkan code kategori + title pelanggaran).
*/
class SeedViolationsFromPolicy extends Migration
{
public function up()
{
$db = \Config\Database::connect();
// 1) Pastikan kategori ada
$categories = [
'A' => ['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.
}
}