-- =====================================================================
-- SIMAP — Pembayaran daring dan peran Yayasan
--
--   mysql -u root -p simap_db < database/05_pembayaran_yayasan.sql
--
-- Aman dijalankan berulang.
-- =====================================================================


-- ------------------------------------------------------- PEMBAYARAN DARING
-- Satu baris per upaya pembayaran dari aplikasi wali murid. Dipisahkan dari
-- tabel `pembayaran` karena statusnya berjalan: dibuat, menunggu, lalu
-- dikonfirmasi atau kedaluwarsa. Baris di `pembayaran` hanya dibuat setelah
-- pembayaran benar-benar sah, agar rekap keuangan tidak tercemar transaksi
-- yang belum tentu jadi.
CREATE TABLE IF NOT EXISTS pembayaran_online (
  id            BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  kode_bayar    VARCHAR(30) NOT NULL UNIQUE COMMENT 'Kode unik yang dilihat orang tua',
  siswa_id      INT UNSIGNED NOT NULL,
  diajukan_oleh INT UNSIGNED NULL COMMENT 'user ortu',
  total         DECIMAL(12,2) NOT NULL,
  metode        ENUM('TRANSFER','QRIS','VA','TUNAI') NOT NULL DEFAULT 'TRANSFER',
  bank          VARCHAR(40) NULL,
  no_va         VARCHAR(40) NULL COMMENT 'Nomor virtual account bila dipakai',
  status        ENUM('MENUNGGU','DIBAYAR','DIKONFIRMASI','DITOLAK','KEDALUWARSA')
                NOT NULL DEFAULT 'MENUNGGU',
  bukti         VARCHAR(255) NULL COMMENT 'Foto bukti transfer dari orang tua',
  catatan_ortu  VARCHAR(255) NULL,
  catatan_admin VARCHAR(255) NULL,
  gateway       VARCHAR(30) NULL COMMENT 'Nama penyedia bila memakai payment gateway',
  gateway_ref   VARCHAR(100) NULL COMMENT 'Nomor rujukan dari penyedia',
  kedaluwarsa_at DATETIME NULL,
  dibayar_at    DATETIME NULL,
  dikonfirmasi_oleh INT UNSIGNED NULL,
  dikonfirmasi_at DATETIME NULL,
  created_at    DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  KEY idx_siswa (siswa_id, status),
  KEY idx_status (status, created_at),
  CONSTRAINT fk_po_siswa FOREIGN KEY (siswa_id) REFERENCES siswa(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Tagihan mana saja yang dibayar dalam satu transaksi
CREATE TABLE IF NOT EXISTS pembayaran_online_item (
  id          BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  bayar_id    BIGINT UNSIGNED NOT NULL,
  tagihan_id  INT UNSIGNED NOT NULL,
  nominal     DECIMAL(12,2) NOT NULL,
  UNIQUE KEY uq_item (bayar_id, tagihan_id),
  CONSTRAINT fk_poi_bayar FOREIGN KEY (bayar_id) REFERENCES pembayaran_online(id) ON DELETE CASCADE,
  CONSTRAINT fk_poi_tagihan FOREIGN KEY (tagihan_id) REFERENCES tagihan(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Rekening sekolah yang ditampilkan di aplikasi
CREATE TABLE IF NOT EXISTS rekening_sekolah (
  id         INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  bank       VARCHAR(40) NOT NULL,
  no_rekening VARCHAR(40) NOT NULL,
  atas_nama  VARCHAR(120) NOT NULL,
  jenis      ENUM('TRANSFER','QRIS','VA') NOT NULL DEFAULT 'TRANSFER',
  gambar_qris VARCHAR(255) NULL,
  urutan     TINYINT NOT NULL DEFAULT 1,
  is_aktif   TINYINT(1) NOT NULL DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ------------------------------------------------------------- YAYASAN
-- Yayasan dapat menaungi lebih dari satu sekolah
CREATE TABLE IF NOT EXISTS yayasan (
  id        INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  nama      VARCHAR(150) NOT NULL,
  akta      VARCHAR(80) NULL,
  alamat    VARCHAR(255) NULL,
  telepon   VARCHAR(30) NULL,
  email     VARCHAR(100) NULL,
  ketua     VARCHAR(120) NULL,
  logo      VARCHAR(255) NULL,
  is_aktif  TINYINT(1) NOT NULL DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Catatan pemantauan dan tindak lanjut dari yayasan ke sekolah
CREATE TABLE IF NOT EXISTS yayasan_catatan (
  id          BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  yayasan_id  INT UNSIGNED NOT NULL,
  periode     VARCHAR(20) NOT NULL COMMENT 'mis. 2026-08 atau 2026/2027-1',
  bidang      ENUM('AKADEMIK','KEUANGAN','KEPEGAWAIAN','SARANA','KESISWAAN','UMUM')
              NOT NULL DEFAULT 'UMUM',
  temuan      TEXT NULL,
  rekomendasi TEXT NULL,
  tindak_lanjut TEXT NULL,
  status      ENUM('BARU','DIPROSES','SELESAI') NOT NULL DEFAULT 'BARU',
  dibuat_oleh INT UNSIGNED NULL,
  created_at  DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  KEY idx_periode (yayasan_id, periode),
  CONSTRAINT fk_yc_yayasan FOREIGN KEY (yayasan_id) REFERENCES yayasan(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- --------------------------------------------------------- PERAN & IZIN
INSERT IGNORE INTO roles (id, kode, nama, level, keterangan) VALUES
 (10, 'YAYASAN', 'Pengurus Yayasan', 2, 'Pemantauan kinerja sekolah, tanpa akses operasional harian');

INSERT IGNORE INTO permissions (kode, nama, modul) VALUES
 ('yayasan.monitor', 'Memantau kinerja sekolah', 'yayasan'),
 ('yayasan.catatan', 'Membuat catatan pemantauan', 'yayasan'),
 ('keuangan.verifikasi', 'Memverifikasi pembayaran daring', 'keuangan');

-- Yayasan hanya membaca; tidak diberi izin mengubah data operasional
INSERT IGNORE INTO role_permission (role_id, permission_id)
SELECT 10, id FROM permissions
 WHERE kode IN ('yayasan.monitor','yayasan.catatan','laporan.sekolah',
                'master.siswa.view','absensi.view','absensi.rekap','rapor.cetak');

-- Tata usaha dan kepala sekolah dapat memverifikasi pembayaran
INSERT IGNORE INTO role_permission (role_id, permission_id)
SELECT r.id, p.id FROM roles r JOIN permissions p ON p.kode = 'keuangan.verifikasi'
 WHERE r.kode IN ('SUPERADMIN','KEPALA_SEKOLAH','TU');

-- ------------------------------------------------------------- SETTING
INSERT IGNORE INTO setting (skey, svalue, tipe, grup, label) VALUES
 ('bayar_online_aktif', '1', 'bool', 'keuangan', 'Aktifkan pembayaran lewat aplikasi'),
 ('bayar_batas_jam', '24', 'number', 'keuangan', 'Batas waktu pembayaran (jam)'),
 ('bayar_instruksi', 'Transfer sesuai nominal, lalu unggah bukti pembayaran pada aplikasi. Konfirmasi diproses maksimal 1 hari kerja.', 'textarea', 'keuangan', 'Instruksi pembayaran'),
 ('gateway_aktif', '0', 'bool', 'keuangan', 'Gunakan payment gateway'),
 ('gateway_nama', '', 'text', 'keuangan', 'Nama payment gateway'),
 ('gateway_key', '', 'text', 'keuangan', 'Kunci server payment gateway');

-- ------------------------------------------------------- DATA CONTOH
INSERT IGNORE INTO rekening_sekolah (id, bank, no_rekening, atas_nama, jenis, urutan) VALUES
 (1, 'Bank Syariah Indonesia', '7123456789', 'Yayasan Al Barokah', 'TRANSFER', 1),
 (2, 'Bank Jabar Banten', '0012345678', 'SD Islam Al Barokah', 'TRANSFER', 2),
 (3, 'QRIS', '-', 'SD Islam Al Barokah', 'QRIS', 3);

INSERT IGNORE INTO yayasan (id, nama, akta, alamat, telepon, email, ketua) VALUES
 (1, 'Yayasan Pendidikan Al Barokah', 'AHU-0012345.AH.01.04', 'Jl. Raya Cileungsi No. 1, Bogor',
  '021-8230000', 'sekretariat@albarokah.sch.id', 'H. Abdul Rahman, S.E.');

SELECT 'pembayaran daring dan yayasan siap' AS info;
