Files
admin-edu-space/frontend/views/buildings/view.html
T

188 lines
10 KiB
HTML

{% extends "base.html" %}
{% block title %}{{ building.name }} - Detalle del Edificio - 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="/buildings/list_buildings">Edificios</a></li>
<li class="breadcrumb-item active">{{ building.name }}</li>
</ol>
</nav>
<h1 class="h3 mb-0 d-flex align-items-center flex-wrap gap-2">
<i class="bi bi-building text-primary"></i> {{ building.name }}
<span class="badge bg-secondary-subtle text-secondary font-monospace border fs-6">{{ building.code or 'EDIF' }}</span>
{% if building.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>Activo
</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>Inactivo
</span>
{% endif %}
</h1>
</div>
<div class="col-md-5 text-md-end mt-3 mt-md-0">
{% if user.has_permission('classrooms', 'read_write') or user.is_admin() or user.is_bedelia() %}
<a href="/buildings/edit/{{ building.id }}" class="btn btn-outline-secondary me-2">
<i class="bi bi-pencil me-1"></i>Editar Edificio
</a>
<a href="/classrooms/add_classroom" class="btn btn-primary">
<i class="bi bi-plus-circle me-1"></i>Nueva Aula
</a>
{% endif %}
</div>
</div>
<!-- Overview Cards -->
<div class="row g-3 mb-4">
<div class="col-md-4">
<div class="card border-0 shadow-sm h-100">
<div class="card-body p-3">
<div class="text-muted small fw-semibold">Ubicación / Dirección</div>
<p class="h6 fw-bold mb-2">
<i class="bi {% if building.is_virtual %}bi-globe2 text-info{% else %}bi-geo-alt text-danger{% endif %} me-1"></i>{{ building.address or 'Sin dirección especificada' }}
</p>
{% if building.description %}
<small class="text-secondary">{{ building.description }}</small>
{% endif %}
</div>
</div>
</div>
<div class="col-md-8">
<div class="row g-3">
<div class="col-sm-4">
<div class="card border-0 shadow-sm text-center p-3">
<small class="text-muted text-uppercase fw-bold">Pisos</small>
{% if building.is_virtual %}
<span class="fs-5 fw-bold text-info d-block mt-2">Digital / Nube</span>
{% else %}
<span class="display-6 fw-bold text-primary">{{ building.floors }}</span>
{% endif %}
</div>
</div>
<div class="col-sm-4">
<div class="card border-0 shadow-sm text-center p-3">
<small class="text-muted text-uppercase fw-bold">Aulas Asociadas</small>
<span class="display-6 fw-bold text-success">{{ classrooms|length }}</span>
</div>
</div>
<div class="col-sm-4">
<div class="card border-0 shadow-sm text-center p-3">
<small class="text-muted text-uppercase fw-bold">Capacidad Total</small>
{% if building.is_virtual %}
<span class="fs-5 fw-bold text-primary d-block mt-2" title="Capacidad de concurrencia virtual ilimitada">
<i class="bi bi-infinity me-1"></i>Ilimitada
</span>
{% else %}
<span class="display-6 fw-bold text-info">{{ building.physical_capacity or building.total_capacity }}</span>
{% endif %}
</div>
</div>
</div>
</div>
</div>
<!-- Classrooms by Floor -->
<div class="card border-0 shadow-sm mb-4">
<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-layers text-primary me-2"></i>Distribución de Aulas por Piso
</h5>
<span class="badge badge-brand">{{ classrooms|length }} aulas configuradas</span>
</div>
<div class="card-body p-4">
{% if classrooms_by_floor %}
{% for floor_num in classrooms_by_floor|sort %}
<div class="mb-4">
<div class="d-flex align-items-center mb-3">
<span class="badge bg-dark bg-opacity-75 fs-6 px-3 py-2 me-2">
<i class="bi bi-layer-forward me-1"></i>
{% if floor_num == 0 %}Planta Baja{% else %}Piso {{ floor_num }}{% endif %}
</span>
<div class="border-bottom flex-grow-1"></div>
<small class="text-muted ms-2">{{ classrooms_by_floor[floor_num]|length }} aulas</small>
</div>
<div class="row g-3">
{% for c in classrooms_by_floor[floor_num] %}
<div class="col-md-6 col-xl-4">
<div class="card border border-light-subtle shadow-sm h-100">
<div class="card-body p-3">
<div class="d-flex justify-content-between align-items-start mb-2">
<h6 class="fw-bold mb-0">
<a href="/classrooms/view_classroom" class="text-decoration-none text-primary">
<i class="bi bi-door-open me-1"></i>{{ c.code }}
</a>
</h6>
{% if c.is_active %}
<span class="badge bg-success-subtle text-success border border-success-subtle small">Activa</span>
{% else %}
<span class="badge bg-danger-subtle text-danger border border-danger-subtle small">Inactiva</span>
{% endif %}
</div>
<div class="small text-muted mb-2">
<i class="bi bi-people me-1"></i>Capacidad: <strong>{{ c.capacity }}</strong> estudiantes
</div>
{% if c.description %}
<p class="small text-secondary mb-2 text-truncate">{{ c.description }}</p>
{% endif %}
<div class="d-flex justify-content-between align-items-center pt-2 border-top">
<a href="/classrooms/view_classroom" class="btn btn-outline-primary btn-sm py-0 px-2">
<small>Ver Ficha</small>
</a>
{% if user.has_permission('classrooms', 'read_write') %}
<a href="/classrooms/edit_classroom" class="btn btn-outline-secondary btn-sm py-0 px-2">
<small>Editar</small>
</a>
{% endif %}
</div>
</div>
</div>
</div>
{% endfor %}
</div>
</div>
{% endfor %}
{% else %}
<div class="text-center py-5">
<i class="bi bi-door-closed text-muted fs-1 mb-2"></i>
<h6 class="fw-bold">No hay aulas asignadas a este edificio</h6>
<p class="text-muted small mb-3">Puedes crear aulas nuevas o editar las existentes para vincularlas aquí.</p>
{% if user.has_permission('classrooms', 'read_write') %}
<a href="/classrooms/add_classroom" class="btn btn-primary btn-sm">
<i class="bi bi-plus-circle me-1"></i>Agregar Primera Aula
</a>
{% endif %}
</div>
{% endif %}
</div>
</div>
<!-- Danger Zone (Delete) -->
{% if user.has_permission('classrooms', 'read_write') %}
<div class="card border-danger border-opacity-25 shadow-sm mb-4">
<div class="card-body p-3 d-flex justify-content-between align-items-center flex-wrap gap-2">
<div>
<h6 class="text-danger fw-bold mb-1">Eliminar Edificio</h6>
<small class="text-muted">Solo es posible eliminar edificios que no tengan aulas asignadas.</small>
</div>
<form method="POST" action="/buildings/delete_building" onsubmit="return confirm('¿Estás seguro de que deseas eliminar este edificio?');">
<button type="submit" class="btn btn-outline-danger btn-sm" {% if classrooms|length > 0 %}disabled title="Tiene aulas asociadas"{% endif %}>
<i class="bi bi-trash me-1"></i>Eliminar Edificio
</button>
</form>
</div>
</div>
{% endif %}
</div>
{% endblock %}