Files
email_alerts/templates/settings.html
T

251 lines
12 KiB
HTML
Raw Normal View History

2025-07-25 11:31:36 +01:00
{% extends "base.html" %}
{% block title %}Settings - Email Alerts System{% endblock %}
{% block content %}
<div class="row">
<div class="col-12">
<h2 class="mb-4">
<i class="fas fa-cog me-2"></i>
System Settings
</h2>
</div>
</div>
<form method="POST" action="{{ url_for('update_settings') }}">
<div class="row">
<!-- Email Configuration -->
<div class="col-md-6">
<div class="card mb-4">
<div class="card-body">
<h5 class="card-title">
<i class="fas fa-envelope me-2"></i>
Email Configuration
</h5>
<div class="mb-3">
<label for="email_address" class="form-label">Email Address to Monitor</label>
<input type="email" class="form-control" id="email_address" name="email_address"
value="{{ config.email_address }}" required>
<div class="form-text">The email address that will be checked for new messages.</div>
</div>
<div class="mb-3">
<label for="email_days_back" class="form-label">Email Range (Days)</label>
<input type="number" class="form-control" id="email_days_back" name="email_days_back"
value="{{ config.email_days_back }}" min="1" max="365" required>
<div class="form-text">How many days back to check for emails (1-365 days).</div>
</div>
<div class="mb-3">
<label for="agency_domains" class="form-label">Agency Domains</label>
<textarea class="form-control" id="agency_domains" name="agency_domains" rows="3"
placeholder="projects@manaknightdigital.com, support@company.com">{{ config.agency_domains|join(', ') }}</textarea>
<div class="form-text">Comma-separated list of email domains that indicate agency responses.</div>
</div>
<div class="mb-3">
<div class="form-check">
<input class="form-check-input" type="checkbox" id="auto_process" name="auto_process"
{% if config.auto_process %}checked{% endif %}>
<label class="form-check-label" for="auto_process">
Enable Automatic Email Processing
</label>
</div>
<div class="form-text">Automatically process emails at regular intervals.</div>
</div>
<div class="mb-3">
<label for="auto_process_interval" class="form-label">Processing Interval (minutes)</label>
<input type="number" class="form-control" id="auto_process_interval" name="auto_process_interval"
value="{{ config.auto_process_interval }}" min="5" max="1440">
<div class="form-text">How often to automatically process emails (5-1440 minutes).</div>
</div>
</div>
</div>
</div>
<!-- Time Frames Configuration -->
<div class="col-md-6">
<div class="card mb-4">
<div class="card-body">
<h5 class="card-title">
<i class="fas fa-clock me-2"></i>
Alert Time Frames
</h5>
<p class="text-muted">Configure when alerts should be sent based on response time.</p>
<div id="time-frames-container">
{% for frame in config.time_frames %}
<div class="time-frame-row mb-3 p-3 border rounded">
<div class="row">
<div class="col-md-4">
<label class="form-label">Name</label>
<input type="text" class="form-control" name="frame_name[]"
value="{{ frame.name }}" placeholder="e.g., 1-24 hours">
</div>
<div class="col-md-3">
<label class="form-label">Hours</label>
<input type="number" class="form-control" name="frame_hours[]"
value="{{ frame.hours }}" min="1" max="720">
</div>
<div class="col-md-3">
<label class="form-label">Alert Level</label>
<select class="form-select" name="frame_level[]">
<option value="1" {% if frame.alert_level == 1 %}selected{% endif %}>Level 1 (Normal)</option>
<option value="2" {% if frame.alert_level == 2 %}selected{% endif %}>Level 2 (Urgent)</option>
<option value="3" {% if frame.alert_level == 3 %}selected{% endif %}>Level 3 (Critical)</option>
</select>
</div>
<div class="col-md-2 d-flex align-items-end">
<button type="button" class="btn btn-outline-danger btn-sm" onclick="removeTimeFrame(this)">
<i class="fas fa-trash"></i>
</button>
</div>
</div>
</div>
{% endfor %}
</div>
<button type="button" class="btn btn-outline-primary btn-sm" onclick="addTimeFrame()">
<i class="fas fa-plus me-2"></i>
Add Time Frame
</button>
</div>
</div>
</div>
</div>
<!-- Save Button -->
<div class="row">
<div class="col-12">
<div class="card">
<div class="card-body">
<div class="d-flex justify-content-between align-items-center">
<div>
<h6 class="mb-0">
<i class="fas fa-save me-2"></i>
Save Configuration
</h6>
<small class="text-muted">Click save to update all settings</small>
</div>
<button type="submit" class="btn btn-primary">
<i class="fas fa-save me-2"></i>
Save Settings
</button>
</div>
</div>
</div>
</div>
</div>
</form>
<!-- Configuration Preview -->
<div class="row mt-4">
<div class="col-12">
<div class="card">
<div class="card-body">
<h5 class="card-title">
<i class="fas fa-eye me-2"></i>
Current Configuration Preview
</h5>
<div class="row">
<div class="col-md-6">
<h6>Email Settings</h6>
<ul class="list-unstyled">
<li><strong>Email:</strong> <span id="preview-email">{{ config.email_address }}</span></li>
<li><strong>Range:</strong> <span id="preview-range">{{ config.email_days_back }}</span> days</li>
<li><strong>Domains:</strong> <span id="preview-domains">{{ config.agency_domains|join(', ') }}</span></li>
<li><strong>Auto Processing:</strong> <span id="preview-auto">{{ 'Enabled' if config.auto_process else 'Disabled' }}</span></li>
<li><strong>Interval:</strong> <span id="preview-interval">{{ config.auto_process_interval }}</span> minutes</li>
</ul>
</div>
<div class="col-md-6">
<h6>Time Frames</h6>
<div id="preview-frames">
{% for frame in config.time_frames %}
<div class="mb-1">
<span class="badge bg-primary me-2">{{ frame.name }}</span>
<small>{{ frame.hours }} hours (Level {{ frame.alert_level }})</small>
</div>
{% endfor %}
</div>
</div>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
{% block scripts %}
<script>
function addTimeFrame() {
const container = document.getElementById('time-frames-container');
const newFrame = document.createElement('div');
newFrame.className = 'time-frame-row mb-3 p-3 border rounded';
newFrame.innerHTML = `
<div class="row">
<div class="col-md-4">
<label class="form-label">Name</label>
<input type="text" class="form-control" name="frame_name[]"
placeholder="e.g., 1-24 hours">
</div>
<div class="col-md-3">
<label class="form-label">Hours</label>
<input type="number" class="form-control" name="frame_hours[]"
value="24" min="1" max="720">
</div>
<div class="col-md-3">
<label class="form-label">Alert Level</label>
<select class="form-select" name="frame_level[]">
<option value="1">Level 1 (Normal)</option>
<option value="2">Level 2 (Urgent)</option>
<option value="3">Level 3 (Critical)</option>
</select>
</div>
<div class="col-md-2 d-flex align-items-end">
<button type="button" class="btn btn-outline-danger btn-sm" onclick="removeTimeFrame(this)">
<i class="fas fa-trash"></i>
</button>
</div>
</div>
`;
container.appendChild(newFrame);
}
function removeTimeFrame(button) {
const frameRow = button.closest('.time-frame-row');
frameRow.remove();
}
// Update preview when form fields change
document.addEventListener('DOMContentLoaded', function() {
const emailInput = document.getElementById('email_address');
const rangeInput = document.getElementById('email_days_back');
const domainsInput = document.getElementById('agency_domains');
const autoProcessInput = document.getElementById('auto_process');
const intervalInput = document.getElementById('auto_process_interval');
emailInput.addEventListener('input', function() {
document.getElementById('preview-email').textContent = this.value;
});
rangeInput.addEventListener('input', function() {
document.getElementById('preview-range').textContent = this.value;
});
domainsInput.addEventListener('input', function() {
document.getElementById('preview-domains').textContent = this.value;
});
autoProcessInput.addEventListener('change', function() {
document.getElementById('preview-auto').textContent = this.checked ? 'Enabled' : 'Disabled';
});
intervalInput.addEventListener('input', function() {
document.getElementById('preview-interval').textContent = this.value;
});
});
</script>
{% endblock %}