L1 Stammdaten: Backoffice-Seiten Kunden, Objekte, Teams und Dokumente

Listen mit Suche/Filter/Paginierung, Popups für Anlage und Bearbeitung,
Kundendetail mit Tabs, Dublettenhinweis und Zusammenführen, Objektdetail mit
Kartenlink, Dokumenten-Tab und Historie, Teamverwaltung mit Mitgliedern,
Dokumentenübersicht. Texte in messages de/en, Audit-Label Ansprechpartner.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-14 12:26:27 +02:00
co-authored by Claude Opus 5
parent 49c5ad0e33
commit d18f4fe431
28 changed files with 3660 additions and 12 deletions
+180
View File
@@ -0,0 +1,180 @@
{
"title": "Kunden",
"crumb": "Stammdaten",
"sub": "Kunden, Ansprechpartner und Objekte an einem Ort.",
"new": "Neuer Kunde",
"searchLabel": "Suche",
"searchPlaceholder": "Name, Kundennummer, Ort oder E-Mail",
"filter": {
"status": "Status",
"all": "Alle (ohne zusammengeführte)",
"apply": "Filtern",
"reset": "Zurücksetzen"
},
"status": {
"active": "Aktiv",
"inactive": "Inaktiv",
"provisional": "Vorläufig",
"merged": "Zusammengeführt"
},
"provisionalHint": "Vorläufig – Prüfung durch Backoffice erforderlich",
"columns": {
"number": "Kundennr.",
"name": "Name",
"city": "Ort",
"contact": "Kontakt",
"sites": "Objekte",
"status": "Status"
},
"empty": "Keine Kunden gefunden.",
"pagination": {
"prev": "Zurück",
"next": "Weiter",
"summary": "{from}–{to} von {total}"
},
"fields": {
"customerNumber": "Kundennummer",
"customerNumberHint": "Leer lassen: nächste freie Nummer wird vergeben.",
"companyName": "Firmenname",
"salutation": "Anrede",
"firstName": "Vorname",
"lastName": "Nachname",
"street": "Straße",
"houseNumber": "Hausnr.",
"postalCode": "PLZ",
"city": "Ort",
"country": "Land",
"phone": "Telefon",
"mobile": "Mobil",
"email": "E-Mail",
"notes": "Allgemeine Hinweise",
"billingNotes": "Abrechnungshinweise",
"status": "Status",
"createdAt": "Angelegt",
"updatedAt": "Geändert"
},
"sections": {
"customer": "Kunde",
"address": "Adresse",
"contact": "Erreichbarkeit",
"notes": "Hinweise"
},
"form": {
"createTitle": "Kunde anlegen",
"createSub": "Firmen- oder Privatkunde. Firmenname oder Nachname ist Pflicht.",
"editTitle": "Kunde bearbeiten",
"create": "Kunde anlegen",
"save": "Speichern",
"saving": "Speichert…",
"cancel": "Abbrechen",
"close": "Schließen",
"saved": "Gespeichert.",
"required": "Pflichtfeld"
},
"duplicates": {
"title": "Mögliche Dublette",
"hint": "Diese Kunden sind ähnlich. Bestehenden Kunden verwenden oder trotzdem neu anlegen.",
"open": "Bestehenden Kunden öffnen",
"createAnyway": "Trotzdem neu anlegen",
"score": "Übereinstimmung {percent} %",
"reasons": {
"customer_number": "Kundennummer",
"company_name": "Name",
"address": "Adresse",
"email": "E-Mail",
"phone": "Telefon"
}
},
"tabs": {
"master": "Stammdaten",
"contacts": "Ansprechpartner",
"sites": "Objekte",
"orders": "Aufträge",
"documents": "Dokumente"
},
"detail": {
"edit": "Bearbeiten",
"confirm": "Kunden bestätigen",
"confirmHint": "Vorläufigen Kunden nach Prüfung als aktiv übernehmen.",
"merge": "Zusammenführen",
"delete": "Löschen",
"deleteTitle": "Kunden löschen",
"deleteHint": "Der Kunde wird ausgeblendet. Aufträge, Berichte und Nachweise bleiben erhalten. Nur ohne offene Aufträge möglich.",
"deleteConfirm": "Kunden löschen",
"mergedInto": "Dieser Kunde wurde zusammengeführt in:",
"mergedOk": "Kunden zusammengeführt. Kontakte, Objekte, Aufträge und Dokumente liegen jetzt hier.",
"back": "Zur Kundenliste",
"readOnly": "Nur Lesezugriff."
},
"contacts": {
"new": "Ansprechpartner hinzufügen",
"createTitle": "Ansprechpartner hinzufügen",
"editTitle": "Ansprechpartner bearbeiten",
"empty": "Noch keine Ansprechpartner.",
"delete": "Entfernen",
"deleteConfirm": "Ansprechpartner entfernen?",
"preferred": "bevorzugt",
"fields": {
"name": "Name",
"role": "Funktion",
"phone": "Telefon",
"mobile": "Mobil",
"email": "E-Mail",
"preferredChannel": "Bevorzugter Kontaktweg",
"notes": "Bemerkungen"
},
"channel": {
"phone": "Telefon",
"mobile": "Mobil",
"email": "E-Mail",
"none": "Keine Angabe"
}
},
"sites": {
"empty": "Noch keine Objekte.",
"new": "Objekt anlegen"
},
"orders": {
"empty": "Keine Aufträge sichtbar.",
"hint": "Lesesicht. Aufträge werden im Bereich Aufträge bearbeitet.",
"columns": {
"number": "Auftrag",
"title": "Bezeichnung",
"site": "Objekt",
"team": "Team",
"date": "Termin",
"status": "Status"
}
},
"merge": {
"title": "Kunden zusammenführen",
"sub": "Kontakte, Objekte, Aufträge und Dokumente werden auf den Zielkunden umgehängt. Dieser Kunde wird als zusammengeführt markiert.",
"source": "Wird aufgelöst",
"target": "Zielkunde",
"candidates": "Mögliche Dubletten",
"noCandidates": "Keine ähnlichen Kunden gefunden. Zielkunde über die Kundennummer wählen.",
"targetNumber": "Oder Kundennummer des Zielkunden",
"confirm": "Datensätze geprüft. Zusammenführen bestätigen – das wird nicht automatisch rückgängig gemacht.",
"submit": "Zusammenführen"
},
"errors": {
"invalid": "Bitte die markierten Felder prüfen.",
"not_found": "Datensatz nicht gefunden.",
"forbidden": "Dafür fehlt die Berechtigung.",
"conflict": "Das geht so nicht: Der Datensatz wurde geändert oder ist bereits vergeben.",
"blocked": "Aktion aktuell nicht möglich.",
"generic": "Das hat nicht geklappt. Bitte erneut versuchen.",
"required": "Pflichtfeld",
"invalidField": "Eingabe prüfen",
"name_required": "Firmenname oder Nachname angeben.",
"number_taken": "Kundennummer ist bereits vergeben.",
"number_allocation": "Keine freie Kundennummer gefunden.",
"open_work_orders": "Es gibt noch offene Aufträge.",
"not_provisional": "Der Kunde ist nicht vorläufig.",
"already_merged": "Einer der Kunden ist bereits zusammengeführt.",
"same_customer": "Quelle und Ziel sind derselbe Kunde.",
"target_required": "Zielkunden auswählen.",
"target_not_found": "Kundennummer nicht gefunden.",
"confirm_required": "Bitte die Zusammenführung bestätigen."
}
}