{% extends "base.html" %} {% block judul %}Nilai {{ peta.nama }} — Informatika UNTAN{% endblock %} {% block isi %}

Input Nilai — {{ peta.nama }} ({{ peta.kode }})

Skor per Sub-CPMK digulung ke CPMK lalu CPL (rincian di halaman Metodologi).

{% if kelas_dosen is not none %}
Anda hanya mengampu kelas {{ kelas_dosen|join(', ') }} pada MK ini — daftar & tombol di bawah cuma menampilkan mahasiswa kelas tersebut.
{% endif %} {% if pesan %}
{{ pesan }}
{% endif %} {% for w in peringatan %}
{{ w }}
{% endfor %} {% if komponen_daftar %}

ISI PER KOMPONEN

{% for k in komponen_daftar %} {% endfor %}
Komponen Sub-CPMK Bobot Status
{{ k.nama }}
{{ 'boleh diisi berkali-kali' if k.ulang else 'sekali-jalan' }}
{{ k.n_subs }} {% if k.bobot %}{{ k.bobot }}%{% else %}—{% endif %} {% if k.ulang %} {% if k.n_sesi %}{{ k.n_sesi }} SESI{% else %}BELUM ADA SESI{% endif %} {% else %} {% if k.n_sesi %}SUDAH DIISI{% else %}BELUM DIISI{% endif %} {% endif %} {{ 'Sesi Baru' if k.ulang else ('Edit' if k.n_sesi else 'Isi') }}
{% endif %} {% if tersimpan %}
Data tersimpan: mode {% if tersimpan.data.mode == 'per_mahasiswa' %}PER MAHASISWA ({{ tersimpan.data.mahasiswa|length }} mahasiswa){% else %}BUKTI AGREGAT (rata-rata kelas){% endif %} — terakhir disimpan {{ tersimpan.updated_at }}{% if tersimpan.updated_by %} oleh {{ tersimpan.updated_by }}{% endif %}. {% if tersimpan.data.sumber %}
Riwayat perubahan: {{ tersimpan.data.sumber if tersimpan.data.sumber is string else tersimpan.data.sumber|join(' · ') }}.{% endif %}
{% endif %} {% if grid and tabel_komponen and komponen_daftar %}

NILAI PER KOMPONEN — nilai mahasiswa berdasarkan komponen

Angka = rata-rata skor mentah tiap sesi/tugas komponen itu yang diikuti mahasiswa (bukan lewat Sub-CPMK). Ketik untuk menimpa — ditulis rata ke semua Sub-CPMK komponen itu; rincian per Sub-CPMK tetap presisi di grid bawah.

{% for k in komponen_daftar %}{% endfor %} {% for r in tabel_komponen %} {% set ri = loop.index0 %} {% for k in komponen_daftar %} {% endfor %} {% endfor %}
No. NIM Nama{{ k.nama }}Nilai Akhir
{{ loop.index }} {{ r.nim }} {{ r.nama }}{{ '%.1f'|format(akhir.get(r.nim)) if akhir.get(r.nim) is not none else '—' }}
Disimpan atas nama {{ user.nama }}
{% endif %} {% if grid %} {% set per_mhs = tersimpan and tersimpan.data.mode == 'per_mahasiswa' %}

NILAI PER MAHASISWA — nilai mahasiswa berdasarkan Sub-CPMK

{% set ada_kelas = grid|selectattr('kelas')|list|length > 0 %} {% set n_kiri = 4 if ada_kelas else 3 %} {% if ada_kelas %}{% endif %} {% for s in peta.subs %}{% endfor %} {% for m in grid %} {% set i = loop.index0 %} {% if ada_kelas %}{% endif %} {% for s in peta.subs %} {% endfor %} {% endfor %} {% if per_mhs and hasil %} {% for s in peta.subs %} {% set info = hasil.sub.get(s.kode) %} {% endfor %} {% for s in peta.subs %} {% set info = hasil.sub.get(s.kode) %} {% endfor %} {% endif %}
No. NIM NamaKelas{{ s.kode }}Nilai Akhir
{{ loop.index }} {{ m.nim }} {{ m.nama }}{{ m.kelas or '—' }}{{ '%.1f'|format(akhir.get(m.nim)) if akhir.get(m.nim) is not none else '—' }}
Rata-rata kelas (tersimpan){{ '%.1f'|format(info.rata) if info else '—' }}{{ '%.1f'|format(akhir.values()|sum / akhir|length) if akhir else '—' }}
% lulus (≥ {{ ambang|round(0)|int }}){{ '%.0f'|format(info.lulus_pct) ~ '%' if info and info.lulus_pct is not none else '—' }}
Disimpan atas nama {{ user.nama }}
{% endif %} {% if hasil %}

HASIL KETERCAPAIAN MK (ambang {{ ambang|round(0)|int }})

{% for kode_c, v in hasil.cpmk.items() %} {% endfor %}
CPMKSkorSub Ternilai% TernilaiCPL Didukung
{{ kode_c }} {% if v.skor is not none %}{{ '%.2f'|format(v.skor) }}{% else %}—{% endif %} {{ v.n_ternilai }}/{{ v.n_sub }} {{ '%.0f'|format(100 * v.n_ternilai / v.n_sub) ~ '%' if v.n_sub else '—' }} {{ v.cpl|join(', ') }}
{% for kode_c, v in hasil.cpl.items() %} {% endfor %}
CPLSkor% CPMK TernilaiStatus
{{ kode_c }} {% if v.skor is not none %}{{ '%.2f'|format(v.skor) }}{% else %}—{% endif %} {{ '%.0f'|format(100 * v.n_cpmk_ternilai / v.n_cpmk) ~ '%' if v.n_cpmk else '—' }} {% if v.skor is none %}BELUM TERUKUR {% elif v.skor >= ambang %}TERCAPAI {% else %}DI BAWAH AMBANG{% endif %}
{% endif %} {% endblock %}