feat: completar fases 3 y 4 del roadmap mvp (gradebook, drag-and-drop, impersonacion) y actualizar README
This commit is contained in:
@@ -0,0 +1,176 @@
|
||||
{% extends 'base.html' %}
|
||||
{% block title %}Mis Calificaciones y Estado Académico — Edu-Space{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="container-fluid py-4">
|
||||
|
||||
<!-- Breadcrumb -->
|
||||
<nav aria-label="breadcrumb" class="mb-3">
|
||||
<ol class="breadcrumb small">
|
||||
<li class="breadcrumb-item"><a href="/dashboard">Inicio</a></li>
|
||||
<li class="breadcrumb-item active">Mis Calificaciones</li>
|
||||
</ol>
|
||||
</nav>
|
||||
|
||||
<!-- Header Banner -->
|
||||
<div class="card border-0 shadow-sm mb-4 bg-body">
|
||||
<div class="card-body p-4">
|
||||
<div class="d-flex flex-wrap justify-content-between align-items-center gap-3">
|
||||
<div>
|
||||
<span class="badge bg-success-subtle text-success border border-success-subtle font-monospace px-2 py-1 mb-2">
|
||||
<i class="bi bi-mortarboard-fill me-1"></i>Portal del Estudiante
|
||||
</span>
|
||||
<h3 class="fw-bold mb-1">Mis Calificaciones y Regularidad</h3>
|
||||
<p class="text-muted small mb-0">
|
||||
Consulta oficial de notas por hito evaluativo, estado de cursada y actas selladas por Bedelía.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<button type="button" class="btn btn-outline-secondary btn-sm" onclick="window.print()">
|
||||
<i class="bi bi-printer me-1"></i>Imprimir Certificado de Cursada
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Subjects Grades Accordion / Cards -->
|
||||
{% if subjects and subjects|length > 0 %}
|
||||
<div class="row g-4">
|
||||
{% for item in subjects %}
|
||||
<div class="col-12">
|
||||
<div class="card border-0 shadow-sm">
|
||||
<div class="card-header bg-body-tertiary border-0 py-3 d-flex justify-content-between align-items-center flex-wrap gap-2">
|
||||
<div>
|
||||
<div class="d-flex align-items-center gap-2 mb-1">
|
||||
<span class="badge bg-primary-subtle text-primary border font-monospace">
|
||||
{{ item.commission.code }}
|
||||
</span>
|
||||
<span class="badge bg-secondary-subtle text-secondary border font-monospace">
|
||||
{{ item.commission.semester }} {{ item.commission.year }}
|
||||
</span>
|
||||
{% if item.acta_number %}
|
||||
<span class="badge bg-danger-subtle text-danger border border-danger-subtle font-monospace">
|
||||
<i class="bi bi-lock-fill me-1"></i>Acta Cerrada: {{ item.acta_number }}
|
||||
</span>
|
||||
{% else %}
|
||||
<span class="badge bg-info-subtle text-info border border-info-subtle">
|
||||
<i class="bi bi-hourglass-split me-1"></i>Cursada en Curso
|
||||
</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
<h5 class="fw-bold mb-0 text-body">{{ item.subject.name }}</h5>
|
||||
<small class="text-muted">{{ item.subject.code }} · Carrera: {{ item.subject.career or 'Tecnicatura / Licenciatura' }}</small>
|
||||
</div>
|
||||
|
||||
<div class="d-flex align-items-center gap-3">
|
||||
<div class="text-end">
|
||||
<span class="small text-muted d-block">Promedio General</span>
|
||||
<span class="fw-bold fs-5 font-monospace text-primary">
|
||||
{{ item.average if item.average is not none else '-' }}
|
||||
</span>
|
||||
</div>
|
||||
<div>
|
||||
{% if item.academic_condition == 'PROMOCIONADO' %}
|
||||
<span class="badge bg-success text-white py-2 px-3 fs-6">
|
||||
<i class="bi bi-award-fill me-1"></i>PROMOCIONADO
|
||||
</span>
|
||||
{% elif item.academic_condition == 'REGULAR' %}
|
||||
<span class="badge bg-primary text-white py-2 px-3 fs-6">
|
||||
<i class="bi bi-check-circle-fill me-1"></i>REGULAR
|
||||
</span>
|
||||
{% elif item.academic_condition == 'LIBRE' %}
|
||||
<span class="badge bg-danger text-white py-2 px-3 fs-6">
|
||||
<i class="bi bi-x-circle-fill me-1"></i>LIBRE
|
||||
</span>
|
||||
{% else %}
|
||||
<span class="badge bg-secondary text-white py-2 px-3 fs-6">
|
||||
PENDIENTE
|
||||
</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card-body p-0">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-hover align-middle mb-0">
|
||||
<thead class="table-light small">
|
||||
<tr>
|
||||
<th class="ps-3">Hito Evaluativo</th>
|
||||
<th>Fecha</th>
|
||||
<th>Tipo</th>
|
||||
<th class="text-center">Calificación</th>
|
||||
<th class="text-center">Condición</th>
|
||||
<th class="pe-3">Observaciones de Cátedra</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for g in item.grades %}
|
||||
<tr>
|
||||
<td class="ps-3 fw-semibold text-body">
|
||||
{{ g.milestone_title }}
|
||||
</td>
|
||||
<td class="font-monospace text-muted small">
|
||||
{{ g.milestone_date }}
|
||||
</td>
|
||||
<td>
|
||||
<span class="badge bg-light text-dark border">
|
||||
{{ g.milestone_type }}
|
||||
</span>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
{% if g.is_absent %}
|
||||
<span class="badge bg-warning text-dark font-monospace">AUSENTE</span>
|
||||
{% elif g.score is not none %}
|
||||
<span class="font-monospace fw-bold fs-6 {% if g.score >= 7 %}text-success{% elif g.score >= 4 %}text-primary{% else %}text-danger{% endif %}">
|
||||
{{ g.score }}
|
||||
</span>
|
||||
{% else %}
|
||||
<span class="text-muted">-</span>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td class="text-center">
|
||||
{% if g.is_absent %}
|
||||
<span class="badge bg-warning-subtle text-warning border">Ausente</span>
|
||||
{% elif g.score is not none %}
|
||||
{% if g.score >= 7 %}
|
||||
<span class="badge bg-success-subtle text-success border">Aprobado / Promoción</span>
|
||||
{% elif g.score >= 4 %}
|
||||
<span class="badge bg-primary-subtle text-primary border">Aprobado</span>
|
||||
{% else %}
|
||||
<span class="badge bg-danger-subtle text-danger border">Desaprobado</span>
|
||||
{% endif %}
|
||||
{% else %}
|
||||
<span class="badge bg-secondary-subtle text-secondary border">Sin Calificar</span>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td class="pe-3 small text-muted">
|
||||
{{ g.feedback or '-' }}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="card border-0 shadow-sm">
|
||||
<div class="card-body text-center py-5">
|
||||
<i class="bi bi-journal-x fs-1 text-muted d-block mb-3"></i>
|
||||
<h5 class="fw-bold text-muted">Aún no se registran calificaciones cargadas</h5>
|
||||
<p class="text-muted small">
|
||||
Tus notas aparecerán aquí a medida que los equipos docentes carguen las evaluaciones de tus materias cursadas.
|
||||
</p>
|
||||
<a href="/schedule/today_schedule" class="btn btn-outline-primary btn-sm">
|
||||
<i class="bi bi-calendar-day me-1"></i>Ver Cartelera de Clases
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
</div>
|
||||
{% endblock %}
|
||||
Reference in New Issue
Block a user