-- =====================================================================
-- SIMAP — Penyesuaian untuk jenjang SMP
--
--   mysql -u root -p simap_db < database/09_data_smp.sql
--
-- Mengubah identitas sekolah, rentang kelas, dan daftar mata pelajaran
-- menjadi SMP. Data siswa, guru, dan transaksi tidak disentuh.
--
-- Untuk kembali ke SD, jalankan bagian pemulihan di akhir berkas ini.
-- =====================================================================

SET NAMES utf8mb4;

-- Enum jenjang semula hanya SD dan MI. Diperluas lebih dulu agar sekolah
-- pada semua jenjang dapat memakai sistem ini.
ALTER TABLE sekolah
  MODIFY jenjang ENUM('SD','MI','SMP','MTS','SMA','MA','SMK','MAK') NOT NULL DEFAULT 'SD';

-- ------------------------------------------------------ IDENTITAS SEKOLAH
UPDATE sekolah SET
  nama            = 'SMP Islam Al Barokah',
  jenjang         = 'SMP',
  npsn            = '20200002',
  alamat          = 'Jl. Raya Cileungsi No. 1, Cileungsi',
  desa            = 'Cileungsi Kidul',
  kecamatan       = 'Cileungsi',
  kabupaten       = 'Bogor',
  provinsi        = 'Jawa Barat',
  kode_pos        = '16820',
  telepon         = '021-8230001',
  email           = 'info@smpislamalbarokah.sch.id',
  website         = 'https://smpislamalbarokah.sch.id',
  kepala_sekolah  = 'Drs. H. Muhammad Yusuf, M.Pd.',
  nip_kepala      = '196805121994031005'
WHERE id = 1;

UPDATE setting SET svalue = 'SMP' WHERE skey = 'jenjang';
UPDATE setting SET svalue = '7'   WHERE skey = 'tingkat_min';
UPDATE setting SET svalue = '9'   WHERE skey = 'tingkat_max';

-- --------------------------------------------------- MATA PELAJARAN SMP
-- Mapel SD dinonaktifkan, bukan dihapus, supaya nilai lama tetap terbaca
UPDATE mapel SET is_aktif = 0 WHERE tingkat_max <= 6;

INSERT INTO mapel (kode, nama, kelompok, tingkat_min, tingkat_max,
                   jam_per_minggu, urutan_rapor, warna, is_aktif)
VALUES
 ('PAI-SMP','Pendidikan Agama Islam dan Budi Pekerti','UMUM',7,9,3,1,'#1F4A3C',1),
 ('PP-SMP','Pendidikan Pancasila','UMUM',7,9,3,2,'#C0563F',1),
 ('BIN-SMP','Bahasa Indonesia','UMUM',7,9,6,3,'#E67E22',1),
 ('MTK-SMP','Matematika','UMUM',7,9,5,4,'#2B4570',1),
 ('IPA-SMP','Ilmu Pengetahuan Alam','UMUM',7,9,5,5,'#2E9E6B',1),
 ('IPS-SMP','Ilmu Pengetahuan Sosial','UMUM',7,9,4,6,'#8A6212',1),
 ('BING-SMP','Bahasa Inggris','UMUM',7,9,4,7,'#534AB7',1),
 ('PJOK-SMP','Pendidikan Jasmani, Olahraga, dan Kesehatan','UMUM',7,9,3,8,'#16A085',1),
 ('INF-SMP','Informatika','UMUM',7,9,2,9,'#4A5BC4',1),
 ('SBUD-SMP','Seni Budaya','UMUM',7,9,3,10,'#8E44AD',1),
 ('PRAK-SMP','Prakarya dan Kewirausahaan','UMUM',7,9,2,11,'#D35400',1),
 ('QH-SMP','Al-Qur''an Hadis','MULOK',7,9,2,12,'#16362B',1),
 ('AA-SMP','Akidah Akhlak','MULOK',7,9,2,13,'#1F4A3C',1),
 ('FIK-SMP','Fikih','MULOK',7,9,2,14,'#2E9E6B',1),
 ('SKI-SMP','Sejarah Kebudayaan Islam','MULOK',7,9,2,15,'#8A6212',1),
 ('BAR-SMP','Bahasa Arab','MULOK',7,9,2,16,'#C0563F',1),
 ('BSUN-SMP','Bahasa Sunda','MULOK',7,9,2,17,'#D4A017',1)
ON DUPLICATE KEY UPDATE nama = VALUES(nama), is_aktif = 1;

-- ---------------------------------------------------------------- KELAS
-- Kelas 1-6 dipetakan ke 7-9. Rombelnya diberi huruf berurutan lebih dulu
-- supaya tidak bentrok dengan kunci unik (tahun ajaran, tingkat, rombel)
-- ketika dua kelas lama jatuh ke tingkat yang sama.
UPDATE kelas SET rombel = CONCAT('X', id);

UPDATE kelas SET
  tingkat = CASE
    WHEN tingkat IN (1,4) THEN 7
    WHEN tingkat IN (2,5) THEN 8
    ELSE 9 END,
  fase = 'D';

UPDATE kelas k
  JOIN (
    SELECT id, CHAR(64 + ROW_NUMBER() OVER (PARTITION BY tingkat ORDER BY id)) AS huruf
      FROM kelas
  ) x ON x.id = k.id
   SET k.rombel = x.huruf,
       k.nama   = CONCAT(k.tingkat, x.huruf);

-- ------------------------------------------------- PENUGASAN MENGAJAR ULANG
-- Penugasan lama menunjuk mapel SD yang kini nonaktif
DELETE FROM guru_mapel;

INSERT IGNORE INTO guru_mapel (tahun_ajaran_id, guru_id, mapel_id, kelas_id)
SELECT (SELECT id FROM tahun_ajaran WHERE is_aktif = 1), k.wali_kelas_id, m.id, k.id
  FROM kelas k
  JOIN mapel m ON m.is_aktif = 1 AND k.tingkat BETWEEN m.tingkat_min AND m.tingkat_max
 WHERE k.wali_kelas_id IS NOT NULL;

INSERT IGNORE INTO guru_mapel (tahun_ajaran_id, guru_id, mapel_id, kelas_id)
SELECT (SELECT id FROM tahun_ajaran WHERE is_aktif = 1), g.id, m.id, k.id
  FROM guru g
  JOIN mapel m ON m.kode IN ('PAI-SMP','QH-SMP','AA-SMP','FIK-SMP','SKI-SMP','BAR-SMP')
                AND m.is_aktif = 1
  JOIN kelas k ON k.tingkat BETWEEN m.tingkat_min AND m.tingkat_max
 WHERE g.jenis_ptk = 'GURU_MAPEL' AND g.status = 'AKTIF';

-- --------------------------------------------- JENIS TAGIHAN KHAS SMP
UPDATE jenis_tagihan SET nominal_default = 250000 WHERE kode = 'SPP';
UPDATE jenis_tagihan SET nominal_default = 3500000 WHERE kode = 'DPP';
UPDATE jenis_tagihan SET nominal_default = 950000 WHERE kode = 'SERAGAM';
UPDATE jenis_tagihan SET nominal_default = 450000 WHERE kode = 'KEGIATAN';
UPDATE jenis_tagihan SET nominal_default = 500000 WHERE kode = 'BUKU';

INSERT IGNORE INTO jenis_tagihan (kode, nama, periode, nominal_default, is_aktif) VALUES
 ('STUDI','Studi Tur dan Karyawisata','SEKALI',750000,1),
 ('UJIAN','Biaya Ujian Akhir','TAHUNAN',400000,1);

-- ----------------------------------------------- EKSTRAKURIKULER KHAS SMP
INSERT IGNORE INTO ekstrakurikuler (nama, pembina_id, jadwal, kuota, deskripsi, is_aktif)
SELECT * FROM (
  SELECT 'Pramuka Penggalang' AS a, (SELECT id FROM guru LIMIT 1) AS b,
         'Jumat 14.00-16.00' AS c, 60 AS d, 'Kepramukaan tingkat penggalang' AS e, 1 AS f
  UNION ALL SELECT 'Palang Merah Remaja', (SELECT id FROM guru LIMIT 1),
         'Sabtu 08.00-10.00', 30, 'Pertolongan pertama dan kesehatan remaja', 1
  UNION ALL SELECT 'Karya Ilmiah Remaja', (SELECT id FROM guru LIMIT 1),
         'Rabu 14.30-16.00', 25, 'Penelitian sederhana dan lomba karya ilmiah', 1
  UNION ALL SELECT 'Futsal', (SELECT id FROM guru LIMIT 1),
         'Selasa 15.00-17.00', 25, 'Latihan rutin dan persiapan kompetisi', 1
  UNION ALL SELECT 'Tahfidz', (SELECT id FROM guru LIMIT 1),
         'Senin & Kamis 15.00-16.30', 40, 'Hafalan juz 30 dan juz 29', 1
  UNION ALL SELECT 'English Club', (SELECT id FROM guru LIMIT 1),
         'Kamis 14.30-16.00', 30, 'Percakapan dan lomba pidato bahasa Inggris', 1
) x;

SELECT 'penyesuaian SMP selesai' AS info,
       (SELECT nama FROM sekolah WHERE id = 1) AS sekolah,
       (SELECT COUNT(*) FROM mapel WHERE is_aktif = 1) AS mapel_aktif,
       (SELECT GROUP_CONCAT(nama ORDER BY tingkat, rombel) FROM kelas) AS kelas;

-- =====================================================================
-- PEMULIHAN KE SD
-- Jalankan bila sekolah ingin kembali memakai jenjang SD:
--
--   UPDATE sekolah SET nama='SD Islam Al Barokah', jenjang='SD' WHERE id=1;
--   UPDATE setting SET svalue='SD' WHERE skey='jenjang';
--   UPDATE setting SET svalue='1' WHERE skey='tingkat_min';
--   UPDATE setting SET svalue='6' WHERE skey='tingkat_max';
--   UPDATE mapel SET is_aktif=1 WHERE tingkat_max<=6;
--   UPDATE mapel SET is_aktif=0 WHERE kode LIKE '%-SMP';
--
-- Nama sekolah dan logo juga dapat diubah lewat menu Pengaturan tanpa SQL.
-- =====================================================================
