gmao/app_new/templates/pronote/room_planning.html
2026-08-14 16:02:25 +00:00

195 lines
No EOL
9.2 KiB
HTML

{% extends "base.html" %}
{% block title %}Planning {{ room.name }} — GMAO{% endblock %}
{% block content %}
<div class="container-fluid">
<div class="d-flex justify-content-between align-items-center mb-4">
<div>
<h1><i class="bi bi-calendar-week"></i> Planning : {{ room.name }}</h1>
<p class="text-muted mb-0">
{% if room.room_type %}Type : <span class="badge" style="background-color: {{ room.room_type.color|hex_color }}; color: {{ room.room_type.color|text_color }};">{{ room.room_type.name }}</span>{% endif %}
{% if room.building %} | 📍 {{ room.building.name }}{% endif %}
</p>
</div>
<div>
{% if room.room_type and room.room_type.is_teaching %}
<form method="POST" action="{{ url_for('pronote.import_room_planning', room_id=room.id) }}" style="display:inline;">
<button type="submit" class="btn btn-outline-success">
<i class="bi bi-download"></i> Importer 3 semaines depuis Pronote
</button>
</form>
{% endif %}
<a href="{{ url_for('pronote.planning') }}" class="btn btn-outline-secondary">
<i class="bi bi-arrow-left"></i> Retour aux plannings
</a>
</div>
</div>
<!-- Navigation par semaine -->
<div class="row mb-3">
<div class="col">
<div class="d-flex align-items-center justify-content-between">
<div>
<h5 class="mb-0">
<i class="bi bi-calendar-range"></i>
Semaine du {{ week_start.strftime('%d/%m/%Y') }}
au {{ week_end.strftime('%d/%m/%Y') }}
</h5>
</div>
<div class="btn-group" role="group">
<a href="{{ url_for('pronote.room_planning', room_id=room.id, week=prev_week.isoformat()) }}"
class="btn btn-outline-primary btn-sm">
<i class="bi bi-chevron-left"></i> Semaine précédente
</a>
<a href="{{ url_for('pronote.room_planning', room_id=room.id, week=today.isoformat()) }}"
class="btn btn-outline-secondary btn-sm">
Aujourd'hui
</a>
<a href="{{ url_for('pronote.room_planning', room_id=room.id, week=next_week.isoformat()) }}"
class="btn btn-outline-primary btn-sm">
Semaine suivante <i class="bi bi-chevron-right"></i>
</a>
</div>
</div>
</div>
</div>
<!-- Comparaison planning -->
<div class="row">
<!-- Planning GMAO (importé par watchdog) -->
<div class="col-md-6">
<div class="card">
<div class="card-header bg-light">
<h5 class="mb-0">
<i class="bi bi-database"></i> Planning importé (Watchdog)
</h5>
</div>
<div class="card-body p-0">
{% if db_by_day %}
<div class="table-responsive">
<table class="table table-hover mb-0">
{% set days = ['Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi', 'Dimanche'] %}
{% for day_num in [0, 1, 2, 3, 4, 5, 6] %}
{% set day_date = week_start + timedelta(days=day_num) %}
<thead class="table-success">
<tr>
<th colspan="4" style="background-color: #d1e7dd;">
<strong>{{ days[day_num] }} {{ day_date.strftime('%d/%m') }}</strong>
</th>
</tr>
</thead>
<tbody>
{% if day_num in db_by_day %}
{% for s in db_by_day[day_num] %}
<tr>
<td style="width: 100px;"><strong>{{ s.start_time }}</strong></td>
<td>{{ s.subject or '-' }}</td>
<td>{{ s.teacher or '-' }}</td>
<td><span class="badge bg-secondary">{{ s.class_name or '-' }}</span></td>
</tr>
{% endfor %}
{% else %}
<tr class="table-light">
<td colspan="4" class="text-center text-muted">
<em>Pas de cours</em>
</td>
</tr>
{% endif %}
</tbody>
{% endfor %}
</table>
</div>
{% else %}
<div class="p-3 text-center text-muted">
<i class="bi bi-inbox"></i><br>
Aucun planning importé pour cette semaine.<br>
<small>Le watchdog PRONOTE synchronise automatiquement les plannings.</small>
</div>
{% endif %}
</div>
</div>
</div>
<!-- Planning PRONOTE (direct) -->
<div class="col-md-6">
<div class="card">
<div class="card-header bg-light d-flex justify-content-between align-items-center">
<h5 class="mb-0">
<i class="bi bi-wifi"></i> Planning PRONOTE (direct)
</h5>
{% if pronote_connected %}
<span class="badge bg-success">Connecté</span>
{% else %}
<span class="badge bg-secondary">Hors ligne</span>
{% endif %}
</div>
<div class="card-body p-0">
{% if pronote_connected %}
<div class="table-responsive">
<table class="table table-hover mb-0">
{% set days = ['Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi', 'Dimanche'] %}
{% for day_num in [0, 1, 2, 3, 4, 5, 6] %}
{% set day_date = week_start + timedelta(days=day_num) %}
<thead class="table-info">
<tr>
<th colspan="4" style="background-color: #cff4fc;">
<strong>{{ days[day_num] }} {{ day_date.strftime('%d/%m') }}</strong>
</th>
</tr>
</thead>
<tbody>
{% if day_num in pronote_by_day %}
{% for p in pronote_by_day[day_num] %}
<tr>
<td style="width: 100px;"><strong>{{ p.heure }}</strong></td>
<td>{{ p.matiere }}</td>
<td>{{ p.prof }}</td>
<td><span class="badge bg-info">{{ p.classe }}</span></td>
</tr>
{% endfor %}
{% else %}
<tr class="table-light">
<td colspan="4" class="text-center text-muted">
<em>Pas de cours</em>
</td>
</tr>
{% endif %}
</tbody>
{% endfor %}
</table>
</div>
{% else %}
<div class="p-3 text-center text-muted">
<i class="bi bi-exclamation-triangle"></i><br>
Connexion à PRONOTE impossible.
<div class="mt-2">
<small>Vérifiez la configuration du client PRONOTE.</small>
</div>
</div>
{% endif %}
</div>
</div>
</div>
</div>
<!-- État de synchronisation -->
{% if room.room_type and room.room_type.is_teaching %}
<div class="alert alert-info mt-3">
<div class="d-flex align-items-center">
<i class="bi bi-info-circle me-2"></i>
<div>
<strong>Synchronisation PRONOTE</strong>
<p class="mb-0 small">
Le watchdog importe automatiquement les plannings PRONOTE toutes les minutes.
Les données sont stockées localement pour consultation même hors connexion.
</p>
</div>
</div>
</div>
{% endif %}
</div>
{% endblock %}