Internal Flask app that monitors the epi-helpdesk.zammad.com tickets via the Zammad API, deployable as a systemd service behind Apache under /episupport. Features: - Poller: session-login API sync, snapshot diff to detect agent changes (status, owner, priority, closures, new replies); email notifications - Dashboard: ticket overview with sorting, "not closed" filter and highlighting of tickets with unconfirmed changes; per-item and bulk "mark as read" - Analytics: KPIs, response/resolution times, monthly SVG trend chart, distributions (status/priority/group/agent), Excel export - Conversation view: full per-ticket thread cached in the DB (avoids proxy timeouts), inline image attachments, safe HTML-to-text rendering - Write actions: reply to tickets and create new tickets with a confirmation step and attachment upload (incl. clipboard paste); self-triggered actions are synced back so they aren't flagged as changes - Local timezone display (Europe/Berlin) for all timestamps Includes deploy tooling: setup.sh, systemd units and Apache config. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
29 lines
1.0 KiB
HTML
29 lines
1.0 KiB
HTML
{% extends "base.html" %}
|
|
{% block title %}Bestätigen · EPI-Support{% endblock %}
|
|
{% block content %}
|
|
|
|
<section class="panel confirm">
|
|
<div class="panel-head"><h2>{{ heading }}</h2></div>
|
|
<div class="confirm-body">
|
|
<p class="warn">⚠ {{ intro }}</p>
|
|
<div class="preview-box">{{ preview }}</div>
|
|
|
|
{% if attachments %}
|
|
<div class="attach-summary">
|
|
<strong>Anhänge ({{ attachments|length }}):</strong>
|
|
{% for name in attachments %}<span class="attach-chip">📎 {{ name }}</span>{% endfor %}
|
|
</div>
|
|
{% endif %}
|
|
|
|
<form method="post" action="{{ action_url }}" class="confirm-actions"
|
|
onsubmit="this.querySelector('button').disabled=true;">
|
|
{% for name, value in fields.items() %}
|
|
<input type="hidden" name="{{ name }}" value="{{ value }}">
|
|
{% endfor %}
|
|
<a class="btn-ghost" href="{{ cancel_url }}">Abbrechen</a>
|
|
<button class="btn-danger" type="submit">Verbindlich an EPI senden</button>
|
|
</form>
|
|
</div>
|
|
</section>
|
|
{% endblock %}
|