216 lines
10 KiB
HTML
Executable File
216 lines
10 KiB
HTML
Executable File
{% extends "admin/base.html" %}
|
|
{% block title %}Kunde bearbeiten: {{ customer.display_name }}{% endblock %}
|
|
|
|
{% block content %}
|
|
{# Sprint 12: All customer data comes from custom_fields #}
|
|
{% set fields = customer.get_custom_fields() %}
|
|
{% set addr = customer.display_address %}
|
|
|
|
<div class="d-flex justify-content-between align-items-center mb-4">
|
|
<div>
|
|
<nav aria-label="breadcrumb">
|
|
<ol class="breadcrumb mb-2">
|
|
<li class="breadcrumb-item"><a href="{{ url_for('admin.customers') }}" class="text-info">Kunden</a></li>
|
|
<li class="breadcrumb-item"><a href="{{ url_for('admin.customer_detail', customer_id=customer.id) }}" class="text-info">{{ customer.display_name }}</a></li>
|
|
<li class="breadcrumb-item active">Bearbeiten</li>
|
|
</ol>
|
|
</nav>
|
|
<h1><i class="bi bi-pencil me-2"></i>Kunde bearbeiten</h1>
|
|
</div>
|
|
</div>
|
|
|
|
<form method="POST" action="{{ url_for('admin.customer_edit', customer_id=customer.id) }}">
|
|
<div class="row g-4">
|
|
<!-- Kontaktdaten -->
|
|
<div class="col-lg-6">
|
|
<div class="card h-100">
|
|
<div class="card-header">
|
|
<i class="bi bi-person-vcard me-2"></i>Kontaktdaten
|
|
</div>
|
|
<div class="card-body">
|
|
<div class="mb-3">
|
|
<label for="email" class="form-label">E-Mail</label>
|
|
<input type="email" class="form-control bg-dark border-secondary text-light"
|
|
id="email" value="{{ customer.email }}" disabled>
|
|
<div class="form-text">E-Mail kann nicht geaendert werden (Identifikator)</div>
|
|
</div>
|
|
|
|
<div class="mb-3">
|
|
<label for="name" class="form-label">Name <span class="text-danger">*</span></label>
|
|
<input type="text" class="form-control bg-dark border-secondary text-light"
|
|
id="name" name="name" value="{{ fields.get('name', '') }}" required>
|
|
</div>
|
|
|
|
<div class="mb-3">
|
|
<label for="phone" class="form-label">Telefon</label>
|
|
<input type="tel" class="form-control bg-dark border-secondary text-light"
|
|
id="phone" name="phone" value="{{ customer.display_phone }}"
|
|
placeholder="+43 ...">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Adresse -->
|
|
<div class="col-lg-6">
|
|
<div class="card h-100">
|
|
<div class="card-header">
|
|
<i class="bi bi-geo-alt me-2"></i>Adresse
|
|
</div>
|
|
<div class="card-body">
|
|
<div class="mb-3">
|
|
<label for="address_street" class="form-label">Strasse</label>
|
|
<input type="text" class="form-control bg-dark border-secondary text-light"
|
|
id="address_street" name="address_street"
|
|
value="{{ addr.street }}">
|
|
</div>
|
|
|
|
<div class="row">
|
|
<div class="col-4">
|
|
<div class="mb-3">
|
|
<label for="address_zip" class="form-label">PLZ</label>
|
|
<input type="text" class="form-control bg-dark border-secondary text-light"
|
|
id="address_zip" name="address_zip"
|
|
value="{{ addr.zip }}">
|
|
</div>
|
|
</div>
|
|
<div class="col-8">
|
|
<div class="mb-3">
|
|
<label for="address_city" class="form-label">Ort</label>
|
|
<input type="text" class="form-control bg-dark border-secondary text-light"
|
|
id="address_city" name="address_city"
|
|
value="{{ addr.city }}">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- E-Mail-Einstellungen -->
|
|
<div class="col-lg-6">
|
|
<div class="card h-100">
|
|
<div class="card-header">
|
|
<i class="bi bi-envelope me-2"></i>E-Mail-Einstellungen
|
|
</div>
|
|
<div class="card-body">
|
|
<div class="form-check mb-3">
|
|
<input type="checkbox" class="form-check-input" id="email_notifications"
|
|
name="email_notifications"
|
|
{{ 'checked' if customer.email_notifications else '' }}>
|
|
<label class="form-check-label" for="email_notifications">
|
|
Buchungsbestaetigungen
|
|
</label>
|
|
<div class="form-text">Erhaelt E-Mails bei neuen Buchungen</div>
|
|
</div>
|
|
|
|
<div class="form-check mb-3">
|
|
<input type="checkbox" class="form-check-input" id="email_reminders"
|
|
name="email_reminders"
|
|
{{ 'checked' if customer.email_reminders else '' }}>
|
|
<label class="form-check-label" for="email_reminders">
|
|
Kurserinnerungen
|
|
</label>
|
|
<div class="form-text">Erhaelt Erinnerungen vor Kursbeginn</div>
|
|
</div>
|
|
|
|
<div class="form-check mb-3">
|
|
<input type="checkbox" class="form-check-input" id="email_invoices"
|
|
name="email_invoices"
|
|
{{ 'checked' if customer.email_invoices else '' }}>
|
|
<label class="form-check-label" for="email_invoices">
|
|
Rechnungen
|
|
</label>
|
|
<div class="form-text">Erhaelt Rechnungen per E-Mail</div>
|
|
</div>
|
|
|
|
<div class="form-check">
|
|
<input type="checkbox" class="form-check-input" id="email_marketing"
|
|
name="email_marketing"
|
|
{{ 'checked' if customer.email_marketing else '' }}>
|
|
<label class="form-check-label" for="email_marketing">
|
|
Newsletter & Marketing
|
|
</label>
|
|
<div class="form-text">Erhaelt Newsletter und Angebote</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Konto-Infos (nur Anzeige) -->
|
|
<div class="col-lg-6">
|
|
<div class="card h-100">
|
|
<div class="card-header">
|
|
<i class="bi bi-info-circle me-2"></i>Konto-Informationen
|
|
</div>
|
|
<div class="card-body">
|
|
<table class="table table-dark table-borderless table-sm mb-0">
|
|
<tr>
|
|
<td class="text-muted" style="width: 140px;">Kunden-ID</td>
|
|
<td>#{{ customer.id }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="text-muted">WP User-ID</td>
|
|
<td>{{ customer.wp_user_id or '-' }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="text-muted">Registriert</td>
|
|
<td>{{ customer.created_at.strftime('%d.%m.%Y um %H:%M') if customer.created_at else '-' }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="text-muted">Letzter Login</td>
|
|
<td>
|
|
{% if customer.last_login_at %}
|
|
{{ customer.last_login_at.strftime('%d.%m.%Y um %H:%M') }}
|
|
{% else %}
|
|
<span class="text-muted">Noch nie eingeloggt</span>
|
|
{% endif %}
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Weitere Felder (aus custom_fields, ohne Kernfelder) -->
|
|
{% set skip_core = ['name', 'phone', 'address_street', 'address_zip', 'address_city', 'email'] %}
|
|
{% set extra_fields = {} %}
|
|
{% for key, value in fields.items() if key not in skip_core %}
|
|
{% set _ = extra_fields.update({key: value}) %}
|
|
{% endfor %}
|
|
|
|
{% if extra_fields %}
|
|
<div class="col-lg-6">
|
|
<div class="card h-100">
|
|
<div class="card-header">
|
|
<i class="bi bi-person-lines-fill me-2"></i>Weitere Felder
|
|
</div>
|
|
<div class="card-body">
|
|
{% for key, value in extra_fields.items() %}
|
|
{% set saved_field = field_config.wp_fields.get(key, {}) %}
|
|
{% set label = saved_field.get('label') or key %}
|
|
<div class="mb-3">
|
|
<label for="custom_{{ key }}" class="form-label">{{ label }}</label>
|
|
<input type="text" class="form-control bg-dark border-secondary text-light"
|
|
id="custom_{{ key }}" name="custom_{{ key }}"
|
|
value="{{ value }}">
|
|
</div>
|
|
{% endfor %}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% endif %}
|
|
</div>
|
|
|
|
<!-- Aktionen -->
|
|
<div class="d-flex justify-content-between mt-4">
|
|
<a href="{{ url_for('admin.customer_detail', customer_id=customer.id) }}" class="btn btn-outline-secondary">
|
|
<i class="bi bi-x-lg me-1"></i>Abbrechen
|
|
</a>
|
|
<button type="submit" class="btn btn-primary">
|
|
<i class="bi bi-check-lg me-1"></i>Aenderungen speichern
|
|
</button>
|
|
</div>
|
|
</form>
|
|
{% endblock %}
|