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

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

Apa pun cara inputnya, pengukuran memakai satu metodologi yang sama: skor per Sub-CPMK digulung ke CPMK lalu CPL (rincian di halaman Metodologi). Pilih satu cara di bawah — menyimpan lewat cara mana pun menggantikan data nilai MK ini.

{% if pesan %}
{{ pesan }}
{% endif %} {% for w in peringatan %}
{{ w }}
{% endfor %} {% 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 unggahan: {{ tersimpan.data.sumber if tersimpan.data.sumber is string else tersimpan.data.sumber|join(' · ') }}.{% endif %}
{% endif %} {% if grid %} {% set per_mhs = tersimpan and tersimpan.data.mode == 'per_mahasiswa' %}

NILAI PER MAHASISWA (ketik langsung di sel, 0–100; kolom Nilai Akhir & baris rata-rata dihitung dari data tersimpan)

Daftar mahasiswa dari impor kaprodi. Kosongkan sel yang belum dinilai; Simpan Nilai menyimpan persis isi tabel. Nilai Akhir = tertimbang bobot komponen RPS; angkanya diperbarui setelah disimpan.

{% 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. NPM NamaKelas{{ s.kode }}Nilai Akhir
{{ loop.index }} {{ m.npm }} {{ m.nama }}{{ m.kelas or '—' }}{{ '%.1f'|format(akhir.get(m.npm)) if akhir.get(m.npm) 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 %}
{{ 'ALTERNATIF — ' if grid }}UNGGAH EXCEL PER MAHASISWA (cocok bila nilai sudah direkap di Excel, atau team teaching mengisi terpisah)

Unduh template berkolom Sub-CPMK MK ini, isi nilai 0–100 per mahasiswa, lalu unggah kembali. {% if terdaftar %}Template sudah berisi {{ terdaftar|length }} mahasiswa yang mengontrak MK ini (dari daftar impor kaprodi). {% else %}Daftar mahasiswa MK ini belum diimpor kaprodi — template kosong, isi NPM & nama secara manual.{% endif %}
Team teaching: tiap dosen cukup mengunggah bagiannya sendiri — kolom Sub-CPMK yang diampunya (mis. sebelum/sesudah UTS) atau baris mahasiswa kelasnya. Unggahan digabung: sel terisi memperbarui nilai, sel kosong tidak menghapus nilai yang sudah diunggah dosen lain.

Unduh Template Excel
ALTERNATIF — KETIK RATA-RATA KELAS PER SUB-CPMK (hanya bila nilai per mahasiswa tidak tersedia; ditandai "bukti agregat" pada rekap)
{% for s in peta.subs %} {% endfor %}
Sub-CPMKUraianRata-rata (0–100)
{{ s.kode }} {{ s.uraian[:110] }}{% if s.uraian|length > 110 %}…{% endif %}
Disimpan atas nama {{ user.nama }}
{% if hasil %}

HASIL KETERCAPAIAN MK INI (ambang {{ ambang|round(0)|int }}; roll-up bagi rata)

{% for kode_c, v in hasil.cpmk.items() %} {% endfor %}
CPMKSkorSub TernilaiCPL Didukung
{{ kode_c }} {% if v.skor is not none %}{{ '%.2f'|format(v.skor) }}{% else %}—{% endif %} {{ v.n_ternilai }}/{{ v.n_sub }} {{ v.cpl|join(', ') }}
{% for kode_c, v in hasil.cpl.items() %} {% endfor %}
CPL (dalam MK ini)SkorStatus
{{ kode_c }} {% if v.skor is not none %}{{ '%.2f'|format(v.skor) }}{% else %}—{% endif %} {% if v.skor is none %}BELUM TERUKUR {% elif v.skor >= ambang %}TERCAPAI {% else %}DI BAWAH AMBANG{% endif %}
{% endif %} {% endblock %}