{% extends "tesm_core/base.html" %} {% from "tesm_core/macros.html" import field, checkbox, textarea_field, pill, alert, empty_state %} {% block page_title %}Ticket {{ ticket.id[:12] }}…{% endblock %} {% block page_sub %} {{ ticket.customer_name }} · {{ type_labels.get(ticket.type, ticket.type) }} {% if ticket.role != 'customer' %}· {{ role_labels.get(ticket.role, ticket.role) }}{% endif %} {% endblock %} {% block breadcrumb %} {% endblock %} {% block content %} {% if endpoint_missing %} {{ alert(endpoint_missing, 'danger', 'Keine Ausstellung möglich') }} {% endif %} {% if ticket.status == 'blocked' %} {{ alert('Dieses Ticket ist gesperrt. Es lassen sich keine neuen Lizenzen ausstellen -- weder hier noch über den Self-Service des Kunden. Bereits ausgestellte Lizenzen bleiben gültig.', 'danger', 'Gesperrt') }} {% endif %}
{{ icon('shield', size=17) }} Lizenz ausstellen
{% if has_open_license %} Es existiert bereits eine offene Lizenz – widerrufen Sie sie zuerst. {% else %} Erzeugt eine signierte Lizenzdatei mit den Werten dieses Tickets. Die Laufzeit kommt aus dem Ticket und kann später nur mit ihm verlängert werden. {% endif %}
{% if current_user.has('license_issue.execute') %}
{% if ticket.role == 'customer' %}
{% endif %} {% else %}

Ihnen fehlt das Recht, Lizenzen auszustellen.

{% endif %}
{{ icon('history', size=17) }} Lizenzen dieses Tickets
{{ licenses | length }} insgesamt
{% if licenses %}
{% for entry in licenses %} {% endfor %}
LizenzAusgestelltZustandLäuft abHost
{{ entry.license_id[:12] }}… {% if entry.type != ticket.type %}{{ pill(entry.type, 'accent') }}{% endif %} {{ entry.issued_at | dt }} {% if entry.status == 'active' %}{{ pill('aktiv', 'online') }} {% elif entry.status == 'issued' %}{{ pill('ausgestellt', 'info') }} {% elif entry.status == 'revoked' %}{{ pill('widerrufen', 'danger') }} {% else %}{{ pill('deaktiviert', '') }}{% endif %} {% if entry.lifetime %}unbefristet{% else %}{{ entry.expires_at | date }}{% endif %} {{ entry.hostname or '–' | safe }}
{% else %} {{ empty_state('Noch keine Lizenz', 'Stellen Sie die erste Lizenz aus.', 'shield') }} {% endif %}
{% if self_service_url %}
{{ icon('link', size=17) }} Self-Service für den Kunden
Ohne Anmeldung nutzbar – die Berechtigung ist der Besitz dieses Links

Damit kann der Kunde seine Lizenz herunterladen, bei einem Systemwechsel freigeben und neu ausstellen. Der Link enthält 192 Bit Zufall und ist nicht ratbar – behandeln Sie ihn wie ein Passwort.

Kundenportal: der Kunde fordert dort selbst einen zeitlich begrenzten Zugangslink an und pflegt seine Stammdaten.

{% elif ticket.role != 'customer' %} {{ alert('Für Lizenzserver-Tickets ist der Self-Service vollständig gesperrt -- diese Lizenzen werden ausschliesslich hier verwaltet.', 'info') }} {% endif %}
{{ icon('sliders', size=17) }} Ticketdaten
{% if ticket.status == 'blocked' %}{{ pill('gesperrt', 'danger') }} {% else %}{{ pill('offen', 'online') }}{% endif %}
{{ alert('Änderungen wirken auf die nächste Ausstellung. Kunde und Rolle sind unveränderlich.', 'info') }} {% if ticket.role == 'customer' %}
Module
{% for module in modules %} {{ checkbox('modules', module_labels[module], value=module, checked=module in ticket_modules, disabled=not current_user.has('tickets.write')) }} {% endfor %}
{% endif %} {{ field('valid_days', 'Laufzeit (Tage)', value=ticket.valid_days, type='number', hint_text='Gesamtlaufzeit ab Ausstellung. Aufschlagen geht unten.', disabled=not current_user.has('tickets.write')) }} {{ checkbox('lifetime', 'Unbefristet', checked=ticket.lifetime, disabled=not current_user.has('tickets.write')) }} {{ textarea_field('notes', 'Interne Notiz', value=ticket.notes, rows=2) }}
Ticket-ID
{{ ticket.id }}
Rolle
{{ role_labels.get(ticket.role, ticket.role) }}
Angelegt
{{ ticket.created_at | dt }} von {{ ticket.created_by or '-' }}
{% if current_user.has('tickets.write') %} {% endif %}
{# Dasselbe Bedienmuster wie bei der Lizenz: wer verlängert, rechnet in Tagen ab jetzt und nicht in einer neuen Gesamtzahl, die er sich erst aus dem alten Wert zusammensuchen muss. Und weil das Ticket der Anspruch ist, zieht die laufende Lizenz gleich mit. #} {% if current_user.has('tickets.write') and not ticket.lifetime %}
{{ icon('clock', size=17) }} Laufzeit verlängern
Schlägt Tage auf die {{ ticket.valid_days }} Tage dieses Tickets auf. Eine laufende Lizenz wird dabei mitverlängert – sie erhält eine neue Revision und übernimmt sie beim nächsten Heartbeat.
{{ field('days', 'Verlängern um (Tage)', type='number', placeholder='30') }}
{% endif %} {% if current_user.has('tickets.write') or current_user.has('tickets.delete') %}
{{ icon('lock', size=17) }} Sperre und Löschung
{% if current_user.has('tickets.write') %}
{% endif %} {% if current_user.has('tickets.delete') %}
{% endif %}
{% endif %}
{% endblock %} {% block scripts %} {% if ticket.role == 'customer' %} {% endif %} {% endblock %}