-- phpMyAdmin SQL Dump
-- version 5.2.1
-- https://www.phpmyadmin.net/
--
-- Host: 127.0.0.1
-- Waktu pembuatan: 13 Feb 2026 pada 12.22
-- Versi server: 10.4.32-MariaDB
-- Versi PHP: 8.0.30

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- Database: `db_sekolah`
--

DELIMITER $$
--
-- Prosedur
--
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_laporan_surat` (IN `p_jenis` VARCHAR(10), IN `p_tanggal_awal` DATE, IN `p_tanggal_akhir` DATE)   BEGIN
    SELECT 
        s.nomor_surat,
        s.tanggal,
        s.perihal,
        s.keterangan,
        s.status,
        s.prioritas,
        u.nama AS input_by
    FROM surat s
    LEFT JOIN users u ON s.created_by = u.id
    WHERE s.jenis = p_jenis
      AND s.tanggal BETWEEN p_tanggal_awal AND p_tanggal_akhir
    ORDER BY s.tanggal DESC;
END$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_total_spp_siswa` (IN `p_siswa_id` INT)   BEGIN
    SELECT 
        s.nis,
        s.nama,
        COUNT(spp.id) AS total_pembayaran,
        SUM(spp.nominal) AS total_nominal,
        SUM(CASE WHEN spp.status = 'Lunas' THEN 1 ELSE 0 END) AS jumlah_lunas,
        SUM(CASE WHEN spp.status = 'Belum Lunas' THEN 1 ELSE 0 END) AS jumlah_belum_lunas
    FROM siswa s
    LEFT JOIN spp ON s.id = spp.siswa_id
    WHERE s.id = p_siswa_id
    GROUP BY s.id, s.nis, s.nama;
END$$

DELIMITER ;

-- --------------------------------------------------------

--
-- Struktur dari tabel `absensi`
--

CREATE TABLE `absensi` (
  `id` int(11) NOT NULL,
  `siswa_id` int(11) NOT NULL,
  `tanggal` date NOT NULL,
  `status` enum('Hadir','Sakit','Izin','Alpha') NOT NULL,
  `keterangan` text DEFAULT NULL,
  `created_at` timestamp NOT NULL DEFAULT current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data untuk tabel `absensi`
--

INSERT INTO `absensi` (`id`, `siswa_id`, `tanggal`, `status`, `keterangan`, `created_at`) VALUES
(4, 11, '2026-02-13', 'Hadir', 'Hadir', '2026-02-13 02:22:54'),
(5, 10, '2026-02-13', 'Izin', 'Sakit Perut', '2026-02-13 08:01:38'),
(6, 12, '2026-02-13', 'Sakit', 'Demam badan panas', '2026-02-13 08:02:37'),
(7, 6, '2026-02-13', 'Alpha', 'Tanpa keterangan', '2026-02-13 08:05:17'),
(8, 8, '2026-02-13', 'Hadir', 'Hadir', '2026-02-13 08:25:38');

-- --------------------------------------------------------

--
-- Struktur dari tabel `kelas`
--

CREATE TABLE `kelas` (
  `id` int(11) NOT NULL,
  `nama_kelas` varchar(20) NOT NULL,
  `tingkat` enum('X','XI','XII') NOT NULL,
  `jurusan` enum('IPA','IPS','Bahasa','Umum') DEFAULT 'Umum',
  `wali_kelas` varchar(100) DEFAULT NULL,
  `kapasitas` int(11) DEFAULT 36,
  `ruang_kelas` varchar(20) DEFAULT NULL,
  `tahun_ajaran` varchar(20) DEFAULT NULL,
  `created_at` timestamp NOT NULL DEFAULT current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data untuk tabel `kelas`
--

INSERT INTO `kelas` (`id`, `nama_kelas`, `tingkat`, `jurusan`, `wali_kelas`, `kapasitas`, `ruang_kelas`, `tahun_ajaran`, `created_at`) VALUES
(25, 'X. 1', 'X', 'Umum', 'Nur Rochman Rahayu P.A, S.Pd', 24, 'Ruang X 1', '2025/2026', '2026-02-09 01:04:37'),
(29, 'XI  A', 'XI', 'IPA', 'Ayu Noviyanti Putri Syani, S.Pd', 30, 'Ruang XI A', '2025/2026', '2026-02-09 01:24:18'),
(30, 'XII IPA 1', 'XII', 'IPA', 'Dewi Ahriningsih, S.Pd', 22, 'Ruang XII IPA 1', '2025/2026', '2026-02-12 11:32:24'),
(31, 'X. 2', 'X', 'Umum', 'Mulyadi, SE,. M.M', 23, 'Ruang X 2', '2025/2026', '2026-02-12 11:36:18'),
(32, 'X. 3', 'X', 'Umum', 'Fatimah Jahro, S.Pd.', 23, 'Ruang X 3', '2025/2026', '2026-02-12 11:37:15'),
(33, 'X. 4', 'X', 'Umum', 'Farah Aulia, S.Pd.', 24, 'Ruang X 4', '2025/2026', '2026-02-12 11:38:03'),
(34, 'XI  B-1', 'XI', 'IPS', 'Hj. Romzah, S.Pd.I', 20, 'Ruang XI B-1', '2025/2026', '2026-02-12 11:39:43'),
(35, 'XI B-2', 'XI', 'IPS', 'Bakhtiar, S.Pd.', 21, 'Ruang XI B-2', '2025/2026', '2026-02-12 11:40:40'),
(36, 'XII IPA 2', 'XII', 'IPA', 'Ulin Nuha, L.C', 21, 'Ruang XII IPA 2', '2025/2026', '2026-02-12 11:44:10'),
(37, 'XII IPS 1', 'XII', 'IPS', 'Murti Sari Sandy, S.Pd', 21, 'Ruang XII IPS 1', '2025/2026', '2026-02-12 11:45:29'),
(38, 'XII IPS 2', 'XII', 'IPS', 'Marhan Susanto, Amd.Kom', 19, 'Ruang XII IPS 2', '2025/2026', '2026-02-12 11:46:26');

-- --------------------------------------------------------

--
-- Struktur dari tabel `mata_pelajaran`
--

CREATE TABLE `mata_pelajaran` (
  `id` int(11) NOT NULL,
  `kode_mapel` varchar(10) NOT NULL,
  `nama_mapel` varchar(100) NOT NULL,
  `kategori` enum('Wajib','Peminatan','Lintas Minat','Muatan Lokal','Ekstrakurikuler','Pilihan') DEFAULT 'Wajib',
  `kkm` int(11) DEFAULT 75,
  `created_at` timestamp NOT NULL DEFAULT current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data untuk tabel `mata_pelajaran`
--

INSERT INTO `mata_pelajaran` (`id`, `kode_mapel`, `nama_mapel`, `kategori`, `kkm`, `created_at`) VALUES
(8, 'MTK_01', 'Matematika', 'Wajib', 75, '2026-02-13 02:16:42'),
(9, 'MTK_02', 'Matematika Peminatan', 'Peminatan', 75, '2026-02-13 02:17:10');

-- --------------------------------------------------------

--
-- Struktur dari tabel `nilai`
--

CREATE TABLE `nilai` (
  `id` int(11) NOT NULL,
  `siswa_id` int(11) NOT NULL,
  `mapel_id` int(11) NOT NULL,
  `semester` enum('1','2') NOT NULL,
  `tahun_ajaran` varchar(20) NOT NULL,
  `nilai_tugas` decimal(5,2) DEFAULT NULL,
  `nilai_uts` decimal(5,2) DEFAULT NULL,
  `nilai_uas` decimal(5,2) DEFAULT NULL,
  `nilai_akhir` decimal(5,2) DEFAULT NULL,
  `predikat` enum('A','B','C','D','E') DEFAULT NULL,
  `created_at` timestamp NOT NULL DEFAULT current_timestamp(),
  `updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data untuk tabel `nilai`
--

INSERT INTO `nilai` (`id`, `siswa_id`, `mapel_id`, `semester`, `tahun_ajaran`, `nilai_tugas`, `nilai_uts`, `nilai_uas`, `nilai_akhir`, `predikat`, `created_at`, `updated_at`) VALUES
(32, 6, 8, '2', '2025/2026', 87.00, 78.00, 98.00, 87.67, 'B', '2026-02-13 09:48:02', '2026-02-13 09:48:02');

-- --------------------------------------------------------

--
-- Struktur dari tabel `siswa`
--

CREATE TABLE `siswa` (
  `id` int(11) NOT NULL,
  `nis` varchar(20) NOT NULL COMMENT 'Nomor Induk Siswa',
  `nisn` varchar(20) NOT NULL COMMENT 'Nomor Induk Siswa Nasional',
  `nama` varchar(100) NOT NULL,
  `jk` enum('Laki-laki','Perempuan') NOT NULL,
  `tempat_lahir` varchar(50) NOT NULL,
  `tanggal_lahir` date NOT NULL,
  `alamat` text NOT NULL,
  `rt` varchar(5) DEFAULT NULL,
  `rw` varchar(5) DEFAULT NULL,
  `kelurahan` varchar(50) DEFAULT NULL,
  `kecamatan` varchar(50) DEFAULT NULL,
  `kota` varchar(50) DEFAULT NULL,
  `provinsi` varchar(50) DEFAULT NULL,
  `kode_pos` varchar(10) DEFAULT NULL,
  `no_telp` varchar(15) NOT NULL,
  `email` varchar(100) DEFAULT NULL,
  `agama` enum('Islam','Kristen','Katolik','Hindu','Buddha','Konghucu') NOT NULL,
  `kewarganegaraan` varchar(20) DEFAULT 'Indonesia',
  `kelas` varchar(20) NOT NULL,
  `tahun_masuk` year(4) DEFAULT NULL,
  `status_siswa` enum('Aktif','Lulus','Pindah','Keluar','DO') DEFAULT 'Aktif',
  `nama_ayah` varchar(100) NOT NULL,
  `pekerjaan_ayah` varchar(50) DEFAULT NULL,
  `pendidikan_ayah` varchar(50) DEFAULT NULL,
  `nama_ibu` varchar(100) NOT NULL,
  `pekerjaan_ibu` varchar(50) DEFAULT NULL,
  `pendidikan_ibu` varchar(50) DEFAULT NULL,
  `nama_wali` varchar(100) DEFAULT NULL,
  `hubungan_wali` varchar(50) DEFAULT NULL,
  `no_telp_ortu` varchar(15) DEFAULT NULL,
  `anak_ke` int(11) DEFAULT NULL,
  `jumlah_saudara` int(11) DEFAULT NULL,
  `tinggi_badan` int(11) DEFAULT NULL COMMENT 'dalam cm',
  `berat_badan` int(11) DEFAULT NULL COMMENT 'dalam kg',
  `golongan_darah` enum('A','B','AB','O','-') DEFAULT '-',
  `riwayat_penyakit` text DEFAULT NULL,
  `alergi` text DEFAULT NULL,
  `prestasi` text DEFAULT NULL,
  `catatan_khusus` text DEFAULT NULL,
  `foto` varchar(255) DEFAULT NULL,
  `tanggal_daftar` datetime DEFAULT current_timestamp(),
  `created_at` timestamp NOT NULL DEFAULT current_timestamp(),
  `updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data untuk tabel `siswa`
--

INSERT INTO `siswa` (`id`, `nis`, `nisn`, `nama`, `jk`, `tempat_lahir`, `tanggal_lahir`, `alamat`, `rt`, `rw`, `kelurahan`, `kecamatan`, `kota`, `provinsi`, `kode_pos`, `no_telp`, `email`, `agama`, `kewarganegaraan`, `kelas`, `tahun_masuk`, `status_siswa`, `nama_ayah`, `pekerjaan_ayah`, `pendidikan_ayah`, `nama_ibu`, `pekerjaan_ibu`, `pendidikan_ibu`, `nama_wali`, `hubungan_wali`, `no_telp_ortu`, `anak_ke`, `jumlah_saudara`, `tinggi_badan`, `berat_badan`, `golongan_darah`, `riwayat_penyakit`, `alergi`, `prestasi`, `catatan_khusus`, `foto`, `tanggal_daftar`, `created_at`, `updated_at`) VALUES
(6, '1111111111', '0106564290', 'Adam Sunaryo', 'Laki-laki', 'Bekasi', '2010-03-06', 'Jln. Raya Jatiwaringin No. 8 Kota Bekasi', '003', '009', 'Jaticempaka', 'Pondok Gede', 'Kota Bekasi', 'Jawa Barat', '17411', '0824264621342', 'adamsunaryo@gmail.com', 'Islam', 'Indonesia', 'X. 1', '2025', 'Aktif', 'Sumiran', 'Wiraswasta', 'SMA/SMK/Sederajat', 'Hamidah', 'Wiraswasta', 'SMA/SMK/Sederajat', 'Rosdiana', 'Nenek', '0823425627432', 1, 3, 90, 45, 'B', 'saya pernah mengalamin sakit demam berdarah', 'alergi panas ', 'saya pernah meraih juara 1 lomba cerdas cermat tingkat provinsi', 'anak ini tidak mampu untuk biaya sekolah karena orangtua tidak mampu atau tidak bekerja', 'uploads/siswa/siswa_1770715664_6118.png', '2025-06-26 00:00:00', '2026-02-06 03:59:00', '2026-02-10 10:01:00'),
(7, '12334355345', '0066968613', 'Riski Pratama', 'Laki-laki', 'Bekasi', '2006-07-10', 'Jln. Raya Jatiwaringin No. 8 Kota Bekasi', '003', '009', 'Jaticempaka', 'Pondok Gede', 'Kota Bekasi', 'Jawa Barat', '17411', '083243253563', 'Riski@gmail.com', 'Islam', 'Indonesia', 'XII IPS 1', '2025', 'Aktif', 'Sumiran', 'Arsitek/Insinyur', 'S2', 'Hasunah', 'Pengacara/Notaris', 'S3', 'Beny', 'Saudara', '08356213561231', 3, 4, 145, 50, 'AB', 'tidak ada', 'tidak ada', 'juara satu lomba futsal', 'anak ini butuh perhatian lebih', 'uploads/siswa/siswa_1770715757_6931.png', '2026-02-13 00:00:00', '2026-02-10 03:52:48', '2026-02-13 02:03:03'),
(8, '11111111112', '0106309658', 'Aghniyya Putri Risdiyanti', 'Perempuan', 'Kota Bekasi', '2010-04-14', 'Vila Nusa Indah Blok F.2/6 RT.001/017', '001', '017', 'Bojong Kulur', 'Gunung Putri', 'Bogor', 'Jawa Barat', '16969', '0837213526412', 'aghniyah@gmail.com', 'Islam', 'Indonesia', 'X. 1', '2025', 'Aktif', 'Dwi Yuwono Risdianto', 'Pegawai Swasta', 'S1/D4', 'Dwi Puji Astuti', 'Ibu Rumah Tangga', 'SMA/SMK/Sederajat', 'Putri Rosiana', 'Bibi', '084623727612', 1, 1, 80, 45, 'A', 'Tidak Ada', 'Tidak Ada', 'Juara 1 kelas', 'Lebih giat belajar untuk mempertahankan juara kelas', 'uploads/siswa/siswa_1770718613_6489.png', '2025-06-12 00:00:00', '2026-02-10 10:16:53', '2026-02-10 10:16:53'),
(10, '12334359878', '0067654254', 'Hikmah Maulidah', 'Perempuan', 'Jakarta', '2010-07-07', 'Jln. Hikmah II ', '003', '007', 'Bojong Hikmah', 'Pondok Kopi', 'Jakarta Timur', 'DKI Jakarta', '25641', '086354326', 'Hikmah@gmail.com', 'Islam', 'Indonesia', 'X. 2', '2025', 'Aktif', 'Hikmalidul', 'Wiraswasta', 'S1/D4', 'Himatul', 'Ibu Rumah Tangga', 'S1/D4', 'BenyQuty', 'Kakak Kandung', '083243265232', 1, 2, 98, 45, 'O', 'Tidak Ada', 'Tidak Ada', 'Juara 1 Kelas & Juara 2 Umum', 'Anaknya Bandel ', 'uploads/siswa/siswa_1770859131_4605.png', '2026-02-05 00:00:00', '2026-02-12 01:18:51', '2026-02-12 01:20:32'),
(11, '47324234544', '0037826762', 'Nadia Syahla', 'Perempuan', 'Jakarta', '2008-06-12', 'Jl. Nadia Barak No 08', '009', '012', 'Pondok Bambu', 'Pondok Bambu', 'Jakarta Timur', 'DKI Jakarta', '25341', '0823562362545', 'Nadia@gmail.com', 'Islam', 'Indonesia', 'XII IPS 1', '2023', 'Aktif', 'Haikal', 'Buruh', 'SMA/SMK/Sederajat', 'Mahiroh', 'Ibu Rumah Tangga', 'SMA/SMK/Sederajat', 'Fathir ', 'Kakak Kandung', '083562612311', 2, 2, 145, 67, 'O', 'Tidak Ada', 'Makan Kepiting', 'Juara 1 Olimpiade Sains', 'Lebih giat lagi belajar', 'uploads/siswa/siswa_1770877225_5705.png', '2023-07-12 00:00:00', '2026-02-12 06:20:25', '2026-02-12 06:20:25'),
(12, '1233243243', '0023127833', 'Naila Husna', 'Perempuan', 'Bekasi', '2010-06-11', 'Jl. Husna Husada VI Jatiwaringin', '006', '009', 'Jatiwaringin', 'Pondok Gede', 'Kota Bekasi', 'Jawa Barat', '17411', '0832653122', 'Husna@gmail.com', 'Islam', 'Indonesia', 'XI B-1', '2026', 'Aktif', 'Husni', 'Guru/Dosen', 'S2', 'Naila', 'Dokter/Tenaga Medis', 'S2', 'Brigida', 'Kakak Kandung', '08356231231', 2, 4, 98, 45, '', 'Tidak Ada', 'Tidak Ada', 'Juara 1 Lomba Cerdas Cermat Tingkat Nasional', 'Pertahankan Prestasi sampai lulus sekolah', 'uploads/siswa/siswa_1770944996_6600.png', '2024-07-13 00:00:00', '2026-02-13 01:09:56', '2026-02-13 01:09:56');

-- --------------------------------------------------------

--
-- Struktur dari tabel `spp`
--

CREATE TABLE `spp` (
  `id` int(11) NOT NULL,
  `siswa_id` int(11) NOT NULL,
  `bulan` varchar(20) NOT NULL,
  `tahun` year(4) NOT NULL,
  `nominal` int(11) NOT NULL,
  `status` enum('Lunas','Belum Lunas','Cicilan PPDB','Lunas SPP','Lunas PPDB','Lunas LKS','Cicilan LKS') DEFAULT 'Lunas',
  `tanggal_bayar` datetime DEFAULT current_timestamp(),
  `metode_bayar` enum('Tunai','Transfer','E-Wallet') DEFAULT 'Tunai',
  `petugas` varchar(100) DEFAULT NULL,
  `bukti_bayar` varchar(255) DEFAULT NULL,
  `catatan` text DEFAULT NULL,
  `created_at` timestamp NOT NULL DEFAULT current_timestamp(),
  `updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data untuk tabel `spp`
--

INSERT INTO `spp` (`id`, `siswa_id`, `bulan`, `tahun`, `nominal`, `status`, `tanggal_bayar`, `metode_bayar`, `petugas`, `bukti_bayar`, `catatan`, `created_at`, `updated_at`) VALUES
(17, 11, 'Februari', '2026', 1000000, 'Lunas', '2026-02-13 09:20:00', 'Transfer', 'Admin Sistem', 'bukti_11_1770949249.jpg', 'Pembayaran Uang UAM', '2026-02-13 02:20:49', '2026-02-13 02:20:49');

--
-- Trigger `spp`
--
DELIMITER $$
CREATE TRIGGER `before_insert_spp` BEFORE INSERT ON `spp` FOR EACH ROW BEGIN
    IF NEW.tahun IS NULL THEN
        SET NEW.tahun = YEAR(CURDATE());
    END IF;
END
$$
DELIMITER ;

-- --------------------------------------------------------

--
-- Struktur dari tabel `surat`
--

CREATE TABLE `surat` (
  `id` int(11) NOT NULL,
  `jenis` enum('Masuk','Keluar') NOT NULL,
  `nomor_surat` varchar(100) NOT NULL,
  `tanggal` date NOT NULL,
  `perihal` text NOT NULL,
  `keterangan` varchar(255) DEFAULT NULL COMMENT 'Pengirim (Masuk) atau Tujuan (Keluar)',
  `lampiran` varchar(255) DEFAULT NULL COMMENT 'Nama file lampiran',
  `file_path` varchar(500) DEFAULT NULL COMMENT 'Path file di server',
  `status` enum('Draft','Terkirim','Diterima','Diproses','Selesai','Arsip') DEFAULT 'Arsip',
  `prioritas` enum('Biasa','Penting','Sangat Penting','Segera') DEFAULT 'Biasa',
  `disposisi_kepada` varchar(255) DEFAULT NULL,
  `catatan_disposisi` text DEFAULT NULL,
  `tanggal_disposisi` datetime DEFAULT NULL,
  `created_by` int(11) DEFAULT NULL COMMENT 'User ID yang input',
  `updated_by` int(11) DEFAULT NULL COMMENT 'User ID yang update terakhir',
  `created_at` timestamp NOT NULL DEFAULT current_timestamp(),
  `updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data untuk tabel `surat`
--

INSERT INTO `surat` (`id`, `jenis`, `nomor_surat`, `tanggal`, `perihal`, `keterangan`, `lampiran`, `file_path`, `status`, `prioritas`, `disposisi_kepada`, `catatan_disposisi`, `tanggal_disposisi`, `created_by`, `updated_by`, `created_at`, `updated_at`) VALUES
(23, 'Keluar', '001/MA-AS-02/Ext.B/II/2026', '2026-02-13', 'Surat Peserta Lomba Paskibra', 'Panitia Lomba Paskibra', '080 Surat Lomba Paskibra.pdf', 'uploads/surat_keluar/20260213031132_698e8854ef8ee.pdf', 'Diterima', 'Segera', NULL, NULL, NULL, 1, NULL, '2026-02-13 02:11:32', '2026-02-13 02:11:32'),
(24, 'Masuk', '001/MTS-AS-03/Ext.B/II/2026', '2026-02-13', 'Surat Undangan Peringatan Maulid Nabi Muhammad SAW', 'MTS As-Syafiiyah 03', 'Pernyataan TKA Anshor Fitrah I.pdf', 'uploads/surat_masuk/20260213031426_698e89024ab05.pdf', 'Diterima', 'Biasa', 'Wakil Kesiswaan', 'Siswa-Siswi MA As-Syafi\'iyah 02', '2026-02-13 03:14:26', 1, NULL, '2026-02-13 02:14:26', '2026-02-13 02:14:26');

--
-- Trigger `surat`
--
DELIMITER $$
CREATE TRIGGER `before_insert_surat` BEFORE INSERT ON `surat` FOR EACH ROW BEGIN
    IF NEW.created_by IS NULL THEN
        -- Bisa diisi dari session PHP
        SET NEW.created_by = NULL;
    END IF;
END
$$
DELIMITER ;

-- --------------------------------------------------------

--
-- Struktur dari tabel `users`
--

CREATE TABLE `users` (
  `id` int(11) NOT NULL,
  `nama` varchar(100) NOT NULL,
  `username` varchar(50) NOT NULL,
  `password` varchar(255) NOT NULL,
  `role` enum('admin','guru','staff','tu') DEFAULT 'admin',
  `email` varchar(100) DEFAULT NULL,
  `no_telp` varchar(15) DEFAULT NULL,
  `foto` varchar(255) DEFAULT NULL,
  `status` enum('Aktif','Nonaktif') DEFAULT 'Aktif',
  `last_login` datetime DEFAULT NULL,
  `created_at` timestamp NOT NULL DEFAULT current_timestamp(),
  `updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data untuk tabel `users`
--

INSERT INTO `users` (`id`, `nama`, `username`, `password`, `role`, `email`, `no_telp`, `foto`, `status`, `last_login`, `created_at`, `updated_at`) VALUES
(1, 'Admin Sistem', 'admin', '0192023a7bbd73250516f069df18b500', 'admin', NULL, NULL, NULL, 'Aktif', '2026-02-13 15:50:22', '2026-02-04 08:17:57', '2026-02-13 08:50:22'),
(2, 'Guru Wali Kelas', 'guru', '9310f83135f238b04af729fec041cca8', 'guru', NULL, NULL, NULL, 'Aktif', NULL, '2026-02-04 08:17:57', '2026-02-06 04:24:12'),
(3, 'Staff TU', 'staff', '9c607f6c87d784b1f74c208fcf688a11', 'staff', NULL, NULL, NULL, 'Aktif', NULL, '2026-02-04 08:17:57', '2026-02-04 08:17:57'),
(4, 'Tata Usaha', 'tu', '4ecd3840c992833d18a3a694e3f4b1e7', 'tu', NULL, NULL, NULL, 'Aktif', NULL, '2026-02-04 08:17:57', '2026-02-04 08:17:57');

-- --------------------------------------------------------

--
-- Stand-in struktur untuk tampilan `view_siswa_ringkasan`
-- (Lihat di bawah untuk tampilan aktual)
--
CREATE TABLE `view_siswa_ringkasan` (
`id` int(11)
,`nis` varchar(20)
,`nisn` varchar(20)
,`nama` varchar(100)
,`jk` enum('Laki-laki','Perempuan')
,`tempat_lahir` varchar(50)
,`tanggal_lahir` date
,`umur` bigint(21)
,`kelas` varchar(20)
,`status_siswa` enum('Aktif','Lulus','Pindah','Keluar','DO')
,`nama_ayah` varchar(100)
,`nama_ibu` varchar(100)
,`no_telp` varchar(15)
,`alamat` text
,`tahun_masuk` year(4)
);

-- --------------------------------------------------------

--
-- Stand-in struktur untuk tampilan `view_spp_siswa`
-- (Lihat di bawah untuk tampilan aktual)
--
CREATE TABLE `view_spp_siswa` (
`siswa_id` int(11)
,`nis` varchar(20)
,`nama` varchar(100)
,`kelas` varchar(20)
,`bulan` varchar(20)
,`tahun` year(4)
,`nominal` int(11)
,`status` enum('Lunas','Belum Lunas','Cicilan PPDB','Lunas SPP','Lunas PPDB','Lunas LKS','Cicilan LKS')
,`tanggal_bayar` datetime
,`metode_bayar` enum('Tunai','Transfer','E-Wallet')
);

-- --------------------------------------------------------

--
-- Stand-in struktur untuk tampilan `view_statistik_surat`
-- (Lihat di bawah untuk tampilan aktual)
--
CREATE TABLE `view_statistik_surat` (
`jenis` enum('Masuk','Keluar')
,`total` bigint(21)
,`draft` decimal(22,0)
,`terkirim` decimal(22,0)
,`diterima` decimal(22,0)
,`diproses` decimal(22,0)
,`selesai` decimal(22,0)
,`arsip` decimal(22,0)
,`sangat_penting` decimal(22,0)
,`penting` decimal(22,0)
);

-- --------------------------------------------------------

--
-- Stand-in struktur untuk tampilan `view_surat_keluar`
-- (Lihat di bawah untuk tampilan aktual)
--
CREATE TABLE `view_surat_keluar` (
`id` int(11)
,`nomor_surat` varchar(100)
,`tanggal` date
,`perihal` text
,`tujuan` varchar(255)
,`status` enum('Draft','Terkirim','Diterima','Diproses','Selesai','Arsip')
,`prioritas` enum('Biasa','Penting','Sangat Penting','Segera')
,`lampiran` varchar(255)
,`created_at` timestamp
,`input_by` varchar(100)
);

-- --------------------------------------------------------

--
-- Stand-in struktur untuk tampilan `view_surat_masuk`
-- (Lihat di bawah untuk tampilan aktual)
--
CREATE TABLE `view_surat_masuk` (
`id` int(11)
,`nomor_surat` varchar(100)
,`tanggal` date
,`perihal` text
,`pengirim` varchar(255)
,`status` enum('Draft','Terkirim','Diterima','Diproses','Selesai','Arsip')
,`prioritas` enum('Biasa','Penting','Sangat Penting','Segera')
,`disposisi_kepada` varchar(255)
,`catatan_disposisi` text
,`lampiran` varchar(255)
,`created_at` timestamp
,`input_by` varchar(100)
);

-- --------------------------------------------------------

--
-- Struktur untuk view `view_siswa_ringkasan`
--
DROP TABLE IF EXISTS `view_siswa_ringkasan`;

CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `view_siswa_ringkasan`  AS SELECT `s`.`id` AS `id`, `s`.`nis` AS `nis`, `s`.`nisn` AS `nisn`, `s`.`nama` AS `nama`, `s`.`jk` AS `jk`, `s`.`tempat_lahir` AS `tempat_lahir`, `s`.`tanggal_lahir` AS `tanggal_lahir`, timestampdiff(YEAR,`s`.`tanggal_lahir`,curdate()) AS `umur`, `s`.`kelas` AS `kelas`, `s`.`status_siswa` AS `status_siswa`, `s`.`nama_ayah` AS `nama_ayah`, `s`.`nama_ibu` AS `nama_ibu`, `s`.`no_telp` AS `no_telp`, `s`.`alamat` AS `alamat`, `s`.`tahun_masuk` AS `tahun_masuk` FROM `siswa` AS `s` WHERE `s`.`status_siswa` = 'Aktif' ;

-- --------------------------------------------------------

--
-- Struktur untuk view `view_spp_siswa`
--
DROP TABLE IF EXISTS `view_spp_siswa`;

CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `view_spp_siswa`  AS SELECT `s`.`id` AS `siswa_id`, `s`.`nis` AS `nis`, `s`.`nama` AS `nama`, `s`.`kelas` AS `kelas`, `spp`.`bulan` AS `bulan`, `spp`.`tahun` AS `tahun`, `spp`.`nominal` AS `nominal`, `spp`.`status` AS `status`, `spp`.`tanggal_bayar` AS `tanggal_bayar`, `spp`.`metode_bayar` AS `metode_bayar` FROM (`siswa` `s` left join `spp` on(`s`.`id` = `spp`.`siswa_id`)) ORDER BY `s`.`nama` ASC, `spp`.`tahun` DESC, field(`spp`.`bulan`,'Januari','Februari','Maret','April','Mei','Juni','Juli','Agustus','September','Oktober','November','Desember') ASC ;

-- --------------------------------------------------------

--
-- Struktur untuk view `view_statistik_surat`
--
DROP TABLE IF EXISTS `view_statistik_surat`;

CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `view_statistik_surat`  AS SELECT `surat`.`jenis` AS `jenis`, count(0) AS `total`, sum(case when `surat`.`status` = 'Draft' then 1 else 0 end) AS `draft`, sum(case when `surat`.`status` = 'Terkirim' then 1 else 0 end) AS `terkirim`, sum(case when `surat`.`status` = 'Diterima' then 1 else 0 end) AS `diterima`, sum(case when `surat`.`status` = 'Diproses' then 1 else 0 end) AS `diproses`, sum(case when `surat`.`status` = 'Selesai' then 1 else 0 end) AS `selesai`, sum(case when `surat`.`status` = 'Arsip' then 1 else 0 end) AS `arsip`, sum(case when `surat`.`prioritas` = 'Sangat Penting' then 1 else 0 end) AS `sangat_penting`, sum(case when `surat`.`prioritas` = 'Penting' then 1 else 0 end) AS `penting` FROM `surat` GROUP BY `surat`.`jenis` ;

-- --------------------------------------------------------

--
-- Struktur untuk view `view_surat_keluar`
--
DROP TABLE IF EXISTS `view_surat_keluar`;

CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `view_surat_keluar`  AS SELECT `s`.`id` AS `id`, `s`.`nomor_surat` AS `nomor_surat`, `s`.`tanggal` AS `tanggal`, `s`.`perihal` AS `perihal`, `s`.`keterangan` AS `tujuan`, `s`.`status` AS `status`, `s`.`prioritas` AS `prioritas`, `s`.`lampiran` AS `lampiran`, `s`.`created_at` AS `created_at`, `u`.`nama` AS `input_by` FROM (`surat` `s` left join `users` `u` on(`s`.`created_by` = `u`.`id`)) WHERE `s`.`jenis` = 'Keluar' ORDER BY `s`.`tanggal` DESC, `s`.`created_at` DESC ;

-- --------------------------------------------------------

--
-- Struktur untuk view `view_surat_masuk`
--
DROP TABLE IF EXISTS `view_surat_masuk`;

CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `view_surat_masuk`  AS SELECT `s`.`id` AS `id`, `s`.`nomor_surat` AS `nomor_surat`, `s`.`tanggal` AS `tanggal`, `s`.`perihal` AS `perihal`, `s`.`keterangan` AS `pengirim`, `s`.`status` AS `status`, `s`.`prioritas` AS `prioritas`, `s`.`disposisi_kepada` AS `disposisi_kepada`, `s`.`catatan_disposisi` AS `catatan_disposisi`, `s`.`lampiran` AS `lampiran`, `s`.`created_at` AS `created_at`, `u`.`nama` AS `input_by` FROM (`surat` `s` left join `users` `u` on(`s`.`created_by` = `u`.`id`)) WHERE `s`.`jenis` = 'Masuk' ORDER BY `s`.`tanggal` DESC, `s`.`created_at` DESC ;

--
-- Indexes for dumped tables
--

--
-- Indeks untuk tabel `absensi`
--
ALTER TABLE `absensi`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_siswa_tanggal` (`siswa_id`,`tanggal`),
  ADD KEY `idx_tanggal` (`tanggal`);

--
-- Indeks untuk tabel `kelas`
--
ALTER TABLE `kelas`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `nama_kelas` (`nama_kelas`),
  ADD KEY `idx_tingkat` (`tingkat`),
  ADD KEY `idx_jurusan` (`jurusan`);

--
-- Indeks untuk tabel `mata_pelajaran`
--
ALTER TABLE `mata_pelajaran`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `kode_mapel` (`kode_mapel`);

--
-- Indeks untuk tabel `nilai`
--
ALTER TABLE `nilai`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `unique_nilai` (`siswa_id`,`mapel_id`,`semester`,`tahun_ajaran`),
  ADD KEY `mapel_id` (`mapel_id`),
  ADD KEY `idx_siswa_semester` (`siswa_id`,`semester`);

--
-- Indeks untuk tabel `siswa`
--
ALTER TABLE `siswa`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `nis` (`nis`),
  ADD UNIQUE KEY `nisn` (`nisn`),
  ADD KEY `idx_nis` (`nis`),
  ADD KEY `idx_nisn` (`nisn`),
  ADD KEY `idx_nama` (`nama`),
  ADD KEY `idx_kelas` (`kelas`),
  ADD KEY `idx_status` (`status_siswa`);

--
-- Indeks untuk tabel `spp`
--
ALTER TABLE `spp`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_siswa` (`siswa_id`),
  ADD KEY `idx_bulan` (`bulan`),
  ADD KEY `idx_tahun` (`tahun`),
  ADD KEY `idx_status` (`status`);

--
-- Indeks untuk tabel `surat`
--
ALTER TABLE `surat`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_jenis` (`jenis`),
  ADD KEY `idx_tanggal` (`tanggal`),
  ADD KEY `idx_nomor` (`nomor_surat`),
  ADD KEY `idx_status` (`status`),
  ADD KEY `idx_prioritas` (`prioritas`),
  ADD KEY `created_by` (`created_by`),
  ADD KEY `updated_by` (`updated_by`);

--
-- Indeks untuk tabel `users`
--
ALTER TABLE `users`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `username` (`username`),
  ADD KEY `idx_username` (`username`),
  ADD KEY `idx_role` (`role`),
  ADD KEY `idx_status` (`status`);

--
-- AUTO_INCREMENT untuk tabel yang dibuang
--

--
-- AUTO_INCREMENT untuk tabel `absensi`
--
ALTER TABLE `absensi`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=9;

--
-- AUTO_INCREMENT untuk tabel `kelas`
--
ALTER TABLE `kelas`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=40;

--
-- AUTO_INCREMENT untuk tabel `mata_pelajaran`
--
ALTER TABLE `mata_pelajaran`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=10;

--
-- AUTO_INCREMENT untuk tabel `nilai`
--
ALTER TABLE `nilai`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=33;

--
-- AUTO_INCREMENT untuk tabel `siswa`
--
ALTER TABLE `siswa`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=13;

--
-- AUTO_INCREMENT untuk tabel `spp`
--
ALTER TABLE `spp`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=18;

--
-- AUTO_INCREMENT untuk tabel `surat`
--
ALTER TABLE `surat`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=25;

--
-- AUTO_INCREMENT untuk tabel `users`
--
ALTER TABLE `users`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;

--
-- Ketidakleluasaan untuk tabel pelimpahan (Dumped Tables)
--

--
-- Ketidakleluasaan untuk tabel `absensi`
--
ALTER TABLE `absensi`
  ADD CONSTRAINT `absensi_ibfk_1` FOREIGN KEY (`siswa_id`) REFERENCES `siswa` (`id`) ON DELETE CASCADE;

--
-- Ketidakleluasaan untuk tabel `nilai`
--
ALTER TABLE `nilai`
  ADD CONSTRAINT `nilai_ibfk_1` FOREIGN KEY (`siswa_id`) REFERENCES `siswa` (`id`) ON DELETE CASCADE,
  ADD CONSTRAINT `nilai_ibfk_2` FOREIGN KEY (`mapel_id`) REFERENCES `mata_pelajaran` (`id`) ON DELETE CASCADE;

--
-- Ketidakleluasaan untuk tabel `spp`
--
ALTER TABLE `spp`
  ADD CONSTRAINT `spp_ibfk_1` FOREIGN KEY (`siswa_id`) REFERENCES `siswa` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;

--
-- Ketidakleluasaan untuk tabel `surat`
--
ALTER TABLE `surat`
  ADD CONSTRAINT `surat_ibfk_1` FOREIGN KEY (`created_by`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
  ADD CONSTRAINT `surat_ibfk_2` FOREIGN KEY (`updated_by`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE;
COMMIT;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
