{% 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. {% endif %}
{% if current_user.has('licenses.create') %}
{% 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.edit')) }} {% endfor %}
{% endif %} {{ field('valid_days', 'Laufzeit (Tage)', value=ticket.valid_days, type='number', disabled=not current_user.has('tickets.edit')) }} {{ checkbox('lifetime', 'Unbefristet', checked=ticket.lifetime, disabled=not current_user.has('tickets.edit')) }} {{ 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.edit') %} {% endif %}
{% if current_user.has('tickets.edit') or current_user.has('tickets.delete') %}
{{ icon('lock', size=17) }} Sperre und Löschung
{% if current_user.has('tickets.edit') %}
{% endif %} {% if current_user.has('tickets.delete') %}
{% endif %}
{% endif %}
{% endblock %} {% block scripts %} {% if ticket.role == 'customer' %} {% endif %} {% endblock %}