207 lines
12 KiB
HTML
207 lines
12 KiB
HTML
{% extends "base.html" %}
|
|
|
|
{% block title %}{{ classroom.code_display }} - Classroom Details - Edu-Space Admin{% endblock %}
|
|
|
|
{% block content %}
|
|
<div class="container-fluid pt-5 mt-4">
|
|
<!-- Breadcrumb & Header -->
|
|
<div class="row mb-4 align-items-center">
|
|
<div class="col-md-7">
|
|
<nav aria-label="breadcrumb">
|
|
<ol class="breadcrumb mb-1 small">
|
|
<li class="breadcrumb-item"><a href="/classrooms/list_classrooms">Classrooms</a></li>
|
|
<li class="breadcrumb-item active">{{ classroom.code_display }}</li>
|
|
</ol>
|
|
</nav>
|
|
<h1 class="h3 mb-0 d-flex align-items-center flex-wrap gap-2">
|
|
<i class="bi bi-door-open text-primary"></i> {{ classroom.code_display }}
|
|
{% if classroom.is_active %}
|
|
<span class="badge bg-success-subtle text-success border border-success-subtle fs-6">
|
|
<i class="bi bi-check-circle me-1"></i>Active
|
|
</span>
|
|
{% else %}
|
|
<span class="badge bg-danger-subtle text-danger border border-danger-subtle fs-6">
|
|
<i class="bi bi-x-circle me-1"></i>Inactive
|
|
</span>
|
|
{% endif %}
|
|
</h1>
|
|
</div>
|
|
<div class="col-md-5 text-md-end mt-3 mt-md-0">
|
|
{% if user.has_permission('classrooms', 'read_write') %}
|
|
<a href="/classrooms/edit_classroom/{{ classroom.id }}" class="btn btn-primary me-2">
|
|
<i class="bi bi-pencil me-1"></i>Edit Classroom
|
|
</a>
|
|
<button type="button" class="btn btn-outline-danger me-2" data-bs-toggle="modal" data-bs-target="#modalDeleteClassroom">
|
|
<i class="bi bi-trash me-1"></i>Eliminar
|
|
</button>
|
|
{% endif %}
|
|
<a href="/classrooms/list_classrooms" class="btn btn-outline-secondary">
|
|
<i class="bi bi-arrow-left me-1"></i>Back to Classrooms
|
|
</a>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Classroom Details Cards -->
|
|
<div class="row g-3 mb-4">
|
|
<div class="col-lg-4">
|
|
<div class="card border-0 shadow-sm h-100">
|
|
<div class="card-header bg-body-tertiary border-0 py-3">
|
|
<h5 class="mb-0 h6 fw-bold">
|
|
<i class="bi bi-info-circle text-primary me-2"></i>Ficha Técnica
|
|
</h5>
|
|
</div>
|
|
<div class="card-body p-3">
|
|
<ul class="list-group list-group-flush">
|
|
<li class="list-group-item d-flex justify-content-between align-items-center px-0">
|
|
<span class="text-muted"><i class="bi bi-building me-2"></i>Edificio / Sede</span>
|
|
<span class="fw-bold">
|
|
{% if classroom.building_entity %}
|
|
<a href="/buildings/view_building" class="text-decoration-none">
|
|
{{ classroom.building_entity.name }}
|
|
</a>
|
|
{% else %}
|
|
{{ classroom.building }}
|
|
{% endif %}
|
|
</span>
|
|
</li>
|
|
<li class="list-group-item d-flex justify-content-between align-items-center px-0">
|
|
<span class="text-muted"><i class="bi bi-door-closed me-2"></i>Número / Nombre</span>
|
|
<span class="fw-bold font-monospace">{{ classroom.code }}</span>
|
|
</li>
|
|
<li class="list-group-item d-flex justify-content-between align-items-center px-0">
|
|
<span class="text-muted"><i class="bi bi-layers me-2"></i>Piso / Planta</span>
|
|
<span class="fw-bold">{% if classroom.floor == 0 %}Planta Baja{% else %}Piso {{ classroom.floor }}{% endif %}</span>
|
|
</li>
|
|
<li class="list-group-item d-flex justify-content-between align-items-center px-0">
|
|
<span class="text-muted"><i class="bi bi-people me-2"></i>Capacidad Máxima</span>
|
|
{% if classroom.is_unlimited %}
|
|
<span class="badge bg-primary-subtle text-primary border px-2 py-1 fs-6">
|
|
<i class="bi bi-infinity me-1"></i>Ilimitada (∞)
|
|
</span>
|
|
{% else %}
|
|
<span class="fw-bold text-success fs-6">{{ classroom.capacity }} estudiantes</span>
|
|
{% endif %}
|
|
</li>
|
|
</ul>
|
|
|
|
{% if classroom.description %}
|
|
<div class="mt-3 pt-3 border-top">
|
|
<small class="text-muted fw-bold d-block mb-1">Descripción / Notas:</small>
|
|
<p class="small text-secondary mb-0">{{ classroom.description }}</p>
|
|
</div>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="col-lg-8">
|
|
<!-- Upcoming Schedule / Reservations -->
|
|
<div class="card border-0 shadow-sm h-100">
|
|
<div class="card-header bg-body-tertiary border-0 py-3 d-flex justify-content-between align-items-center">
|
|
<h5 class="mb-0 h6 fw-bold">
|
|
<i class="bi bi-calendar-check text-primary me-2"></i>Próximas Clases y Reservas
|
|
</h5>
|
|
<a href="/schedule/calendar_view" class="btn btn-outline-primary btn-sm">
|
|
<i class="bi bi-calendar-week me-1"></i>Ver en Calendario
|
|
</a>
|
|
</div>
|
|
<div class="card-body p-0">
|
|
{% if upcoming_reservations %}
|
|
<div class="table-responsive">
|
|
<table class="table table-hover align-middle mb-0">
|
|
<thead class="table-light small text-uppercase">
|
|
<tr>
|
|
<th class="ps-3">Fecha y Horario</th>
|
|
<th>Materia / Motivo</th>
|
|
<th>Comisión</th>
|
|
<th>Asistentes</th>
|
|
<th class="text-end pe-3">Acciones</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
{% for res in upcoming_reservations %}
|
|
<tr>
|
|
<td class="ps-3">
|
|
<div class="fw-bold font-monospace text-primary fs-6 mb-1">
|
|
<i class="bi bi-calendar-event text-primary me-1"></i>{{ res.start_time }}
|
|
</div>
|
|
<div class="small font-monospace text-body-secondary">
|
|
<i class="bi bi-clock text-warning me-1"></i>{{ res.start_time }} - {{ res.end_time }} hs
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<div class="fw-bold text-primary">{{ res.subject_name }}</div>
|
|
<small class="badge bg-secondary-subtle text-secondary font-monospace">{{ res.subject_code }}</small>
|
|
</td>
|
|
<td>
|
|
<span class="badge bg-info-subtle text-info border">
|
|
{{ res.commission.code if res.commission else 'S/C' }}
|
|
</span>
|
|
</td>
|
|
<td>
|
|
<span class="small">{{ res.expected_attendees }} / {{ classroom.capacity }}</span>
|
|
</td>
|
|
<td class="text-end pe-3">
|
|
{% if res.effective_virtual_link %}
|
|
<a href="{{ res.effective_virtual_link }}" target="_blank" class="btn btn-outline-success btn-sm py-0 px-2 me-1" title="Unirse a Clase Virtual (Zoom / Meet)">
|
|
<i class="bi bi-camera-video"></i>
|
|
</a>
|
|
{% endif %}
|
|
<a href="/schedule/view_reservation?id={{ res.id }}" class="btn btn-outline-secondary btn-sm py-0 px-2" title="Ver Ficha">
|
|
<i class="bi bi-eye"></i>
|
|
</a>
|
|
</td>
|
|
</tr>
|
|
{% endfor %}
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
{% else %}
|
|
<div class="text-center py-5">
|
|
<i class="bi bi-calendar-x text-muted fs-1 mb-2"></i>
|
|
<h6 class="fw-bold">Sin reservas programadas próximamente</h6>
|
|
<p class="text-muted small mb-3">Esta aula no tiene clases asignadas en las próximas fechas.</p>
|
|
{% if user.has_permission('reservations', 'read_write') %}
|
|
<a href="/schedule/add_reservation" class="btn btn-primary btn-sm">
|
|
<i class="bi bi-plus-circle me-1"></i>Asignar Nueva Reserva
|
|
</a>
|
|
{% endif %}
|
|
</div>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!-- Modal Confirmar Eliminación de Aula -->
|
|
<div class="modal fade text-start" id="modalDeleteClassroom" tabindex="-1" aria-hidden="true">
|
|
<div class="modal-dialog modal-dialog-centered">
|
|
<div class="modal-content border-0 shadow">
|
|
<div class="modal-header bg-danger text-white py-2">
|
|
<h6 class="modal-title fw-bold">
|
|
<i class="bi bi-exclamation-triangle-fill me-2"></i>Confirmar Eliminación de Aula
|
|
</h6>
|
|
<button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
</div>
|
|
<div class="modal-body p-4">
|
|
<p class="mb-2">¿Está seguro de que desea eliminar el aula <strong>{{ classroom.code_display }}</strong>?</p>
|
|
<div class="alert alert-warning small mb-0 mt-3 d-flex align-items-center gap-2">
|
|
<i class="bi bi-shield-exclamation fs-5"></i>
|
|
<div>
|
|
Si el espacio cuenta con reservas históricas o cursadas registradas, se <strong>desactivará</strong> automáticamente para mantener la integridad académica del sistema.
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="modal-footer py-2 bg-light">
|
|
<button type="button" class="btn btn-sm btn-secondary" data-bs-dismiss="modal">Cancelar</button>
|
|
<form method="POST" action="/classrooms/delete_classroom" class="d-inline">
|
|
<input type="hidden" name="classroom_id" value="{{ classroom.id }}">
|
|
<button type="submit" class="btn btn-sm btn-danger">
|
|
<i class="bi bi-trash me-1"></i>Confirmar Eliminación
|
|
</button>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% endblock %}
|