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
+137
View File
@@ -0,0 +1,137 @@
{
"title": "Objekte",
"crumb": "Stammdaten",
"sub": "Baustellen, Filialen und Anlagen mit Hinweisen, Dokumenten und Einsatzhistorie.",
"new": "Neues Objekt",
"searchLabel": "Suche",
"searchPlaceholder": "Objekt, Adresse oder Kunde",
"filter": {
"status": "Status",
"all": "Alle",
"apply": "Filtern",
"reset": "Zurücksetzen"
},
"status": {
"active": "Aktiv",
"inactive": "Inaktiv",
"provisional": "Vorläufig"
},
"columns": {
"name": "Objekt",
"customer": "Kunde",
"address": "Adresse",
"orders": "Aufträge",
"status": "Status"
},
"empty": "Keine Objekte gefunden.",
"pagination": {
"prev": "Zurück",
"next": "Weiter",
"summary": "{from}–{to} von {total}"
},
"fields": {
"customerId": "Kunde",
"selectCustomer": "Kunden auswählen",
"name": "Objektbezeichnung",
"street": "Straße",
"houseNumber": "Hausnr.",
"postalCode": "PLZ",
"city": "Ort",
"country": "Land",
"contactId": "Ansprechpartner vor Ort",
"noContact": "Kein hinterlegter Kontakt",
"onSiteContact": "Ansprechpartner vor Ort (Freitext)",
"phone": "Telefon vor Ort",
"accessNotes": "Zugangshinweise",
"parkingNotes": "Parkhinweise",
"safetyNotes": "Sicherheitsinformationen",
"technicalNotes": "Technische Hinweise",
"status": "Status",
"latitude": "Breitengrad",
"longitude": "Längengrad"
},
"sections": {
"base": "Objekt",
"address": "Adresse",
"onSite": "Vor Ort",
"notes": "Hinweise für den Einsatz",
"geo": "Koordinaten (optional)"
},
"form": {
"createTitle": "Objekt anlegen",
"createSub": "Jedes Objekt gehört zu einem Kunden.",
"editTitle": "Objekt bearbeiten",
"create": "Objekt anlegen",
"save": "Speichern",
"saving": "Speichert…",
"cancel": "Abbrechen",
"saved": "Gespeichert.",
"contactHint": "Kontakte des Kunden stehen nach dem Anlegen zur Auswahl."
},
"tabs": {
"master": "Stammdaten",
"documents": "Dokumente",
"history": "Historie"
},
"detail": {
"edit": "Bearbeiten",
"delete": "Löschen",
"deleteTitle": "Objekt löschen",
"deleteHint": "Das Objekt wird ausgeblendet. Historie und Nachweise bleiben erhalten. Nur ohne offene Aufträge möglich.",
"deleteConfirm": "Objekt löschen",
"map": "Karte öffnen (OpenStreetMap)",
"noMap": "Keine Adresse für die Karte",
"customer": "Kunde",
"back": "Zur Objektliste",
"noNotes": "Keine Hinweise hinterlegt."
},
"history": {
"title": "Einsatzhistorie",
"onlyApproved": "Nur freigegebene",
"showAll": "Alle Einsätze",
"approvedOnlyHint": "Angezeigt werden freigegebene Einsätze.",
"empty": "Noch keine Einsätze an diesem Objekt.",
"workDone": "Durchgeführte Arbeiten",
"noWorkDone": "Keine Tätigkeiten erfasst.",
"materials": "Material",
"noMaterials": "Kein Material erfasst.",
"photos": "{count, plural, =0 {Keine Fotos} one {# Foto} other {# Fotos}}",
"reports": "Berichte",
"noReports": "Kein freigegebener Bericht.",
"reportType": {
"daily": "Tagesbericht",
"completion": "Abschlussbericht"
},
"reportLink": "{type} v{version} vom {date}",
"signed": "Kundenunterschrift liegt vor",
"notSigned": "Keine Kundenunterschrift",
"followUp": "Offene Folgearbeiten",
"emergency": "Notdienst",
"noTeam": "Kein Team",
"openOrder": "Auftrag öffnen"
},
"statusGroup": {
"new": "Neu",
"planned": "Geplant",
"en_route": "Unterwegs",
"in_progress": "In Arbeit",
"documentation_incomplete": "Dokumentation unvollständig",
"in_review": "Zur Prüfung",
"ready_for_billing": "Bereit zur Abrechnung",
"billed": "Abgerechnet",
"cancelled": "Storniert"
},
"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.",
"blocked": "Aktion aktuell nicht möglich.",
"generic": "Das hat nicht geklappt. Bitte erneut versuchen.",
"required": "Pflichtfeld",
"invalidField": "Eingabe prüfen",
"customer_not_found": "Kunde nicht gefunden.",
"contact_mismatch": "Der Kontakt gehört nicht zu diesem Kunden.",
"open_work_orders": "Es gibt noch offene Aufträge."
}
}