142 lines
8.3 KiB
Plaintext
142 lines
8.3 KiB
Plaintext
{% import "includes/macros" as macros %}
|
|
{% extends "base" %}
|
|
{% block content %}
|
|
<div class="max-w-screen-xl w-full">
|
|
<div class="mb-5 lg:mb-0">
|
|
<a href="/admin/user" class="link link-primary link-no-underline">← Userverwaltung</a>
|
|
</div>
|
|
<h1 class="h1">Benutzer zusammenführen</h1>
|
|
<p class="text-gray-600 dark:text-gray-300 mb-6">
|
|
Wähle zwei Benutzer aus: Der erste (Quelle) wird gelöscht und alle Daten werden zum zweiten (Ziel) übertragen.
|
|
</p>
|
|
|
|
<div class="grid lg:grid-cols-2 gap-6 mb-6">
|
|
<div class="bg-white dark:bg-primary-900 text-black dark:text-white rounded-md shadow p-4">
|
|
<h2 class="text-lg font-bold mb-3 text-red-600 dark:text-red-400">Quelle (wird gelöscht)</h2>
|
|
<form method="get" id="source-form">
|
|
{% if selected_target %}
|
|
<input type="hidden" name="target" value="{{ selected_target }}" />
|
|
{% endif %}
|
|
<select name="source" class="input rounded-md w-full" onchange="this.form.submit()">
|
|
<option value="">-- Benutzer auswählen --</option>
|
|
{% for user in users %}
|
|
<option value="{{ user.id }}" {% if selected_source == user.id %}selected{% endif %}>
|
|
{{ user.name }}{% if user.deleted %} [gelöscht]{% endif %} ({{ user.total_km }} km)
|
|
</option>
|
|
{% endfor %}
|
|
</select>
|
|
</form>
|
|
</div>
|
|
|
|
<div class="bg-white dark:bg-primary-900 text-black dark:text-white rounded-md shadow p-4">
|
|
<h2 class="text-lg font-bold mb-3 text-green-600 dark:text-green-400">Ziel (bleibt erhalten)</h2>
|
|
<form method="get" id="target-form">
|
|
{% if selected_source %}
|
|
<input type="hidden" name="source" value="{{ selected_source }}" />
|
|
{% endif %}
|
|
<select name="target" class="input rounded-md w-full" onchange="this.form.submit()">
|
|
<option value="">-- Benutzer auswählen --</option>
|
|
{% for user in users %}
|
|
<option value="{{ user.id }}" {% if selected_target == user.id %}selected{% endif %}>
|
|
{{ user.name }}{% if user.deleted %} [gelöscht]{% endif %} ({{ user.total_km }} km)
|
|
</option>
|
|
{% endfor %}
|
|
</select>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
|
|
{% if preview %}
|
|
<div class="bg-white dark:bg-primary-900 text-black dark:text-white rounded-md shadow p-6 mb-6">
|
|
<h2 class="text-lg font-bold mb-4">Vorschau der Änderungen</h2>
|
|
|
|
<div class="grid sm:grid-cols-3 gap-6 mb-6">
|
|
<div class="border border-red-300 dark:border-red-700 rounded-md p-4 bg-red-50 dark:bg-red-900/20">
|
|
<h3 class="font-semibold text-red-700 dark:text-red-400 mb-2">
|
|
{{ source_user.name }}
|
|
<span class="text-sm font-normal block">(wird gelöscht)</span>
|
|
</h3>
|
|
<ul class="text-sm space-y-1">
|
|
<li><strong>{{ preview.source_total_km }}</strong> km</li>
|
|
<li><strong>{{ preview.source_trip_count }}</strong> Ausfahrten</li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div class="flex items-center justify-center text-4xl text-gray-400">
|
|
→
|
|
</div>
|
|
|
|
<div class="border border-green-300 dark:border-green-700 rounded-md p-4 bg-green-50 dark:bg-green-900/20">
|
|
<h3 class="font-semibold text-green-700 dark:text-green-400 mb-2">
|
|
{{ target_user.name }}
|
|
<span class="text-sm font-normal block">(bleibt)</span>
|
|
</h3>
|
|
<ul class="text-sm space-y-1">
|
|
<li><strong>{{ preview.target_total_km }}</strong> km</li>
|
|
<li><strong>{{ preview.target_trip_count }}</strong> Ausfahrten</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="bg-blue-50 dark:bg-blue-900/20 border border-blue-200 dark:border-blue-700 rounded-md p-4 mb-4">
|
|
<h3 class="font-semibold mb-2">Nach Zusammenführung:</h3>
|
|
<p class="text-lg">
|
|
<strong>{{ target_user.name }}</strong> wird haben:
|
|
<strong>{{ preview.source_total_km + preview.target_total_km }}</strong> km,
|
|
<strong>{{ preview.source_trip_count + preview.target_trip_count - preview.rower_conflicts }}</strong> Ausfahrten
|
|
</p>
|
|
</div>
|
|
|
|
{% set total_to_transfer = preview.rower_entries_to_transfer + preview.role_entries_to_transfer + preview.user_trip_entries_to_transfer + preview.logbook_shipmaster_entries + preview.logbook_steering_entries %}
|
|
{% if total_to_transfer > 0 %}
|
|
<div class="mb-4">
|
|
<h3 class="font-semibold mb-2">Daten die übertragen werden:</h3>
|
|
<ul class="text-sm list-disc ml-6 space-y-1">
|
|
{% if preview.rower_entries_to_transfer > 0 %}
|
|
<li>{{ preview.rower_entries_to_transfer }} Ausfahrten</li>
|
|
{% endif %}
|
|
{% if preview.role_entries_to_transfer > 0 %}
|
|
<li>{{ preview.role_entries_to_transfer }} Rollen</li>
|
|
{% endif %}
|
|
{% if preview.logbook_shipmaster_entries > 0 %}
|
|
<li>{{ preview.logbook_shipmaster_entries }} Logbuch-Einträge (als Schiffsführer)</li>
|
|
{% endif %}
|
|
{% if preview.logbook_steering_entries > 0 %}
|
|
<li>{{ preview.logbook_steering_entries }} Logbuch-Einträge (als Steuerperson)</li>
|
|
{% endif %}
|
|
</ul>
|
|
</div>
|
|
{% endif %}
|
|
|
|
{% set total_conflicts = preview.rower_conflicts + preview.role_conflicts + preview.user_trip_conflicts %}
|
|
{% if total_conflicts > 0 %}
|
|
<div class="bg-yellow-50 dark:bg-yellow-900/20 border border-yellow-300 dark:border-yellow-700 rounded-md p-3 mb-4">
|
|
<p class="text-yellow-800 dark:text-yellow-300 font-semibold">
|
|
{{ total_conflicts }} doppelte Einträge werden entfernt
|
|
</p>
|
|
<ul class="text-sm text-yellow-700 dark:text-yellow-400 list-disc ml-6 mt-1">
|
|
{% if preview.rower_conflicts > 0 %}
|
|
<li>{{ preview.rower_conflicts }} Ausfahrten (beide waren im selben Boot)</li>
|
|
{% endif %}
|
|
{% if preview.role_conflicts > 0 %}
|
|
<li>{{ preview.role_conflicts }} Rollen (beide haben dieselbe Rolle)</li>
|
|
{% endif %}
|
|
</ul>
|
|
</div>
|
|
{% endif %}
|
|
|
|
<form action="/admin/user/merge" method="post" class="flex gap-4">
|
|
<input type="hidden" name="source_id" value="{{ source_user.id }}" />
|
|
<input type="hidden" name="target_id" value="{{ target_user.id }}" />
|
|
<a href="/admin/user/merge" class="btn btn-secondary flex-1 text-center">Abbrechen</a>
|
|
<button type="submit"
|
|
class="btn btn-alert flex-1"
|
|
onclick="return confirm('Bist du sicher? {{ source_user.name }} wird unwiderruflich gelöscht und alle Daten zu {{ target_user.name }} übertragen!')">
|
|
Zusammenführen
|
|
</button>
|
|
</form>
|
|
</div>
|
|
{% endif %}
|
|
</div>
|
|
{% endblock content %}
|