snapshot: preserve integrations controls and status UX cleanup
This commit is contained in:
@@ -67,14 +67,28 @@
|
||||
<td>
|
||||
{% if row.target_label %}
|
||||
{{ row.target_label }}
|
||||
{% if row.target_id %}<div class="hint">#{{ row.target_id }}</div>{% endif %}
|
||||
{% elif row.target_id %}
|
||||
#{{ row.target_id }}
|
||||
<span class="hint">ID {{ row.target_id }}</span>
|
||||
{% else %}
|
||||
-
|
||||
{% endif %}
|
||||
</td>
|
||||
<td><code>{{ row.details|default:"{}" }}</code></td>
|
||||
<td>
|
||||
{% if row.details.request_labels %}
|
||||
<div class="hint">{% trans "Betroffene Vorgänge" %}</div>
|
||||
<ul class="hint" style="margin:6px 0 10px 18px; padding:0;">
|
||||
{% for label in row.details.request_labels %}
|
||||
<li>{{ label }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
{% if row.details.deleted_count %}<div class="hint">{% trans "Gelöscht" %}: {{ row.details.deleted_count }}</div>{% endif %}
|
||||
{% if row.details.invalid_count %}<div class="hint">{% trans "Ungültig" %}: {{ row.details.invalid_count }}</div>{% endif %}
|
||||
{% if row.details.result %}<div class="hint">{% trans "Ergebnis" %}: {{ row.details.result }}</div>{% endif %}
|
||||
{% if not row.details.request_labels and not row.details.deleted_count and not row.details.invalid_count and not row.details.result %}
|
||||
<code>{{ row.details|default:"{}" }}</code>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% empty %}
|
||||
<tr>
|
||||
|
||||
@@ -35,14 +35,14 @@
|
||||
<h1>{% trans "TUBCO Onboarding & Offboarding Portal" %}</h1>
|
||||
<p>{% trans "Zentrale Arbeitsfläche für Anfragen, PDF-Generierung, E-Mail-Workflows und Ablage in Nextcloud." %}</p>
|
||||
<div class="status-row">
|
||||
<span class="status-pill">{% trans "Rolle:" %} {% if request.user.is_staff %}{% trans "Admin" %}{% else %}{% trans "Mitarbeiter" %}{% endif %}</span>
|
||||
<span class="status-pill status-pill-neutral">{% trans "Rolle:" %} {% if request.user.is_staff %}{% trans "Admin" %}{% else %}{% trans "Mitarbeiter" %}{% endif %}</span>
|
||||
<span class="status-pill {% if nextcloud_enabled %}ok{% else %}warn{% endif %}">
|
||||
{% trans "Nextcloud:" %} {% if nextcloud_enabled %}{% trans "aktiv" %}{% else %}{% trans "inaktiv" %}{% endif %}
|
||||
</span>
|
||||
<span class="status-pill {% if email_test_mode %}warn{% else %}ok{% endif %}">
|
||||
{% trans "E-Mail:" %} {% if email_test_mode %}{% trans "Testmodus" %}{% else %}{% trans "Produktion" %}{% endif %}
|
||||
</span>
|
||||
<span class="status-pill">{% trans "PDF + E-Mail Workflow bereit" %}</span>
|
||||
<span class="status-pill status-pill-neutral">{% trans "PDF + E-Mail Workflow bereit" %}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -116,6 +116,21 @@
|
||||
</div>
|
||||
<div class="admin-grid">
|
||||
<section class="admin-card">
|
||||
<h3>{% trans "Integrationen" %}</h3>
|
||||
<p>{% trans "Nextcloud- und E-Mail-Setup." %}</p>
|
||||
<a class="btn btn-secondary" href="/admin-tools/integrations/?kind=nextcloud">{% trans "Öffnen" %}</a>
|
||||
</section>
|
||||
<section class="admin-card">
|
||||
<h3>{% trans "Audit Log" %}</h3>
|
||||
<p>{% trans "Wichtige Admin-Aktionen nachvollziehen und prüfen." %}</p>
|
||||
<a class="btn btn-secondary" href="/admin-tools/audit-log/">{% trans "Öffnen" %}</a>
|
||||
</section>
|
||||
<section class="admin-card">
|
||||
<h3>{% trans "Welcome E-Mails" %}</h3>
|
||||
<p>{% trans "Geplante Welcome Mails verwalten." %}</p>
|
||||
<a class="btn btn-secondary" href="/admin-tools/welcome-emails/">{% trans "Öffnen" %}</a>
|
||||
</section>
|
||||
<section class="admin-card">
|
||||
<h3>{% trans "Form Builder" %}</h3>
|
||||
<p>{% trans "Felder, Schritte und Optionen verwalten." %}</p>
|
||||
<a class="btn btn-secondary" href="/admin-tools/form-builder/">{% trans "Öffnen" %}</a>
|
||||
@@ -131,64 +146,10 @@
|
||||
<a class="btn btn-secondary" href="/admin-tools/handbook/">{% trans "Öffnen" %}</a>
|
||||
</section>
|
||||
<section class="admin-card">
|
||||
<h3>{% trans "Audit Log" %}</h3>
|
||||
<p>{% trans "Wichtige Admin-Aktionen nachvollziehen und prüfen." %}</p>
|
||||
<a class="btn btn-secondary" href="/admin-tools/audit-log/">{% trans "Öffnen" %}</a>
|
||||
</section>
|
||||
<section class="admin-card">
|
||||
<h3>{% trans "Integrationen" %}</h3>
|
||||
<p>{% trans "Nextcloud- und E-Mail-Setup." %}</p>
|
||||
<a class="btn btn-secondary" href="/admin-tools/integrations/?kind=nextcloud">{% trans "Öffnen" %}</a>
|
||||
</section>
|
||||
<section class="admin-card">
|
||||
<h3>{% trans "Welcome E-Mails" %}</h3>
|
||||
<p>{% trans "Geplante Welcome Mails verwalten." %}</p>
|
||||
<a class="btn btn-secondary" href="/admin-tools/welcome-emails/">{% trans "Öffnen" %}</a>
|
||||
</section>
|
||||
<section class="admin-card">
|
||||
<h3>{% trans "Django Admin" %}</h3>
|
||||
<p>{% trans "Vollständige Datenverwaltung." %}</p>
|
||||
<a class="btn btn-secondary" href="/admin/">{% trans "Öffnen" %}</a>
|
||||
</section>
|
||||
<section class="admin-card">
|
||||
<h3>SMTP Einstellungen</h3>
|
||||
<p>Server und Absender in der Backend-UI.</p>
|
||||
<a class="btn btn-secondary" href="/admin/workflows/systememailconfig/">Öffnen</a>
|
||||
</section>
|
||||
<section class="admin-card">
|
||||
<h3>Nextcloud schalten</h3>
|
||||
<p>Aktiv/Inaktiv direkt umschalten.</p>
|
||||
<form method="post" action="/admin-tools/nextcloud/toggle/" style="display:inline;">
|
||||
{% csrf_token %}
|
||||
<button class="btn btn-secondary" type="submit">
|
||||
{% if nextcloud_enabled %}Deaktivieren{% else %}Aktivieren{% endif %}
|
||||
</button>
|
||||
</form>
|
||||
</section>
|
||||
<section class="admin-card">
|
||||
<h3>E-Mail Modus</h3>
|
||||
<p>Zwischen Testmodus und Produktion wechseln.</p>
|
||||
<form method="post" action="/admin-tools/email-mode/toggle/" style="display:inline;">
|
||||
{% csrf_token %}
|
||||
<button class="btn btn-secondary" type="submit">
|
||||
Auf {% if email_test_mode %}Produktion{% else %}Testmodus{% endif %}
|
||||
</button>
|
||||
</form>
|
||||
</section>
|
||||
<section class="admin-card">
|
||||
<h3>Verbindungstests</h3>
|
||||
<p>Testupload und Testmail auslösen.</p>
|
||||
<div class="card-actions">
|
||||
<form method="post" action="/test/nextcloud/" style="display:inline;">
|
||||
{% csrf_token %}
|
||||
<button class="btn btn-secondary" type="submit">Nextcloud-Test</button>
|
||||
</form>
|
||||
<form method="post" action="/test/email/" style="display:inline;">
|
||||
{% csrf_token %}
|
||||
<button class="btn btn-secondary" type="submit">SMTP-Test</button>
|
||||
</form>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
<a class="tab {% if kind == 'nextcloud' %}active{% endif %}" href="/admin-tools/integrations/?kind=nextcloud">{% trans "Setup Nextcloud" %}</a>
|
||||
<a class="tab {% if kind == 'mail' %}active{% endif %}" href="/admin-tools/integrations/?kind=mail">{% trans "Setup Mail" %}</a>
|
||||
<a class="tab {% if kind == 'emails' %}active{% endif %}" href="/admin-tools/integrations/?kind=emails">{% trans "E-Mail Routing & Vorlagen" %}</a>
|
||||
<a class="tab {% if kind == 'rules' %}active{% endif %}" href="/admin-tools/integrations/?kind=rules">{% trans "Workflow-Regeln" %}</a>
|
||||
</div>
|
||||
|
||||
{% if messages %}
|
||||
@@ -29,6 +30,7 @@
|
||||
{% if kind == 'nextcloud' %}
|
||||
<form class="card" method="post" action="/admin-tools/integrations/save-nextcloud/">
|
||||
{% csrf_token %}
|
||||
<input type="hidden" name="next" value="/admin-tools/integrations/?kind=nextcloud" />
|
||||
<div class="grid">
|
||||
<div>
|
||||
<label for="nc_base">NEXTCLOUD_BASE_URL</label>
|
||||
@@ -53,14 +55,32 @@
|
||||
</div>
|
||||
<div class="actions">
|
||||
<button class="btn btn-primary" type="submit">{% trans "Nextcloud speichern" %}</button>
|
||||
<button class="btn btn-secondary" type="submit" formaction="/test/nextcloud/">{% trans "Nextcloud-Test starten" %}</button>
|
||||
</div>
|
||||
<div class="toggle-row">
|
||||
<span class="toggle-copy">
|
||||
<span class="toggle-label">{% trans "Status:" %}</span>
|
||||
<span class="toggle-value">{% if nextcloud_enabled %}{% trans "aktiv" %}{% else %}{% trans "inaktiv" %}{% endif %}</span>
|
||||
</span>
|
||||
<button class="switch-toggle {% if nextcloud_enabled %}on{% else %}off{% endif %}" type="submit" form="toggle-nextcloud-form" aria-label="{% trans 'Nextcloud schalten' %}">
|
||||
<span class="switch-track">
|
||||
<span class="switch-thumb"></span>
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="hint">{% trans "Schaltet den produktiven Nextcloud-Upload sofort für alle nachfolgenden Vorgänge ein oder aus." %}</div>
|
||||
<div class="hint">{% trans "Leeres Passwortfeld lässt das bestehende Passwort unverändert." %}</div>
|
||||
</form>
|
||||
<form id="toggle-nextcloud-form" method="post" action="/admin-tools/nextcloud/toggle/">
|
||||
{% csrf_token %}
|
||||
<input type="hidden" name="next" value="/admin-tools/integrations/?kind=nextcloud" />
|
||||
</form>
|
||||
{% endif %}
|
||||
|
||||
{% if kind == 'mail' %}
|
||||
<form class="card" method="post" action="/admin-tools/integrations/save-mail/">
|
||||
{% csrf_token %}
|
||||
<input type="hidden" name="next" value="/admin-tools/integrations/?kind=mail" />
|
||||
<div class="grid">
|
||||
<div>
|
||||
<label for="imap_server">IMAP_SERVER</label>
|
||||
@@ -86,6 +106,10 @@
|
||||
<label for="email_password">PASSWORD</label>
|
||||
<input id="email_password" name="email_password" type="password" placeholder="Leer lassen = unverändert" />
|
||||
</div>
|
||||
<div>
|
||||
<label for="from_email">{% trans "Absenderadresse" %}</label>
|
||||
<input id="from_email" name="from_email" value="{% if system_email_config %}{{ system_email_config.from_email }}{% endif %}" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="check-row">
|
||||
<label><input type="checkbox" name="smtp_use_ssl" {% if workflow_config.smtp_use_ssl %}checked{% endif %} /> {% trans "SMTP SSL" %}</label>
|
||||
@@ -93,9 +117,26 @@
|
||||
</div>
|
||||
<div class="actions">
|
||||
<button class="btn btn-primary" type="submit">{% trans "Mail speichern" %}</button>
|
||||
<button class="btn btn-secondary" type="submit" formaction="/test/email/">{% trans "SMTP-Test starten" %}</button>
|
||||
</div>
|
||||
<div class="toggle-row">
|
||||
<span class="toggle-copy">
|
||||
<span class="toggle-label">{% trans "Status:" %}</span>
|
||||
<span class="toggle-value">{% if email_test_mode %}{% trans "Testmodus" %}{% else %}{% trans "Produktion" %}{% endif %}</span>
|
||||
</span>
|
||||
<button class="switch-toggle {% if email_test_mode %}off{% else %}on{% endif %}" type="submit" form="toggle-email-mode-form" aria-label="{% trans 'E-Mail Modus schalten' %}">
|
||||
<span class="switch-track">
|
||||
<span class="switch-thumb"></span>
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="hint">{% trans "Im Testmodus werden Systemmails umgeleitet. In Produktion werden sie an die echten Empfänger gesendet." %}</div>
|
||||
<div class="hint">{% trans "Leeres Passwortfeld lässt das bestehende Passwort unverändert." %}</div>
|
||||
</form>
|
||||
<form id="toggle-email-mode-form" method="post" action="/admin-tools/email-mode/toggle/">
|
||||
{% csrf_token %}
|
||||
<input type="hidden" name="next" value="/admin-tools/integrations/?kind=mail" />
|
||||
</form>
|
||||
{% endif %}
|
||||
|
||||
{% if kind == 'emails' %}
|
||||
@@ -302,5 +343,28 @@
|
||||
</div>
|
||||
</form>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% if kind == 'rules' %}
|
||||
<form class="card" method="post" action="/admin-tools/integrations/save-workflow-rules/">
|
||||
{% csrf_token %}
|
||||
<div class="grid">
|
||||
<div>
|
||||
<label for="device_handover_lead_days">{% trans "Vorlauf Hardware-Übergabe (Tage)" %}</label>
|
||||
<input
|
||||
id="device_handover_lead_days"
|
||||
name="device_handover_lead_days"
|
||||
type="number"
|
||||
min="0"
|
||||
step="1"
|
||||
value="{{ workflow_config.device_handover_lead_days }}"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="actions">
|
||||
<button class="btn btn-primary" type="submit">{% trans "Workflow-Regeln speichern" %}</button>
|
||||
</div>
|
||||
<div class="hint">{% trans "Steuert den Mindestvorlauf für das gewünschte Übergabedatum der Geräte im Onboarding-Formular." %}</div>
|
||||
</form>
|
||||
{% endif %}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
134
backend/workflows/templates/workflows/request_timeline.html
Normal file
134
backend/workflows/templates/workflows/request_timeline.html
Normal file
@@ -0,0 +1,134 @@
|
||||
{% extends 'workflows/base_shell.html' %}
|
||||
{% load static i18n %}
|
||||
|
||||
{% block title %}{% trans "Request Timeline" %}{% endblock %}
|
||||
|
||||
{% block extra_css %}
|
||||
<link rel="stylesheet" href="{% static 'workflows/css/admin_tools.css' %}" />
|
||||
<style>
|
||||
.timeline-summary-grid { display:grid; grid-template-columns:repeat(5, minmax(0,1fr)); gap:16px; margin-bottom:20px; }
|
||||
.timeline-stat { border:1px solid #d9e3f8; border-radius:20px; padding:16px 18px; background:linear-gradient(180deg,#ffffff 0%,#f7faff 100%); box-shadow:0 18px 40px rgba(23,39,90,.08); }
|
||||
.timeline-stat label { display:block; margin-bottom:6px; font-size:12px; font-weight:700; letter-spacing:.08em; text-transform:uppercase; color:#7081a5; }
|
||||
.timeline-stat strong { display:block; font-size:18px; line-height:1.35; color:#20345f; }
|
||||
.timeline-list { position:relative; display:grid; gap:18px; padding-left:28px; }
|
||||
.timeline-list::before { content:""; position:absolute; top:6px; bottom:6px; left:11px; width:2px; background:linear-gradient(180deg,#cad8f8 0%,#e8eefc 100%); }
|
||||
.timeline-item { position:relative; border:1px solid #d9e3f8; border-radius:20px; padding:18px 20px 18px 22px; background:#fff; box-shadow:0 18px 40px rgba(23,39,90,.08); }
|
||||
.timeline-item::before { content:""; position:absolute; top:22px; left:-24px; width:16px; height:16px; border-radius:999px; background:#1e2bb8; box-shadow:0 0 0 4px #eef3ff; }
|
||||
.timeline-item[data-kind="document"]::before { background:#1f7a45; }
|
||||
.timeline-item[data-kind="audit"]::before { background:#6a5acd; }
|
||||
.timeline-item[data-kind="session"]::before { background:#b86b12; }
|
||||
.timeline-item[data-kind="email"]::before { background:#c2354e; }
|
||||
.timeline-item[data-kind="milestone"]::before { background:#0d7c88; }
|
||||
.timeline-head { display:flex; justify-content:space-between; gap:16px; align-items:flex-start; margin-bottom:8px; }
|
||||
.timeline-title-wrap { display:grid; gap:8px; }
|
||||
.timeline-kind { display:inline-flex; align-items:center; width:max-content; padding:6px 10px; border-radius:999px; font-size:12px; font-weight:700; letter-spacing:.06em; text-transform:uppercase; background:#eef3ff; color:#27407a; }
|
||||
.timeline-item[data-kind="document"] .timeline-kind { background:#edf8f0; color:#20623c; }
|
||||
.timeline-item[data-kind="audit"] .timeline-kind { background:#f2efff; color:#5b49aa; }
|
||||
.timeline-item[data-kind="session"] .timeline-kind { background:#fff2df; color:#8a560a; }
|
||||
.timeline-item[data-kind="email"] .timeline-kind { background:#ffe8ee; color:#9f2749; }
|
||||
.timeline-item[data-kind="milestone"] .timeline-kind { background:#e8fbfd; color:#0e6a72; }
|
||||
.timeline-stamp { font-size:13px; color:#6b7a9b; white-space:nowrap; }
|
||||
.timeline-title { margin:0; font-size:20px; color:#20345f; }
|
||||
.timeline-summary { margin:0; font-size:15px; color:#22324d; line-height:1.55; }
|
||||
.timeline-meta { display:flex; gap:8px; flex-wrap:wrap; margin-top:12px; }
|
||||
.timeline-chip { display:inline-flex; align-items:center; padding:6px 10px; border-radius:999px; background:#f7faff; border:1px solid #d8e1f5; color:#4d6087; font-size:12px; }
|
||||
.timeline-actions { margin-top:14px; }
|
||||
.timeline-details { margin-top:14px; padding-top:14px; border-top:1px dashed #d7e0f5; display:grid; gap:8px; }
|
||||
.timeline-detail-row { display:grid; grid-template-columns:160px 1fr; gap:12px; font-size:13px; }
|
||||
.timeline-detail-row strong { color:#566886; }
|
||||
.timeline-detail-list { margin:0; padding-left:18px; color:#4f617f; }
|
||||
@media (max-width: 1160px) { .timeline-summary-grid { grid-template-columns:repeat(3, minmax(0,1fr)); } }
|
||||
@media (max-width: 820px) { .timeline-summary-grid { grid-template-columns:repeat(2, minmax(0,1fr)); } }
|
||||
@media (max-width: 700px) { .timeline-summary-grid { grid-template-columns:1fr; } .timeline-head { flex-direction:column; } .timeline-stamp { white-space:normal; } .timeline-detail-row { grid-template-columns:1fr; } }
|
||||
</style>
|
||||
{% endblock %}
|
||||
|
||||
{% block shell_body %}
|
||||
{% include 'workflows/includes/app_header.html' with header_show_home=1 header_show_dashboard=1 header_inside_shell=1 %}
|
||||
|
||||
<div class="toolbar">
|
||||
<div>
|
||||
<h1>{% trans "Request Timeline" %}</h1>
|
||||
<p class="sub">{{ request_label }}</p>
|
||||
</div>
|
||||
<div class="actions">
|
||||
<a class="btn btn-secondary" href="/requests/">{% trans "Zum Dashboard" %}</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="timeline-summary-grid">
|
||||
<div class="timeline-stat">
|
||||
<label>{% trans "Typ" %}</label>
|
||||
<strong>{{ request_kind|capfirst }}</strong>
|
||||
</div>
|
||||
<div class="timeline-stat">
|
||||
<label>{% trans "Name" %}</label>
|
||||
<strong>{{ request_obj.full_name }}</strong>
|
||||
</div>
|
||||
<div class="timeline-stat">
|
||||
<label>{% trans "Status" %}</label>
|
||||
<strong>{{ request_obj.get_processing_status_display }}</strong>
|
||||
</div>
|
||||
<div class="timeline-stat">
|
||||
<label>{% trans "E-Mail" %}</label>
|
||||
<strong>{{ request_obj.work_email }}</strong>
|
||||
</div>
|
||||
<div class="timeline-stat">
|
||||
<label>{% trans "Hardware-Übergabetermin" %}</label>
|
||||
<strong>{% if handover_date %}{{ handover_date|date:"Y-m-d" }}{% else %}-{% endif %}</strong>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="timeline-list">
|
||||
{% for row in timeline_rows %}
|
||||
<article class="timeline-item" data-kind="{{ row.kind }}">
|
||||
<div class="timeline-head">
|
||||
<div class="timeline-title-wrap">
|
||||
<span class="timeline-kind">{{ row.kind }}</span>
|
||||
<h2 class="timeline-title">{{ row.title }}</h2>
|
||||
</div>
|
||||
<div class="timeline-stamp">{{ row.created_at|date:"Y-m-d H:i:s" }}</div>
|
||||
</div>
|
||||
|
||||
<p class="timeline-summary">{{ row.summary }}</p>
|
||||
|
||||
{% if row.meta %}
|
||||
<div class="timeline-meta">
|
||||
<span class="timeline-chip">{{ row.meta }}</span>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if row.url %}
|
||||
<div class="timeline-actions">
|
||||
<a class="btn btn-secondary" href="{{ row.url }}" target="_blank" rel="noopener">{% trans "PDF öffnen" %}</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if row.details %}
|
||||
<div class="timeline-details">
|
||||
{% for key, value in row.details.items %}
|
||||
<div class="timeline-detail-row">
|
||||
<strong>{{ key }}</strong>
|
||||
<div>
|
||||
{% if key == 'request_labels' and value %}
|
||||
<ul class="timeline-detail-list">
|
||||
{% for item in value %}
|
||||
<li>{{ item }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% else %}
|
||||
{{ value }}
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
</article>
|
||||
{% empty %}
|
||||
<div class="empty-state">{% trans "Noch keine Timeline-Einträge vorhanden." %}</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
@@ -134,7 +134,6 @@
|
||||
{% endif %}
|
||||
</div>
|
||||
</form>
|
||||
<div class="search-help">{% trans "Datensätze können direkt in der Tabelle gefiltert, geöffnet, geprüft oder gelöscht werden." %}</div>
|
||||
</div>
|
||||
{% if request.user.is_staff %}
|
||||
<div class="control-stack">
|
||||
@@ -157,7 +156,6 @@
|
||||
<th>{% trans "Typ" %}</th>
|
||||
<th>{% trans "Person" %}</th>
|
||||
<th>{% trans "E-Mail" %}</th>
|
||||
<th>{% trans "Erstellt" %}</th>
|
||||
<th>{% trans "Dokument" %}</th>
|
||||
{% if request.user.is_staff %}<th>{% trans "Einweisung" %}</th>{% endif %}
|
||||
{% if request.user.is_staff %}<th>{% trans "Aktion" %}</th>{% endif %}
|
||||
@@ -182,16 +180,17 @@
|
||||
<td>
|
||||
<a class="mail-link" href="mailto:{{ row.work_email }}">{{ row.work_email }}</a>
|
||||
</td>
|
||||
<td>{{ row.created_at|date:"Y-m-d H:i" }}</td>
|
||||
<td>
|
||||
{% if row.pdf_url %}
|
||||
<a class="doc-link" href="{{ row.pdf_url }}" target="_blank" rel="noopener">{% trans "PDF öffnen" %}</a>
|
||||
{% else %}
|
||||
<span class="person-meta">{% trans "Noch nicht verfügbar" %}</span>
|
||||
{% endif %}
|
||||
<div class="person-meta" style="margin-top:8px;">{{ row.status }}</div>
|
||||
{% if row.status_key == 'failed' and row.last_error %}
|
||||
{% if row.status_key == 'failed' %}
|
||||
<div class="person-meta" style="margin-top:8px; color:#8e1e1e;">{% trans "Fehlgeschlagen" %}</div>
|
||||
{% if row.last_error %}
|
||||
<div class="person-meta" style="margin-top:6px; color:#8e1e1e;">{{ row.last_error|truncatechars:140 }}</div>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</td>
|
||||
{% if request.user.is_staff %}
|
||||
@@ -236,6 +235,7 @@
|
||||
{% endif %}
|
||||
</td>
|
||||
<td class="actions-cell">
|
||||
<a class="btn btn-secondary" href="/requests/timeline/{{ row.kind_slug }}/{{ row.id }}/">{% trans "Timeline" %}</a>
|
||||
{% if row.status_key == 'failed' %}
|
||||
<form method="post" action="/requests/retry/{{ row.kind_slug }}/{{ row.id }}/" class="inline-delete" onsubmit="return confirm('Eintrag erneut verarbeiten?');">
|
||||
{% csrf_token %}
|
||||
|
||||
Reference in New Issue
Block a user