gmao/app_new/templates/outlook/interpretations.html

180 lines
8.5 KiB
HTML
Raw Normal View History

2026-08-14 18:02:25 +02:00
{% extends "base.html" %}
{% block title %}Interprétations - GMAO{% endblock %}
{% block content %}
<div class="container-fluid">
<div class="d-flex justify-content-between align-items-center mb-3">
<h4><i class="bi bi-robot"></i> Interprétations des emails</h4>
<a href="{{ url_for('dashboard.index') }}" class="btn btn-outline-secondary">
<i class="bi bi-arrow-left"></i> Retour
</a>
</div>
<!-- Filtres -->
<div class="card mb-3">
<div class="card-body">
<form method="GET" class="row g-3">
<div class="col-md-4">
<label class="form-label">Statut</label>
<select name="status" class="form-select" onchange="this.form.submit()">
<option value="pending" {% if status_filter == 'pending' %}selected{% endif %}>En attente</option>
<option value="accepted" {% if status_filter == 'accepted' %}selected{% endif %}>Acceptées</option>
<option value="rejected" {% if status_filter == 'rejected' %}selected{% endif %}>Refusées</option>
<option value="all" {% if status_filter == 'all' %}selected{% endif %}>Toutes</option>
</select>
</div>
<div class="col-md-4">
<label class="form-label">Type</label>
<select name="type" class="form-select" onchange="this.form.submit()">
<option value="">Tous les types</option>
<option value="curative" {% if type_filter == 'curative' %}selected{% endif %}>Curative</option>
<option value="preventive" {% if type_filter == 'preventive' %}selected{% endif %}>Préventive</option>
<option value="ameliorative" {% if type_filter == 'ameliorative' %}selected{% endif %}>Améliorative</option>
<option value="administrative" {% if type_filter == 'administrative' %}selected{% endif %}>Administrative</option>
<option value="formation" {% if type_filter == 'formation' %}selected{% endif %}>Formation</option>
<option value="information" {% if type_filter == 'information' %}selected{% endif %}>Information</option>
</select>
</div>
<div class="col-md-4 d-flex align-items-end">
<a href="{{ url_for('outlook_dashboard.all_interpretations') }}" class="btn btn-outline-secondary">
<i class="bi bi-x-circle"></i> Réinitialiser
</a>
</div>
</form>
</div>
</div>
<!-- Liste des interprétations -->
{% if interpretations %}
<div class="table-responsive">
<table class="table table-hover">
<thead>
<tr>
<th>Date</th>
<th>Type</th>
<th>Titre</th>
<th>Description</th>
<th>Statut</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
{% for interp in interpretations %}
<tr class="{% if interp.status == 'rejected' %}table-secondary{% elif interp.status == 'accepted' %}table-success{% endif %}">
<td>{{ interp.created_at|datetime_fmt }}</td>
2026-08-14 18:02:25 +02:00
<td>
{% if interp.analysis_type == 'curative' %}
<span class="badge bg-danger">Curative</span>
{% elif interp.analysis_type == 'preventive' %}
<span class="badge bg-primary">Préventive</span>
{% elif interp.analysis_type == 'ameliorative' %}
<span class="badge bg-success">Améliorative</span>
{% elif interp.analysis_type == 'administrative' %}
<span class="badge bg-warning text-dark">Admin</span>
{% elif interp.analysis_type == 'formation' %}
<span class="badge bg-info text-dark">Formation</span>
{% elif interp.analysis_type == 'information' %}
<span class="badge bg-secondary">Information</span>
{% else %}
<span class="badge bg-secondary">{{ interp.analysis_type }}</span>
{% endif %}
</td>
<td>
{% if interp.mail %}
<a href="{{ url_for('outlook_pages.mail_view', account_id=interp.mail.account_id, mail_id=interp.mail.id) }}">
{{ interp.suggested_title[:50] if interp.suggested_title else '(sans titre)' }}
</a>
{% else %}
<span class="text-muted">{{ interp.suggested_title[:50] if interp.suggested_title else '(sans titre)' }}</span>
{% endif %}
</td>
<td>{{ interp.suggested_description[:80] if interp.suggested_description else '-' }}</td>
<td>
{% if interp.status == 'pending' %}
<span class="badge bg-warning text-dark">En attente</span>
{% elif interp.status == 'accepted' %}
<span class="badge bg-success">Acceptée</span>
{% elif interp.status == 'rejected' %}
<span class="badge bg-secondary">Refusée</span>
{% else %}
<span class="badge bg-secondary">{{ interp.status }}</span>
{% endif %}
</td>
<td>
{% if interp.status == 'pending' %}
<div class="btn-group btn-group-sm">
<a href="{{ url_for('trainings.import_outlook', interpretation_id=interp.id) if interp.analysis_type == 'formation' else url_for('outlook_dashboard.create_intervention_from_interpretation', interp_id=interp.id) }}"
class="btn btn-outline-success" title="{{ 'Importer la formation' if interp.analysis_type == 'formation' else 'Créer lintervention' }}">
2026-08-14 18:02:25 +02:00
<i class="bi bi-check-lg"></i>
</a>
<button type="button" class="btn btn-outline-danger"
onclick="rejectInterpretation({{ interp.id }})" title="Refuser">
<i class="bi bi-x-lg"></i>
</button>
</div>
{% elif interp.status == 'rejected' %}
<button type="button" class="btn btn-sm btn-outline-secondary"
onclick="restoreInterpretation({{ interp.id }})" title="Restaurer">
<i class="bi bi-arrow-counterclockwise"></i>
</button>
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% else %}
<div class="alert alert-info">
<i class="bi bi-info-circle"></i> Aucune interprétation trouvée.
</div>
{% endif %}
</div>
<script>
function rejectInterpretation(interpId) {
if (!confirm('Refuser cette interprétation ?')) return;
fetch(`/outlook/interpretation/${interpId}/reject`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
}
})
.then(response => response.json())
.then(data => {
if (data.success) {
location.reload();
} else {
alert('Erreur: ' + (data.error || 'Erreur inconnue'));
}
})
.catch(error => {
alert('Erreur: ' + error);
});
}
function restoreInterpretation(interpId) {
if (!confirm('Restaurer cette interprétation ?')) return;
fetch(`/outlook/api/interpretation/${interpId}`, {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ status: 'pending' })
})
.then(response => response.json())
.then(data => {
if (data.success) {
location.reload();
} else {
alert('Erreur: ' + (data.error || 'Erreur inconnue'));
}
})
.catch(error => {
alert('Erreur: ' + error);
});
}
</script>
{% endblock %}