Files
rowt/templates/admin/user/merge.html.tera
Philipp Hofer 3fcf24958b
Some checks failed
CI/CD Pipeline / test (push) Has started running
CI/CD Pipeline / deploy-staging (push) Has been cancelled
CI/CD Pipeline / deploy-main (push) Has been cancelled
show all users on ranking board; be able to merge users
2026-01-08 20:14:57 +01:00

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">&larr; 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">
&rarr;
</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 %}