-- =====================================================================
-- SIMAP — Pendaftaran kartu langsung dari mesin
--
--   mysql -u root -p simap_db < database/16_pendaftaran_kartu.sql
--
-- Sebelumnya mendaftarkan kartu berarti membaca nomor di Serial Monitor,
-- menyalinnya, lalu mengetiknya di halaman web. Untuk tiga ratus kartu itu
-- tiga ratus kali salin-tempel, dan satu angka keliru berarti kartu
-- terpasang ke siswa yang salah.
--
-- Dengan tabel ini, operator memilih siswa di layar lalu menempelkan
-- kartunya di mesin. Tap berikutnya pada mesin itu tidak dihitung sebagai
-- kehadiran, melainkan langsung dipasang ke siswa yang sedang ditunggu.
-- =====================================================================

SET NAMES utf8mb4;

CREATE TABLE IF NOT EXISTS rfid_pendaftaran (
  id          INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  device_id   SMALLINT UNSIGNED NOT NULL,
  pemilik_tipe ENUM('SISWA','GURU') NOT NULL DEFAULT 'SISWA',
  pemilik_id  INT UNSIGNED NOT NULL,
  dibuka_oleh INT UNSIGNED NULL,
  dibuka_at   DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  -- Sesi berumur pendek. Tanpa batas waktu, sesi yang lupa ditutup akan
  -- menelan tap siswa pertama yang lewat esok paginya sebagai pendaftaran.
  kadaluarsa  DATETIME NOT NULL,
  uid_hasil   VARCHAR(40) NULL,
  status      ENUM('MENUNGGU','SELESAI','BATAL','KADALUARSA')
              NOT NULL DEFAULT 'MENUNGGU',
  pesan       VARCHAR(255) NULL,
  KEY idx_aktif (device_id, status, kadaluarsa),
  CONSTRAINT fk_rp_device FOREIGN KEY (device_id) REFERENCES rfid_device(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT IGNORE INTO setting (skey, svalue, tipe, grup, label) VALUES
 ('rfid_daftar_detik', '60', 'number', 'absensi',
  'Lama mesin menunggu tap saat mendaftarkan kartu (detik)');

SELECT 'pendaftaran kartu lewat mesin siap' AS info;

-- Hasil tap saat mesin dipakai mendaftarkan kartu
ALTER TABLE rfid_log
  MODIFY hasil ENUM('OK','UID_TIDAK_DIKENAL','DUPLIKAT','DILUAR_JAM','KARTU_BLOKIR',
                    'DAFTAR_OK','DAFTAR_BENTROK') DEFAULT 'OK';
