3 Commits

Author SHA1 Message Date
Power BI Dev e31f8e57dd Merge branch 'fix/rps-docx-baris-salah-sasaran' into main 2026-08-09 21:56:12 +07:00
Power BI Dev 374bdb5565 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 <noreply@anthropic.com>
2026-08-09 21:42:01 +07:00
Power BI Dev de65ca99e6 Merge branch 'ubah/teks-peringatan-subcpmk-komponen' into main 2026-08-09 20:58:45 +07:00
+15 -8
View File
@@ -130,6 +130,13 @@ def build_rps(d: dict) -> bytes:
trs = [r._tr for r in t.rows] # indeks baris template asli 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): 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.""" """Isi blok daftar (CPL/CPMK/Sub-CPMK): prototipe digandakan per item."""
proto = trs[proto_idx] proto = trs[proto_idx]
@@ -153,17 +160,17 @@ def build_rps(d: dict) -> bytes:
f"{c['kode']}{', '.join(c.get('cpl', [])) or '-'}" f"{c['kode']}{', '.join(c.get('cpl', [])) or '-'}"
for c in d.get("cpmk", []) for c in d.get("cpmk", [])
) )
_set_text(t.cell(18, 2), peta_txt) _set_text(cell(18, 2), peta_txt)
_set_text(t.cell(19, 2), d.get("deskripsi", "")) _set_text(cell(19, 2), d.get("deskripsi", ""))
_set_text(t.cell(20, 2), d.get("bahan_kajian", "")) _set_text(cell(20, 2), d.get("bahan_kajian", ""))
utama = d.get("referensi", []) utama = d.get("referensi", [])
pendukung = d.get("referensi_pendukung", []) 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(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(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(cell(25, 2), d.get("media", ""))
_set_text(t.cell(26, 2), ident.get("pengampu", "")) _set_text(cell(26, 2), ident.get("pengampu", ""))
_set_text(t.cell(27, 2), ident.get("prasyarat") or "") _set_text(cell(27, 2), ident.get("prasyarat") or "")
# ── tabel mingguan ── # ── tabel mingguan ──
proto_norm, proto_uts, proto_uas = trs[31], trs[33], trs[37] proto_norm, proto_uts, proto_uas = trs[31], trs[33], trs[37]