From 374bdb5565ae3b26d51386cb31325d1c237c7114 Mon Sep 17 00:00:00 2001 From: Power BI Dev Date: Sun, 9 Aug 2026 21:42:01 +0700 Subject: [PATCH] Perbaiki isi RPS unduhan yang nyasar ke baris salah (Peta CPL, Deskripsi, dst) build_rps() mengisi blok naratif (Peta CPL-CPMK, Deskripsi Singkat MK, Bahan Kajian, Pustaka, Media, Dosen Pengampu, MK Prasyarat) lewat t.cell(18, 2) dst -- indeks baris tetap sesuai template asli (39 baris). Tapi baris-baris itu dieksekusi SETELAH daftar CPL/CPMK/Sub-CPMK digandakan & baris contohnya dibuang -- jumlah baris yang disisipkan beda-beda tiap MK (tergantung berapa CPL/CPMK/Sub-CPMK-nya), jadi t.cell(18, 2) di tabel yang sudah berubah itu tidak lagi menunjuk baris "Peta CPL-CPMK" yang dimaksud. Teks jadi nyasar ke sel/baris lain, termasuk kolom sempit -- terlihat sebagai puluhan halaman teks terpotong huruf demi huruf. Pola yang benar sudah dipakai untuk tabel mingguan (trs[31], trs[33], dst -- referensi elemen XML baris asli yang dibekukan di awal, tak ikut bergeser). Terapkan pola sama (helper cell()) untuk blok naratif yang kelewat. Diverifikasi: label & isi sekarang sejajar benar (baris "Peta CPL - CP MK" berisi peta CPMK->CPL, bukan lagi nama dosen pengampu), dokumen turun dari puluhan halaman rusak jadi 2 halaman rapi untuk bagian ini. Co-Authored-By: Claude Sonnet 5 --- app/generator/rps_untan.py | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/app/generator/rps_untan.py b/app/generator/rps_untan.py index 1ec51fa..0c5155a 100644 --- a/app/generator/rps_untan.py +++ b/app/generator/rps_untan.py @@ -130,6 +130,13 @@ def build_rps(d: dict) -> bytes: trs = [r._tr for r in t.rows] # indeks baris template asli + def cell(idx, col): + """Ambil sel dari baris ASLI template lewat trs[idx] (referensi XML + beku), bukan t.cell(idx, col) yang ikut bergeser tiap kali baris + CPL/CPMK/Sub-CPMK digandakan/dibuang di atasnya — pakai t.cell() + langsung untuk baris di bawah blok itu akan salah sasaran.""" + return _Row(trs[idx], t).cells[col] + def isi_daftar(proto_idx, hapus_idx, items, kolom_kode=2, kolom_isi=5): """Isi blok daftar (CPL/CPMK/Sub-CPMK): prototipe digandakan per item.""" proto = trs[proto_idx] @@ -153,17 +160,17 @@ def build_rps(d: dict) -> bytes: f"{c['kode']} → {', '.join(c.get('cpl', [])) or '-'}" for c in d.get("cpmk", []) ) - _set_text(t.cell(18, 2), peta_txt) - _set_text(t.cell(19, 2), d.get("deskripsi", "")) - _set_text(t.cell(20, 2), d.get("bahan_kajian", "")) + _set_text(cell(18, 2), peta_txt) + _set_text(cell(19, 2), d.get("deskripsi", "")) + _set_text(cell(20, 2), d.get("bahan_kajian", "")) utama = d.get("referensi", []) pendukung = d.get("referensi_pendukung", []) - _set_text(t.cell(22, 2), "\n".join(f"{i}. {r}" for i, r in enumerate(utama, 1))) - _set_text(t.cell(24, 2), "\n".join(f"{i}. {r}" for i, r in enumerate(pendukung, 1))) - _set_text(t.cell(25, 2), d.get("media", "")) - _set_text(t.cell(26, 2), ident.get("pengampu", "")) - _set_text(t.cell(27, 2), ident.get("prasyarat") or "—") + _set_text(cell(22, 2), "\n".join(f"{i}. {r}" for i, r in enumerate(utama, 1))) + _set_text(cell(24, 2), "\n".join(f"{i}. {r}" for i, r in enumerate(pendukung, 1))) + _set_text(cell(25, 2), d.get("media", "")) + _set_text(cell(26, 2), ident.get("pengampu", "")) + _set_text(cell(27, 2), ident.get("prasyarat") or "—") # ── tabel mingguan ── proto_norm, proto_uts, proto_uas = trs[31], trs[33], trs[37]