gmao/app_new/templates/outlook/auto_interpret.html

222 lines
9.8 KiB
HTML
Raw Normal View History

2026-08-14 18:02:25 +02:00
{% extends "base.html" %}
{% block title %}Interprétation automatique{% endblock %}
{% block content %}
<div class="container-fluid py-4">
<div class="row mb-4">
<div class="col-12">
<h2><i class="fas fa-robot"></i> Interprétation automatique des emails</h2>
<p class="text-muted">Configurez l'analyse automatique des nouveaux emails par Hermes</p>
</div>
</div>
<form id="autoInterpretForm">
<!-- Activation -->
<div class="row mb-4">
<div class="col-12">
<div class="card">
<div class="card-header">
<h5 class="mb-0"><i class="fas fa-power-off"></i> Activation</h5>
</div>
<div class="card-body">
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" id="auto_interpret_enabled" style="width: 3em; height: 1.5em;">
<label class="form-check-label ms-2" for="auto_interpret_enabled" style="font-size: 1.1em;">
Activer l'interprétation automatique
</label>
</div>
<div class="form-text mt-2">
Lorsqu'activé, Hermes analysera automatiquement les nouveaux emails reçus et créera des interprétations en attente.
</div>
</div>
</div>
</div>
</div>
<!-- Configuration -->
<div class="row mb-4">
<div class="col-md-6">
<div class="card h-100">
<div class="card-header">
<h5 class="mb-0"><i class="fas fa-clock"></i> Fréquence</h5>
</div>
<div class="card-body">
<div class="mb-3">
<label class="form-label">Intervalle de vérification (minutes)</label>
<select class="form-select" id="auto_interpret_interval">
<option value="1">Toutes les 1 minute</option>
<option value="5">Toutes les 5 minutes</option>
<option value="10" selected>Toutes les 10 minutes</option>
<option value="15">Toutes les 15 minutes</option>
<option value="30">Toutes les 30 minutes</option>
<option value="60">Toutes les heures</option>
</select>
</div>
<div class="mb-3">
<label class="form-label">Nombre maximum d'emails par exécution</label>
<input type="number" class="form-control" id="auto_interpret_max_emails" min="1" max="50" value="10">
<div class="form-text">Limite le nombre d'emails analysés à chaque exécution pour éviter la surcharge</div>
</div>
<div class="mb-3">
<label class="form-label">Fenêtre de temps (heures)</label>
<input type="number" class="form-control" id="auto_interpret_lookback_hours" min="1" value="24">
<div class="form-text">Analyse les emails reçus dans les dernières X heures (ex: 24 = 1 jour, 168 = 1 semaine)</div>
</div>
</div>
</div>
</div>
<div class="col-md-6">
<div class="card h-100">
<div class="card-header">
<h5 class="mb-0"><i class="fas fa-folder"></i> Dossier surveillé</h5>
</div>
<div class="card-body">
<div class="mb-3">
<label class="form-label">Dossier à surveiller</label>
<select class="form-select" id="auto_interpret_folder">
<option value="inbox" selected>Boîte de réception</option>
<option value="inbox,custom">Boîte de réception + dossiers personnalisés</option>
</select>
<div class="form-text">Seuls les emails du dossier sélectionné seront analysés</div>
</div>
</div>
</div>
</div>
</div>
<!-- Statut -->
<div class="row mb-4">
<div class="col-12">
<div class="card">
<div class="card-header">
<h5 class="mb-0"><i class="fas fa-info-circle"></i> Statut du service</h5>
</div>
<div class="card-body">
<div id="statusInfo">
<p><strong>Dernière exécution:</strong> <span id="lastRun">-</span></p>
<p><strong>Prochaine exécution:</strong> <span id="nextRun">-</span></p>
<p><strong>Emails analysés:</strong> <span id="emailsProcessed">0</span></p>
</div>
<button type="button" class="btn btn-outline-primary" onclick="runNow()">
<i class="fas fa-play"></i> Exécuter maintenant
</button>
</div>
</div>
</div>
</div>
<!-- Boutons -->
<div class="row">
<div class="col-12">
<div class="d-flex justify-content-between">
<a href="{{ url_for('outlook_dashboard.context_config') }}" class="btn btn-outline-secondary">
<i class="fas fa-cog"></i> Configuration Hermes
</a>
<button type="submit" class="btn btn-success btn-lg">
<i class="fas fa-save"></i> Sauvegarder
</button>
</div>
</div>
</div>
</form>
</div>
<!-- Toast -->
<div class="toast-container position-fixed bottom-0 end-0 p-3">
<div id="saveToast" class="toast" role="alert">
<div class="toast-header">
<strong class="me-auto">Configuration</strong>
<button type="button" class="btn-close" data-bs-dismiss="toast"></button>
</div>
<div class="toast-body" id="toastMessage">
Sauvegardé avec succès
</div>
</div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
loadConfig();
loadStatus();
});
function loadConfig() {
fetch('/outlook/api/auto-interpret')
.then(response => response.json())
.then(data => {
document.getElementById('auto_interpret_enabled').checked = data.auto_interpret_enabled || false;
document.getElementById('auto_interpret_interval').value = data.auto_interpret_interval || 10;
document.getElementById('auto_interpret_folder').value = data.auto_interpret_folder || 'inbox';
document.getElementById('auto_interpret_max_emails').value = data.auto_interpret_max_emails || 10;
document.getElementById('auto_interpret_lookback_hours').value = data.auto_interpret_lookback_hours || 24;
})
.catch(error => {
console.error('Erreur chargement config:', error);
});
}
function loadStatus() {
// TODO: Charger le statut depuis une API
document.getElementById('lastRun').textContent = 'Non disponible';
document.getElementById('nextRun').textContent = 'Non disponible';
document.getElementById('emailsProcessed').textContent = '0';
}
function runNow() {
if (!confirm('Lancer l\'interprétation automatique maintenant ?')) return;
fetch('/outlook/api/auto-interpret/run', { method: 'POST' })
.then(response => response.json())
.then(data => {
if (data.success) {
showToast('Analyse lancée: ' + data.processed + ' emails traités', 'success');
} else {
showToast(data.error || 'Erreur lors de l\'exécution', 'danger');
}
})
.catch(error => {
showToast('Erreur de connexion', 'danger');
});
}
document.getElementById('autoInterpretForm').addEventListener('submit', function(e) {
e.preventDefault();
const formData = {
auto_interpret_enabled: document.getElementById('auto_interpret_enabled').checked,
auto_interpret_interval: parseInt(document.getElementById('auto_interpret_interval').value),
auto_interpret_folder: document.getElementById('auto_interpret_folder').value,
auto_interpret_max_emails: parseInt(document.getElementById('auto_interpret_max_emails').value),
auto_interpret_lookback_hours: parseInt(document.getElementById('auto_interpret_lookback_hours').value)
};
fetch('/outlook/api/auto-interpret', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(formData)
})
.then(response => response.json())
.then(data => {
if (data.success) {
showToast(data.message, 'success');
} else {
showToast(data.error || 'Erreur lors de la sauvegarde', 'danger');
}
})
.catch(error => {
showToast('Erreur de connexion', 'danger');
});
});
function showToast(message, type) {
const toast = document.getElementById('saveToast');
const toastBody = document.getElementById('toastMessage');
toastBody.textContent = message;
toast.classList.remove('bg-success', 'bg-danger');
toast.classList.add(type === 'success' ? 'bg-success' : 'bg-danger', 'text-white');
const bsToast = new bootstrap.Toast(toast);
bsToast.show();
}
</script>
{% endblock %}