Merge origin/beta into feat/accounting-inbound-invoices
Resolves the 7 feature-flag / i18n conflicts (accounting flags vs upstream's Project Overview 'projects' flag, both registered in the same files) as additive unions — accounting + incomingInvoices + expenses AND projects all coexist. Migrations slot cleanly: projects 117-121, accounting 122-129, no collisions. Frontend build + backend node --check pass.
This commit is contained in:
@@ -1691,6 +1691,11 @@
|
||||
"title": "Stundenerfassung",
|
||||
"description": "Zeiterfassung pro Kunde. Admin erfasst Datum + Start-/Endzeit + optionalen Satz-Override + Notiz. Kunden im Monatsmodus akkumulieren Stunden automatisch in den laufenden Monatsentwurf; Kunden pro Anlass sehen eine Schaltfläche „Entwurfsrechnung erstellen“, die eine eigenständige Entwurfsrechnung mit einer Zeile pro Eintrag erzeugt. Unabhängig von Rechnungen — Stunden erfassen, noch bevor die volle Abrechnungsoberfläche aktiviert ist.",
|
||||
"sidebar": "Stunden"
|
||||
},
|
||||
"projects": {
|
||||
"title": "Projekte",
|
||||
"description": "Nur-Admin-Gruppierungsebene über Events. Bündle mehrere Events unter einem Projekt und öffne ein 360°-Projektübersichts-Cockpit — Meilenstein-Zeitleiste plus ein datierter Verlauf aller E-Mails (mit der tatsächlich gesendeten Vorschau + Erneut-senden/Abbrechen/Wiederholen-Aktionen), Angebote, Verträge, Rechnungen, Galerien und erfassten Stunden. Fügt beim Erfassen von Stunden eine „Auf Projekt buchen“-Option hinzu. Kunden sehen Projekte nie.",
|
||||
"sidebar": "Übersicht"
|
||||
}
|
||||
},
|
||||
"customerSurface": {
|
||||
@@ -3203,6 +3208,7 @@
|
||||
"rateOverride": "Satz-Override",
|
||||
"note": "Notiz / Beschreibung",
|
||||
"notePlaceholder": "Was wurde gearbeitet?",
|
||||
"bookToProject": "Auf Projekt buchen",
|
||||
"save": "Eintrag hinzufügen",
|
||||
"needRate": "Satz festlegen oder Override eingeben, um Zeit zu erfassen."
|
||||
},
|
||||
@@ -3450,6 +3456,7 @@
|
||||
"body": "Aktiviere „Konten\" (oder eine andere CRM-Unterfunktion) unter Einstellungen → Funktionen, um loszulegen."
|
||||
},
|
||||
"subnav": {
|
||||
"overview": "Übersicht",
|
||||
"accounts": "Konten",
|
||||
"quotes": "Angebote",
|
||||
"contracts": "Verträge",
|
||||
@@ -3634,6 +3641,80 @@
|
||||
"createdToast": "Aufwand hinzugefügt."
|
||||
}
|
||||
},
|
||||
"projects": {
|
||||
"title": "Projektübersicht",
|
||||
"subtitle": "Fasse Events zu Projekten zusammen und sieh jede E-Mail, jedes Dokument, jede Galerie und jede Stunde in einem Cockpit.",
|
||||
"search": "Nach Name oder Kunde suchen…",
|
||||
"empty": "Noch keine Projekte. Erstelle oben eines, oder vorhandene Events wurden automatisch gruppiert.",
|
||||
"notFound": "Projekt nicht gefunden",
|
||||
"backToList": "Alle Projekte",
|
||||
"noCustomer": "Kein einzelner Kunde",
|
||||
"rename": "Umbenennen",
|
||||
"timeline": "Meilensteine",
|
||||
"eventCount": "{{count}} Events",
|
||||
"totalHours": "{{hours}} erfasst",
|
||||
"create": {
|
||||
"label": "Name des neuen Projekts",
|
||||
"placeholder": "z. B. Hochzeit Müller 2026",
|
||||
"button": "Projekt erstellen"
|
||||
},
|
||||
"col": {
|
||||
"name": "Projekt",
|
||||
"customer": "Kunde",
|
||||
"events": "Events",
|
||||
"value": "Wert",
|
||||
"status": "Status",
|
||||
"updated": "Aktualisiert"
|
||||
},
|
||||
"picker": {
|
||||
"label": "Projekt",
|
||||
"none": "Kein Projekt"
|
||||
},
|
||||
"value": {
|
||||
"label": "Projektwert",
|
||||
"paid": "bezahlt"
|
||||
},
|
||||
"events": {
|
||||
"title": "Events",
|
||||
"none": "Diesem Projekt sind noch keine Events zugeordnet.",
|
||||
"searchPlaceholder": "Event zuordnen — nach Name suchen…",
|
||||
"attached": "Event zugeordnet",
|
||||
"attachFailed": "Event konnte nicht zugeordnet werden"
|
||||
},
|
||||
"feed": {
|
||||
"title": "Aktivität",
|
||||
"empty": "Diesem Projekt ist noch nichts zugeordnet.",
|
||||
"email": "E-Mail",
|
||||
"quote": "Angebot",
|
||||
"contract": "Vertrag",
|
||||
"invoice": "Rechnung",
|
||||
"gallery": "Galerie",
|
||||
"hours": "Stunden"
|
||||
},
|
||||
"email": {
|
||||
"preview": "Vorschau",
|
||||
"resend": "Erneut senden",
|
||||
"sendNow": "Jetzt senden",
|
||||
"cancel": "Abbrechen",
|
||||
"retry": "Wiederholen",
|
||||
"previewTitle": "E-Mail-Vorschau",
|
||||
"noPreview": "Keine gespeicherte Vorschau für diese E-Mail — sie wurde gesendet, bevor Vorschauen erfasst wurden.",
|
||||
"reRendered": "Neu gerendert aus der aktuellen Vorlage — diese E-Mail wurde gesendet, bevor Vorschauen erfasst wurden, und kann daher leicht von der tatsächlich versendeten abweichen.",
|
||||
"reRenderedTag": "≈ neu gerendert"
|
||||
},
|
||||
"toast": {
|
||||
"created": "Projekt erstellt",
|
||||
"createFailed": "Projekt konnte nicht erstellt werden",
|
||||
"saved": "Projekt gespeichert",
|
||||
"saveFailed": "Speichern fehlgeschlagen",
|
||||
"emailAction": "Erledigt",
|
||||
"emailActionFailed": "Aktion fehlgeschlagen",
|
||||
"previewFailed": "Vorschau konnte nicht geladen werden"
|
||||
},
|
||||
"error": {
|
||||
"customerMismatch": "Das gehört zu einem anderen Kunden als dieses Projekt."
|
||||
}
|
||||
},
|
||||
"calendar": {
|
||||
"pageTitle": "Kalender",
|
||||
"subtitle": "Termine, erfasste Stunden und offene Angebote/Verträge in einer Ansicht.",
|
||||
|
||||
@@ -1249,6 +1249,11 @@
|
||||
"title": "Hours logging",
|
||||
"description": "Per-customer time tracking. Admin logs date + start/end times + optional rate override + note. Monthly-mode customers auto-accumulate hours into the running monthly draft; per-event customers see a \"Create draft invoice\" button that mints a standalone draft invoice with one line per entry. Independent of Bills — log hours even before turning the full billing surface on.",
|
||||
"sidebar": "Hours"
|
||||
},
|
||||
"projects": {
|
||||
"title": "Projects",
|
||||
"description": "Admin-only grouping layer above events. Bundle several events under one project and open a 360° Project Overview cockpit — milestone timeline plus a dated feed of every email (with the actual sent preview + resend/cancel/retry actions), quote, contract, invoice, gallery and logged hour. Adds a \"book to project\" control when logging hours. Customers never see projects.",
|
||||
"sidebar": "Overview"
|
||||
}
|
||||
},
|
||||
"customerSurface": {
|
||||
@@ -3203,6 +3208,7 @@
|
||||
"rateOverride": "Rate override",
|
||||
"note": "Note / description",
|
||||
"notePlaceholder": "What was worked on?",
|
||||
"bookToProject": "Book to project",
|
||||
"save": "Add entry",
|
||||
"needRate": "Set a rate or enter an override to log time."
|
||||
},
|
||||
@@ -3450,6 +3456,7 @@
|
||||
"body": "Enable Accounts (or another CRM sub-feature) under Settings → Features to get started."
|
||||
},
|
||||
"subnav": {
|
||||
"overview": "Overview",
|
||||
"accounts": "Accounts",
|
||||
"quotes": "Quotes",
|
||||
"contracts": "Contracts",
|
||||
@@ -3634,6 +3641,80 @@
|
||||
"createdToast": "Expense added."
|
||||
}
|
||||
},
|
||||
"projects": {
|
||||
"title": "Project Overview",
|
||||
"subtitle": "Group events into projects and see every email, document, gallery and hour in one cockpit.",
|
||||
"search": "Search by name or customer…",
|
||||
"empty": "No projects yet. Create one above, or events you already have were grouped automatically.",
|
||||
"notFound": "Project not found",
|
||||
"backToList": "All projects",
|
||||
"noCustomer": "No single customer",
|
||||
"rename": "Rename",
|
||||
"timeline": "Milestones",
|
||||
"eventCount": "{{count}} events",
|
||||
"totalHours": "{{hours}} logged",
|
||||
"create": {
|
||||
"label": "New project name",
|
||||
"placeholder": "e.g. Müller wedding 2026",
|
||||
"button": "Create project"
|
||||
},
|
||||
"col": {
|
||||
"name": "Project",
|
||||
"customer": "Customer",
|
||||
"events": "Events",
|
||||
"value": "Value",
|
||||
"status": "Status",
|
||||
"updated": "Updated"
|
||||
},
|
||||
"picker": {
|
||||
"label": "Project",
|
||||
"none": "No project"
|
||||
},
|
||||
"value": {
|
||||
"label": "Project value",
|
||||
"paid": "paid"
|
||||
},
|
||||
"events": {
|
||||
"title": "Events",
|
||||
"none": "No events grouped under this project yet.",
|
||||
"searchPlaceholder": "Attach an event — search by name…",
|
||||
"attached": "Event attached",
|
||||
"attachFailed": "Could not attach event"
|
||||
},
|
||||
"feed": {
|
||||
"title": "Activity",
|
||||
"empty": "Nothing rolled up to this project yet.",
|
||||
"email": "Email",
|
||||
"quote": "Quote",
|
||||
"contract": "Contract",
|
||||
"invoice": "Invoice",
|
||||
"gallery": "Gallery",
|
||||
"hours": "Hours"
|
||||
},
|
||||
"email": {
|
||||
"preview": "Preview",
|
||||
"resend": "Resend",
|
||||
"sendNow": "Send now",
|
||||
"cancel": "Cancel",
|
||||
"retry": "Retry",
|
||||
"previewTitle": "Email preview",
|
||||
"noPreview": "No stored preview for this email — it was sent before previews were captured.",
|
||||
"reRendered": "Re-rendered from the current template — this email was sent before previews were captured, so it may differ slightly from what the recipient received.",
|
||||
"reRenderedTag": "≈ re-rendered"
|
||||
},
|
||||
"toast": {
|
||||
"created": "Project created",
|
||||
"createFailed": "Could not create project",
|
||||
"saved": "Project saved",
|
||||
"saveFailed": "Save failed",
|
||||
"emailAction": "Done",
|
||||
"emailActionFailed": "Action failed",
|
||||
"previewFailed": "Could not load preview"
|
||||
},
|
||||
"error": {
|
||||
"customerMismatch": "That belongs to a different customer than this project."
|
||||
}
|
||||
},
|
||||
"calendar": {
|
||||
"pageTitle": "Calendar",
|
||||
"subtitle": "Events, logged hours, and pending quotes/contracts in one view.",
|
||||
|
||||
Reference in New Issue
Block a user