Files
Assetmanager/app/templates/assets_import.html
T

84 lines
3.3 KiB
HTML

{% extends "base.html" %}
{% block content %}
<div class="toolbar">
<h1>{{ t('assets.import_title') }}</h1>
<div class="toolbar-actions"><a class="button button-secondary" href="/assets">← Zur Asset-Liste</a></div>
</div>
<section class="panel">
<form method="post" action="/assets/import" enctype="multipart/form-data">
<label>Kategorie
<select name="category_id" required>
{% for category in categories %}
<option value="{{ category.id }}" {% if selected and selected.id == category.id %}selected{% endif %}>{{ category.name }}</option>
{% endfor %}
</select>
</label>
{% if selected %}
<p><a class="button button-secondary" href="/assets/import/template.xlsx?category_id={{ selected.id }}">{{ t('assets.import_template') }}</a></p>
{% endif %}
<label>Excel-Datei
<input type="file" name="file" accept=".xlsx" required>
</label>
<label class="checkbox-label">
<input class="checkbox" type="checkbox" name="import_only_active_fields" {% if import_only_active_fields %}checked{% endif %}>
Import only active fields
</label>
<p class="muted">
Standardmäßig werden alle bekannten und für den Excel-Import freigegebenen Felder übernommen,
auch wenn sie in der jeweiligen Kategorie nicht aktiv oder sichtbar sind.
Aktiviere diese Option nur, wenn der Import auf die aktiven Felder der Kategorie begrenzt werden soll.
</p>
<div class="form-actions">
<button type="submit" class="button button-secondary" name="import_mode" value="dry_run">🧪 Test-Import</button>
<button type="submit" class="button button-save" name="import_mode" value="import">{{ t('assets.import_start') }}</button>
</div>
<p class="muted">Der Test-Import prüft dieselbe Datei mit derselben Logik, führt aber am Ende einen vollständigen Datenbank-Rollback durch.</p>
</form>
</section>
{% if result %}
<section class="panel">
<h2>{% if result.dry_run %}Ergebnis des Test-Imports{% else %}Importergebnis{% endif %}</h2>
{% if result.dry_run %}
<div class="notice"><strong>Testlauf:</strong> Es wurden keine Daten gespeichert. Die Zähler und Zeilenergebnisse zeigen, was ein echter Import ausführen würde.</div>
{% endif %}
<dl class="config-list">
<dt>Neu angelegt</dt><dd>{{ result.created }}</dd>
<dt>Aktualisiert</dt><dd>{{ result.updated }}</dd>
<dt>Unverändert</dt><dd>{{ result.skipped }}</dd>
</dl>
{% if result.unknown_headers %}
<h3>Nicht erkannte Spalten</h3>
<p>{{ result.unknown_headers|join(', ') }}</p>
{% endif %}
{% if result.row_results %}
<h3>Ergebnis je Excel-Zeile</h3>
<div class="table-scroll">
<table class="data-table">
<thead><tr><th>Excel-Zeile</th><th>Asset-ID</th><th>Aktion</th><th>Begründung</th></tr></thead>
<tbody>
{% for row in result.row_results %}
<tr>
<td>{{ row.row }}</td>
<td>{{ row.asset_id }}</td>
<td>{{ row.action }}</td>
<td>{{ row.reason }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endif %}
{% if result.errors %}
<h3>Fehlerübersicht</h3>
<ul>{% for error in result.errors %}<li>{{ error }}</li>{% endfor %}</ul>
{% endif %}
</section>
{% endif %}
{% endblock %}