{% extends "base.html" %} {% block isi %}
{{ daftar|length }} mata kuliah
{{ n_selesai }} RPS selesai
{{ n_draft }} RPS draft
{{ st_nilai|length }} MK setor nilai
{{ st_porto.values()|selectattr('status', 'equalto', 'selesai')|list|length }} portofolio selesai
{% if user.role == 'dosen' %} {% if hanya_saya %}
Menampilkan {{ daftar|length }} MK yang Anda ampu. RPS mata kuliah lain tetap terbuka baca — tampilkan seluruh {{ n_total }} MK.
{% elif mk_saya %}
Menampilkan seluruh {{ n_total }} MK — kembali ke MK yang Anda ampu saja.
{% else %}
Belum ada MK yang ditugaskan kepada Anda — hubungi kaprodi agar menetapkan penugasan di halaman Kelola Akun. Sementara itu seluruh MK ditampilkan (hanya-baca).
{% endif %} {% endif %}
{% macro stempel(st) -%} {% if st and st.status == 'selesai' %}SELESAI {% elif st %}DRAFT {% else %}BELUM{% endif %} {%- endmacro %}
{% for mk in daftar %} {% set st = status.get(mk.kode) %} {% set sn = st_nilai.get(mk.kode) %} {% set sp = st_porto.get(mk.kode) %} {% endfor %}
No. Kode Smt Mata Kuliah Pengampu CPL Dipikul RPS Nilai Portofolio Pemutakhiran Terakhir
{{ mk.no }} {{ mk.kode }} {{ smt.get(mk.kode) or '—' }} {{ mk.nama }}
{{ mk.n_cpmk }} CPMK · {{ mk.n_sub }} Sub-CPMK
{{ pengampu.get(mk.kode, [])|join(', ') or '—' }} {{ mk.cpls|map('replace','CPL-','')|join(', ') }} {{ stempel(st) }} {{ stempel(sn) }} {{ stempel(sp) }} {% set terakhir = [st, sn, sp]|select|sort(attribute='updated_at')|last %} {% if terakhir %}{{ terakhir.updated_at }}{% if terakhir.updated_by %} — {{ terakhir.updated_by }}{% endif %}{% else %}—{% endif %}

Klik stempel untuk membuka form terkait. Alur per MK: RPS (rencana & bobot) → Nilai (unggah Excel / rata-rata) → Portofolio (refleksi & dokumen akhir). Rekap prodi menggulung otomatis dari nilai yang masuk.

{% endblock %}