gmao/app_new/templates/outlook/interpretations.html
root 0b3fff43e5
Some checks are pending
CI - Tests et Syntax / lint-and-test (push) Waiting to run
Complète le suivi opérationnel de la GMAO
2026-08-14 23:26:22 +00:00

179 lines
8.5 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{% 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>
<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' }}">
<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 %}