-- SPJ Komite MySQL Database Schema
-- Database: db_spjkomite

-- Tabel untuk kode kegiatan
CREATE TABLE IF NOT EXISTS kode_kegiatan (
    id INT AUTO_INCREMENT PRIMARY KEY,
    kode VARCHAR(100) NOT NULL UNIQUE,
    uraian TEXT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Tabel untuk pengaturan/manajemen
CREATE TABLE IF NOT EXISTS pengaturan (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nama_ketua_komite VARCHAR(255),
    bendahara VARCHAR(255),
    nama_tim_teknis_a VARCHAR(255),
    jabatan_tim_teknis_a VARCHAR(255),
    nama_tim_teknis_b VARCHAR(255),
    jabatan_tim_teknis_b VARCHAR(255),
    nama_tim_teknis_c VARCHAR(255),
    jabatan_tim_teknis_c VARCHAR(255),
    tahun_anggaran VARCHAR(10),
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

-- Tabel untuk RKS (Rencana Kerja dan Syarat)
CREATE TABLE IF NOT EXISTS rks (
    id INT AUTO_INCREMENT PRIMARY KEY,
    pekerjaan TEXT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Counter untuk nomor dokumen
CREATE TABLE IF NOT EXISTS nomor_counter (
    id INT AUTO_INCREMENT PRIMARY KEY,
    tahun_anggaran VARCHAR(10) NOT NULL,
    counter INT DEFAULT 0,
    UNIQUE KEY unique_year (tahun_anggaran)
);

-- Tabel untuk pesanan (surat pesanan)
CREATE TABLE IF NOT EXISTS pesanan (
    id INT AUTO_INCREMENT PRIMARY KEY,
    tanggal_pesanan DATE NOT NULL,
    nomor_pesanan VARCHAR(255) NOT NULL,
    penyedia VARCHAR(255) NOT NULL,
    nama_jenis_barang VARCHAR(255) NOT NULL,
    spesifikasi_teknis VARCHAR(500),
    volume DECIMAL(10,2) NOT NULL,
    satuan VARCHAR(50) NOT NULL,
    keterangan TEXT,
    waktu_pengerjaan INT NOT NULL,
    batas_tanggal_pengerjaan DATE NOT NULL,
    penerima_pesanan VARCHAR(255),
    yang_memesan VARCHAR(255),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    INDEX idx_nomor_pesanan (nomor_pesanan)
);

-- Tabel untuk BAP (Berita Acara Pemeriksaan)
CREATE TABLE IF NOT EXISTS bap (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nomor_bap VARCHAR(255) NOT NULL UNIQUE,
    pekerjaan TEXT NOT NULL,
    tanggal_pemeriksaan DATE NOT NULL,
    nama_tim_teknis_a VARCHAR(255),
    nama_tim_teknis_b VARCHAR(255),
    nama_tim_teknis_c VARCHAR(255),
    jabatan_tim_teknis_a VARCHAR(255),
    jabatan_tim_teknis_b VARCHAR(255),
    jabatan_tim_teknis_c VARCHAR(255),
    tujuan TEXT,
    alamat_penyedia TEXT,
    ketua_komite VARCHAR(255),
    nomor_pesanan VARCHAR(255),
    kode_kegiatan VARCHAR(100),
    kode_sub_kegiatan VARCHAR(100),
    kode_rekening VARCHAR(100),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    INDEX idx_nomor_bap (nomor_bap),
    INDEX idx_nomor_pesanan (nomor_pesanan)
);

-- Tabel untuk BAST (Berita Acara Serah Terima)
CREATE TABLE IF NOT EXISTS bast (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nomor_bast VARCHAR(255) NOT NULL UNIQUE,
    tanggal_bast DATE NOT NULL,
    nomor_bap VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    INDEX idx_nomor_bast (nomor_bast),
    INDEX idx_nomor_bap (nomor_bap)
);

-- Tabel untuk Nota
CREATE TABLE IF NOT EXISTS nota (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nomor INT NOT NULL,
    volume DECIMAL(10,2) NOT NULL,
    satuan VARCHAR(50) NOT NULL,
    nama_barang VARCHAR(255) NOT NULL,
    harga_satuan DECIMAL(15,2) NOT NULL,
    jumlah DECIMAL(15,2) NOT NULL,
    nomor_bap VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    INDEX idx_nomor_bap (nomor_bap)
);

-- Tabel untuk Foto Dokumentasi
CREATE TABLE IF NOT EXISTS foto (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nomor_bap VARCHAR(255) NOT NULL,
    related_id VARCHAR(255),
    filename VARCHAR(255),
    url LONGTEXT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    INDEX idx_nomor_bap (nomor_bap)
);

-- Tabel untuk Aset Aplikasi (Logo dan KOP)
CREATE TABLE IF NOT EXISTS aset_aplikasi (
    id INT AUTO_INCREMENT PRIMARY KEY,
    tipe VARCHAR(50) NOT NULL UNIQUE,
    data_url LONGTEXT,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

-- Insert default aset_aplikasi rows
INSERT INTO aset_aplikasi (tipe, data_url) 
VALUES ('logo', NULL), ('kop', NULL)
ON DUPLICATE KEY UPDATE tipe=tipe;

-- Tabel untuk Penyedia (Supplier) dengan KOP
CREATE TABLE IF NOT EXISTS penyedia (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nama VARCHAR(255) NOT NULL UNIQUE,
    alamat TEXT,
    kop_url LONGTEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

-- Tabel untuk SPJ Lomba (Kegiatan Lomba - Pembayaran Non-Tunai)
CREATE TABLE IF NOT EXISTS spj_lomba (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nomor_spj VARCHAR(255) NOT NULL UNIQUE,
    tanggal DATE NOT NULL,
    nama_kegiatan VARCHAR(500) NOT NULL,
    jenis_pembayaran VARCHAR(100) NOT NULL,
    penerima VARCHAR(255) NOT NULL,
    nama_bank VARCHAR(100) NOT NULL,
    nomor_rekening VARCHAR(50) NOT NULL,
    atas_nama VARCHAR(255) NOT NULL,
    nominal DECIMAL(15,2) NOT NULL,
    keterangan TEXT,
    bukti_transfer LONGTEXT,
    kode_kegiatan VARCHAR(100),
    kode_sub_kegiatan VARCHAR(100),
    kode_rekening VARCHAR(100),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    INDEX idx_nomor_spj (nomor_spj),
    INDEX idx_tanggal (tanggal)
);

-- Insert default pengaturan row
INSERT INTO pengaturan (id, nama_ketua_komite, bendahara, tahun_anggaran) 
VALUES (1, '', '', '2026')
ON DUPLICATE KEY UPDATE id=id;

-- Insert default counter for current year
INSERT INTO nomor_counter (tahun_anggaran, counter) 
VALUES ('2026', 0)
ON DUPLICATE KEY UPDATE tahun_anggaran=tahun_anggaran;

