Tambah peran Dosen MK/RPS+MK, komponen penilaian baku, dan bantu isi RPS

- Peran dosen dipecah jadi dosen_mk (nilai & portofolio saja, RPS baca-only)
  dan dosen_rps_mk (bisa edit RPS juga); migrasi otomatis dari skema lama.
- Rekap Bobot Penilaian RPS pakai 6 komponen teknik asesmen baku prodi;
  total wajib tepat 100%, komponen individual boleh dikosongkan.
- Dropdown & daftar Sub-CPMK tak lagi terpotong teksnya.
- Bagian F (Rencana Mingguan): tombol "Isi Otomatis" per baris (termasuk
  usulan Bobot) yang muncul setelah Sub-CPMK dipilih, plus panel contoh
  teks bantu per kolom.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Power BI Dev
2026-07-21 08:45:56 +07:00
parent 9be6bd03e3
commit a45b08b00e
7 changed files with 175 additions and 45 deletions
+36 -1
View File
@@ -105,6 +105,39 @@ def get_conn() -> sqlite3.Connection:
return conn
def _migrasi_role_pengguna(conn: sqlite3.Connection) -> None:
"""Skema lama hanya kenal role 'dosen'; pecah jadi dosen_mk/dosen_rps_mk.
Akun 'dosen' lama dipetakan ke 'dosen_rps_mk' agar hak akses (termasuk
edit RPS) yang sudah mereka miliki tidak berkurang oleh migrasi ini.
"""
row = conn.execute(
"SELECT sql FROM sqlite_master WHERE type='table' AND name='pengguna'"
).fetchone()
if not row or "dosen_rps_mk" in row["sql"]:
return
conn.execute("ALTER TABLE pengguna RENAME TO pengguna_lama")
conn.execute(
"""CREATE TABLE pengguna (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT NOT NULL UNIQUE,
nama TEXT NOT NULL,
role TEXT NOT NULL
CHECK (role IN ('kaprodi','dosen_mk','dosen_rps_mk')),
pw_hash TEXT NOT NULL,
dibuat TEXT NOT NULL
)"""
)
conn.execute(
"""INSERT INTO pengguna (id, username, nama, role, pw_hash, dibuat)
SELECT id, username, nama,
CASE WHEN role='dosen' THEN 'dosen_rps_mk' ELSE role END,
pw_hash, dibuat
FROM pengguna_lama"""
)
conn.execute("DROP TABLE pengguna_lama")
def init_db() -> None:
with get_conn() as conn:
for tabel in ("rps", "portofolio", "nilai"):
@@ -141,11 +174,13 @@ def init_db() -> None:
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT NOT NULL UNIQUE,
nama TEXT NOT NULL,
role TEXT NOT NULL CHECK (role IN ('kaprodi','dosen')),
role TEXT NOT NULL
CHECK (role IN ('kaprodi','dosen_mk','dosen_rps_mk')),
pw_hash TEXT NOT NULL,
dibuat TEXT NOT NULL
)"""
)
_migrasi_role_pengguna(conn)
conn.execute(
"""CREATE TABLE IF NOT EXISTS sesi (
token TEXT PRIMARY KEY,