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

169 lines
No EOL
8.4 KiB
HTML

{% extends "base.html" %}
{% block title %}Nouvelle restriction — {{ equipment.name }} — GMAO Collège{% endblock %}
{% block content %}
<div class="container-fluid">
<div class="row mb-4">
<div class="col">
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{{ url_for('equipments.index') }}">Équipements</a></li>
<li class="breadcrumb-item"><a href="{{ url_for('equipments.detail', id=equipment.id) }}">{{ equipment.name }}</a></li>
<li class="breadcrumb-item"><a href="{{ url_for('equipments_restrictions.restrictions', id=equipment.id) }}">Restrictions</a></li>
<li class="breadcrumb-item active">Nouvelle</li>
</ol>
</nav>
<h1><i class="bi bi-shield-exclamation me-2"></i>Nouvelle restriction</h1>
</div>
</div>
<div class="row">
<div class="col-lg-8">
<form method="POST">
<div class="card mb-4">
<div class="card-header">
<h5 class="mb-0">Type de restriction</h5>
</div>
<div class="card-body">
<div class="form-check mb-3">
<input class="form-check-input" type="radio" name="restriction_type" id="type_time" value="time" checked>
<label class="form-check-label" for="type_time">
<i class="bi bi-clock me-2"></i><strong>Restriction par horaires</strong>
<br><small class="text-muted">Interdit les interventions pendant certaines tranches horaires</small>
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="radio" name="restriction_type" id="type_room" value="room_occupancy">
<label class="form-check-label" for="type_room">
<i class="bi bi-door-open me-2"></i><strong>Restriction par occupation de salle</strong>
<br><small class="text-muted">Interdit les interventions quand les salles sélectionnées sont occupées (planning PRONOTE)</small>
</label>
</div>
</div>
</div>
<!-- Restriction par horaires -->
<div id="time_fields" class="card mb-4">
<div class="card-header">
<h5 class="mb-0">Horaires d'interdiction</h5>
</div>
<div class="card-body">
<div class="mb-3">
<label class="form-label">Jours concernés</label>
<div class="row">
{% for day_num, day_name in days.items() %}
{% if day_num > 0 and day_num < 6 %}
<div class="col-md-4 mb-2">
<div class="form-check">
<input class="form-check-input" type="checkbox" name="days" value="{{ day_num }}" id="day_{{ day_num }}" checked>
<label class="form-check-label" for="day_{{ day_num }}">{{ day_name }}</label>
</div>
</div>
{% else %}
<div class="col-md-4 mb-2">
<div class="form-check">
<input class="form-check-input" type="checkbox" name="days" value="{{ day_num }}" id="day_{{ day_num }}">
<label class="form-check-label" for="day_{{ day_num }}">{{ day_name }}</label>
</div>
</div>
{% endif %}
{% endfor %}
</div>
</div>
<div class="row">
<div class="col-md-6">
<label for="start_time" class="form-label">Heure de début</label>
<input type="time" class="form-control" id="start_time" name="start_time" value="08:00">
</div>
<div class="col-md-6">
<label for="end_time" class="form-label">Heure de fin</label>
<input type="time" class="form-control" id="end_time" name="end_time" value="17:00">
</div>
</div>
</div>
</div>
<!-- Restriction par occupation de salle -->
<div id="room_fields" class="card mb-4" style="display:none;">
<div class="card-header">
<h5 class="mb-0">Salles à surveiller</h5>
</div>
<div class="card-body">
<p class="text-muted mb-3">
L'intervention sera interdite quand l'une de ces salles est occupée (selon le planning PRONOTE).
</p>
<div class="mb-3">
<label class="form-label">Rechercher des salles</label>
<input type="text" class="form-control" id="room_search" placeholder="Tapez pour filtrer...">
</div>
<div id="rooms_list" style="max-height: 300px; overflow-y: auto;">
{% for room in rooms %}
<div class="form-check room-item" data-name="{{ room.name|lower }}">
<input class="form-check-input" type="checkbox" name="room_ids" value="{{ room.id }}" id="room_{{ room.id }}">
<label class="form-check-label" for="room_{{ room.id }}">{{ room.name }}</label>
</div>
{% endfor %}
</div>
</div>
</div>
<!-- Message -->
<div class="card mb-4">
<div class="card-header">
<h5 class="mb-0">Message explicatif (optionnel)</h5>
</div>
<div class="card-body">
<textarea class="form-control" name="message" rows="2" placeholder="Ex: Intervention impossible pendant les cours"></textarea>
</div>
</div>
<div class="d-flex gap-2">
<button type="submit" class="btn btn-primary">
<i class="bi bi-check-circle me-1"></i>Enregistrer
</button>
<a href="{{ url_for('equipments_restrictions.restrictions', id=equipment.id) }}" class="btn btn-outline-secondary">
Annuler
</a>
</div>
</form>
</div>
</div>
</div>
{% block extra_scripts %}
<script>
document.addEventListener('DOMContentLoaded', function() {
// Toggle entre les types de restriction
const typeTime = document.getElementById('type_time');
const typeRoom = document.getElementById('type_room');
const timeFields = document.getElementById('time_fields');
const roomFields = document.getElementById('room_fields');
function toggleFields() {
if (typeTime.checked) {
timeFields.style.display = 'block';
roomFields.style.display = 'none';
} else {
timeFields.style.display = 'none';
roomFields.style.display = 'block';
}
}
typeTime.addEventListener('change', toggleFields);
typeRoom.addEventListener('change', toggleFields);
// Recherche de salles
const roomSearch = document.getElementById('room_search');
const roomItems = document.querySelectorAll('.room-item');
roomSearch.addEventListener('input', function() {
const search = this.value.toLowerCase();
roomItems.forEach(item => {
const name = item.getAttribute('data-name');
item.style.display = name.includes(search) ? 'block' : 'none';
});
});
});
</script>
{% endblock %}
{% endblock %}