Merge lane/abrechnung in feature/craftvia-mvp
Konflikte gelöst (additiv): Benachrichtigungstexte (Planung + Meilensteine), Event-Typen, Navigation, Job-Queues/Prozessoren (geocode-site, planning-watch, billing-pdf), OpenAPI-Tags, Smoke-Prüfungen (zweiter Mandant: Planung + Abrechnung). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,250 @@
|
||||
{
|
||||
"crumb": "Abrechnung",
|
||||
"title": "Abrechnungsübersicht",
|
||||
"subtitle": "Abgeschlossene Aufträge, bestätigte Meilensteine und freigegebene Tagesberichte für die Buchhaltung. Keine Preise, keine Rechnungen.",
|
||||
"hm": "{value} h",
|
||||
"tabs": { "open": "Offen", "billed": "Abgerechnet", "voided": "Storniert" },
|
||||
"filter": {
|
||||
"title": "Filter",
|
||||
"q": "Suche",
|
||||
"qPlaceholder": "Auftragsnummer oder Kunde",
|
||||
"from": "Zeitraum von",
|
||||
"to": "Zeitraum bis",
|
||||
"customer": "Kunde",
|
||||
"team": "Team",
|
||||
"kind": "Art",
|
||||
"any": "Alle",
|
||||
"apply": "Anwenden",
|
||||
"reset": "Zurücksetzen"
|
||||
},
|
||||
"list": {
|
||||
"noPermission": "Die Abrechnungsübersicht ist für Ihre Rolle nicht freigeschaltet.",
|
||||
"empty": {
|
||||
"open": "Nichts offen – alle Einträge sind abgerechnet.",
|
||||
"billed": "Noch keine Einträge abgerechnet.",
|
||||
"voided": "Keine stornierten Einträge."
|
||||
},
|
||||
"selectHint": "Einträge auswählen und gemeinsam drucken.",
|
||||
"print": "Abrechnungsblätter drucken",
|
||||
"select": "Auswahl",
|
||||
"selectRow": "{number} auswählen",
|
||||
"order": "Auftrag",
|
||||
"customerSite": "Kunde / Objekt",
|
||||
"section": "Art / Abschnitt",
|
||||
"period": "Zeitraum",
|
||||
"work": "Arbeitszeit",
|
||||
"travel": "Fahrzeit",
|
||||
"trips": "Anfahrten",
|
||||
"material": "Material",
|
||||
"readySince": "Bereit seit",
|
||||
"billedAt": "Abgerechnet am",
|
||||
"voidedAt": "Storniert am",
|
||||
"pending": "{value} h offene Zeiten",
|
||||
"invoice": "Rechnung {number}",
|
||||
"pagination": "Seiten",
|
||||
"prev": "Zurück",
|
||||
"next": "Weiter",
|
||||
"page": "Seite {page} von {pages}"
|
||||
},
|
||||
"kind": { "order_completion": "Auftragsabschluss", "milestone": "Meilenstein", "daily_report": "Tagesbericht" },
|
||||
"status": { "open": "Offen", "billed": "Abgerechnet", "voided": "Storniert" },
|
||||
"milestoneStatus": { "open": "Offen", "reached": "Erreicht gemeldet", "confirmed": "Bestätigt", "billed": "Abgerechnet" },
|
||||
"detail": {
|
||||
"back": "Zur Abrechnungsübersicht",
|
||||
"title": "Abrechnungsblatt {number}",
|
||||
"markBilled": "Als abgerechnet markieren",
|
||||
"pdf": "PDF",
|
||||
"print": "Druckansicht",
|
||||
"changeInvoice": "Rechnungsnummer ändern",
|
||||
"void": "Stornieren",
|
||||
"openOrder": "Zum Auftrag",
|
||||
"photos": "Fotos",
|
||||
"report": "Bericht {number} · v{version}",
|
||||
"done": {
|
||||
"billed": "Als abgerechnet markiert. Die Aufstellung ist eingefroren, das PDF wird erstellt.",
|
||||
"voided": "Storniert. Die Positionen sind wieder frei – hier ist der neue offene Eintrag.",
|
||||
"invoice": "Rechnungsnummer gespeichert."
|
||||
},
|
||||
"pdfPending": "Das PDF-Abrechnungsblatt wird erstellt.",
|
||||
"pdfRequest": "PDF erneut anstoßen",
|
||||
"pdfRequested": "PDF-Erstellung angestoßen.",
|
||||
"voidedInfo": "Storniert am {at} von {by}"
|
||||
},
|
||||
"bill": {
|
||||
"title": "Als abgerechnet markieren",
|
||||
"sub": "Die Rechnung stellt Ihre Buchhaltung außerhalb von Craftvia.",
|
||||
"submit": "Abgerechnet",
|
||||
"pending": "Wird gespeichert …",
|
||||
"invoiceNumber": "Rechnungsnummer (optional)",
|
||||
"invoiceHint": "Nummer aus Ihrer Buchhaltung, falls schon vorhanden.",
|
||||
"pendingWarning": "{value} h offene Zeiten ({count}) sind noch nicht freigegeben und nicht enthalten.",
|
||||
"confirmPending": "Trotzdem abrechnen – offene Zeiten bleiben außen vor",
|
||||
"freezeHint": "Die Aufstellung wird eingefroren; enthaltene Zeiten und Materialien können kein zweites Mal abgerechnet werden."
|
||||
},
|
||||
"invoice": { "title": "Rechnungsnummer ändern", "submit": "Speichern" },
|
||||
"void": {
|
||||
"title": "Abrechnung stornieren",
|
||||
"sub": "Zeiten und Material werden wieder frei, ein neuer offener Eintrag entsteht.",
|
||||
"submit": "Stornieren",
|
||||
"pending": "Wird storniert …",
|
||||
"reason": "Grund"
|
||||
},
|
||||
"print": {
|
||||
"back": "Zur Übersicht",
|
||||
"count": "{count, plural, =1 {1 Abrechnungsblatt} other {# Abrechnungsblätter}}",
|
||||
"print": "Drucken",
|
||||
"empty": "Keine Einträge ausgewählt."
|
||||
},
|
||||
"tab": {
|
||||
"milestones": "Meilensteine",
|
||||
"milestonesHint": "Erreichte Meilensteine bestätigen – danach erscheinen sie in der Abrechnungsübersicht.",
|
||||
"noMilestonesHint": "Ohne Meilensteine wird bei mehrtägigen Aufträgen jeder freigegebene Tagesbericht als Abschnitt abrufbar.",
|
||||
"noMilestones": "Keine Meilensteine definiert.",
|
||||
"reachedBy": "Erreicht gemeldet von {name} am {at}",
|
||||
"confirmedBy": "Bestätigt von {name} am {at}",
|
||||
"rejected": "Zuletzt abgelehnt: {reason}",
|
||||
"up": "Nach oben",
|
||||
"down": "Nach unten",
|
||||
"delete": "Löschen",
|
||||
"confirm": "Bestätigen",
|
||||
"reject": "Ablehnen",
|
||||
"rejectReason": "Grund der Ablehnung",
|
||||
"add": "Meilenstein anlegen",
|
||||
"newTitle": "Titel",
|
||||
"newTitlePlaceholder": "z. B. Rohinstallation abgeschlossen",
|
||||
"newDescription": "Beschreibung",
|
||||
"records": "Abrechnungseinträge",
|
||||
"noRecords": "Noch keine Abrechnungseinträge.",
|
||||
"open": "Öffnen"
|
||||
},
|
||||
"mobile": {
|
||||
"title": "Meilensteine",
|
||||
"rejected": "Vom Büro abgelehnt: {reason}",
|
||||
"waiting": "Gemeldet – wartet auf Bestätigung durch das Büro.",
|
||||
"queued": "Gespeichert – wird übertragen, sobald Verbindung besteht.",
|
||||
"sent": "Erreicht gemeldet.",
|
||||
"note": "Notiz",
|
||||
"notePlaceholder": "Notiz (optional)",
|
||||
"reachAria": "{title} als erreicht melden",
|
||||
"confirmReach": "Jetzt melden",
|
||||
"reach": "Erreicht melden",
|
||||
"cancel": "Abbrechen"
|
||||
},
|
||||
"sheet": {
|
||||
"title": "Abrechnungsblatt",
|
||||
"dailyReportOf": "Tagesbericht vom {date}",
|
||||
"period": "Zeitraum",
|
||||
"status": "Status",
|
||||
"invoiceNumber": "Rechnungsnummer",
|
||||
"noAccounting": "Aufstellung für die Buchhaltung – keine Rechnung, ohne Preise."
|
||||
},
|
||||
"section": {
|
||||
"order": "Auftragsdaten",
|
||||
"time": "Zeiten",
|
||||
"trips": "Anfahrten",
|
||||
"material": "Material",
|
||||
"texts": "Zusatzleistungen, Abweichungen, offene Restarbeiten",
|
||||
"reports": "Berichte und Unterschrift"
|
||||
},
|
||||
"field": {
|
||||
"customer": "Kunde",
|
||||
"customerNumber": "Kundennummer",
|
||||
"billingAddress": "Rechnungsadresse",
|
||||
"site": "Objekt",
|
||||
"orderNumber": "Auftragsnummer",
|
||||
"externalOrderNumber": "Externe Auftragsnummer",
|
||||
"offerNumber": "Angebotsnummer",
|
||||
"title": "Auftrag",
|
||||
"orderType": "Auftragsart",
|
||||
"billingType": "Abrechnungsart",
|
||||
"team": "Team",
|
||||
"section": "Abschnitt",
|
||||
"workDates": "Einsatztage",
|
||||
"billedAt": "Abgerechnet",
|
||||
"billingNotes": "Abrechnungshinweise des Kunden"
|
||||
},
|
||||
"billingType": { "fixed": "Festpreis", "time_material": "Nach Aufwand", "maintenance_contract": "Wartungsvertrag", "warranty": "Gewährleistung" },
|
||||
"time": {
|
||||
"hm": "{value} h",
|
||||
"empty": "Keine freigegebenen Zeiten in diesem Abschnitt.",
|
||||
"person": "Person",
|
||||
"work": "Arbeit",
|
||||
"travel": "Fahrzeit",
|
||||
"materialProcurement": "Materialbeschaffung",
|
||||
"total": "Summe",
|
||||
"breaks": "Pausen (Info)",
|
||||
"manual": "davon manuell nachgetragen (freigegeben): {value} h",
|
||||
"sum": "Gesamt",
|
||||
"breaksInfo": "Fahrzeit = Anfahrt + Rückfahrt. Pausen sind nur zur Information aufgeführt und nicht in den Summen enthalten.",
|
||||
"pendingHint": "{value} h offen ({count} Einträge), noch nicht freigegeben – nicht enthalten.",
|
||||
"runningHint": "Eine Zeit läuft noch und ist nicht enthalten."
|
||||
},
|
||||
"trips": {
|
||||
"count": "{count, plural, =0 {Keine Anfahrt} =1 {1 Anfahrt} other {# Anfahrten}}",
|
||||
"rule": "Gemeinsame Anfahrt einer Kolonne zählt als eine Fahrt."
|
||||
},
|
||||
"material": {
|
||||
"name": "Bezeichnung",
|
||||
"articleNumber": "Art.-Nr.",
|
||||
"quantity": "Menge",
|
||||
"planned": "Geplant",
|
||||
"status": "Status",
|
||||
"reason": "Abweichungsgrund",
|
||||
"undocumented": "Nicht erfasst",
|
||||
"empty": "Kein Material in diesem Abschnitt.",
|
||||
"used": "Verwendetes Material",
|
||||
"additional": "Zusätzlich verwendetes Material",
|
||||
"notUsed": "Nicht verwendete Planpositionen",
|
||||
"notUsedInfo": "Nur zur Information."
|
||||
},
|
||||
"materialStatus": { "fully_used": "Vollständig verwendet", "partially_used": "Teilweise verwendet", "not_used": "Nicht verwendet", "additional": "Zusätzlich" },
|
||||
"texts": {
|
||||
"fromReport": "({number})",
|
||||
"empty": "Keine Angaben in den Berichten.",
|
||||
"additionalWork": "Zusatzleistungen",
|
||||
"deviations": "Abweichungen",
|
||||
"openItems": "Offene Restarbeiten"
|
||||
},
|
||||
"reports": {
|
||||
"empty": "Kein freigegebener Bericht in diesem Abschnitt.",
|
||||
"number": "Bericht",
|
||||
"type": "Art",
|
||||
"date": "Datum",
|
||||
"approvedAt": "Freigegeben",
|
||||
"signature": "Unterschrift",
|
||||
"noSignature": "Keine Unterschrift"
|
||||
},
|
||||
"reportType": { "daily": "Tagesbericht", "completion": "Abschlussbericht" },
|
||||
"outcome": { "signed": "Unterschrieben", "customer_absent": "Kunde nicht anwesend", "refused": "Unterschrift verweigert", "later": "Wird nachgereicht", "not_required": "Nicht erforderlich" },
|
||||
"pdf": {
|
||||
"documentTitle": "Abrechnungsblatt {number} – {kind}",
|
||||
"page": "Seite {page} von {pages}",
|
||||
"recordId": "Eintrag-ID",
|
||||
"created": "Erstellt"
|
||||
},
|
||||
"errors": {
|
||||
"not_found": "Nicht gefunden oder keine Berechtigung.",
|
||||
"forbidden": "Dafür fehlt die Berechtigung.",
|
||||
"invalid": "Eingaben prüfen.",
|
||||
"conflict": "Der Eintrag wurde inzwischen geändert. Seite neu laden.",
|
||||
"blocked": "Noch nicht möglich.",
|
||||
"internal": "Vorgang nicht möglich.",
|
||||
"validation_failed": "Pflichtfelder prüfen.",
|
||||
"billing_record_not_found": "Abrechnungseintrag nicht gefunden.",
|
||||
"billing_record_not_open": "Der Eintrag ist nicht mehr offen.",
|
||||
"billing_record_not_billed": "Der Eintrag ist nicht abgerechnet.",
|
||||
"pending_time_entries": "Es gibt noch offene Zeiten. Bitte bestätigen, dass sie nicht enthalten sind.",
|
||||
"positions_already_billed": "Einige Positionen wurden inzwischen anders abgerechnet. Seite neu laden.",
|
||||
"milestone_not_found": "Meilenstein nicht gefunden.",
|
||||
"milestone_not_open": "Nur offene Meilensteine können geändert werden.",
|
||||
"milestone_not_confirmable": "Dieser Meilenstein kann nicht bestätigt werden.",
|
||||
"milestone_not_reached": "Nur gemeldete Meilensteine können abgelehnt werden.",
|
||||
"not_editable": "Der Auftrag kann in diesem Status nicht mehr geändert werden.",
|
||||
"work_order_not_found": "Auftrag nicht gefunden.",
|
||||
"work_order_status": "Für diesen Auftrag ist das nicht mehr möglich.",
|
||||
"transition_blocked": "Der Auftragsstatus kann nicht zurückgesetzt werden – es fehlen Angaben.",
|
||||
"transition_forbidden": "Diesen Statuswechsel dürfen Sie nicht ausführen.",
|
||||
"reason_required": "Bitte einen Grund angeben.",
|
||||
"version_conflict": "Der Auftrag wurde inzwischen geändert. Seite neu laden."
|
||||
}
|
||||
}
|
||||
@@ -17,7 +17,8 @@
|
||||
"emergency_new": "Neue Notdienste",
|
||||
"missing_signatures": "Fehlende Unterschriften",
|
||||
"sync_conflicts": "Sync-Konflikte",
|
||||
"time_approvals": "Zeiten zur Freigabe"
|
||||
"time_approvals": "Zeiten zur Freigabe",
|
||||
"billing_ready": "Bereit zur Abrechnung"
|
||||
},
|
||||
"hints": {
|
||||
"open": "Noch nicht abgerechnet oder storniert",
|
||||
@@ -31,7 +32,8 @@
|
||||
"emergency_new": "Neu oder zur Prüfung",
|
||||
"missing_signatures": "Unterschrift ausstehend",
|
||||
"sync_conflicts": "Offline-Änderungen prüfen",
|
||||
"time_approvals": "Nachträge und Korrekturen prüfen"
|
||||
"time_approvals": "Nachträge und Korrekturen prüfen",
|
||||
"billing_ready": "Offene Einträge der Abrechnungsübersicht"
|
||||
},
|
||||
"open": "Anzeigen"
|
||||
}
|
||||
|
||||
@@ -14,5 +14,6 @@
|
||||
"crumb": "Modul",
|
||||
"status": "Modul in Umsetzung",
|
||||
"hint": "Dieser Bereich wird gerade gebaut. Navigation, Modul-Freischaltung und Berechtigungen sind bereits aktiv."
|
||||
}
|
||||
},
|
||||
"billing": "Abrechnungsübersicht"
|
||||
}
|
||||
|
||||
@@ -20,5 +20,6 @@
|
||||
"admin": "Admin-Konsole",
|
||||
"openMenu": "Menü öffnen",
|
||||
"closeMenu": "Menü schließen",
|
||||
"timeApprovals": "Zeiten zur Freigabe"
|
||||
"timeApprovals": "Zeiten zur Freigabe",
|
||||
"billing": "Abrechnung"
|
||||
}
|
||||
|
||||
@@ -51,7 +51,10 @@
|
||||
"time_rejected": "Zeit abgelehnt",
|
||||
"planning_capacity_freed": "Früher fertig",
|
||||
"planning_overrun": "Geplante Dauer überschritten",
|
||||
"planning_followup_at_risk": "Folgeauftrag gefährdet"
|
||||
"planning_followup_at_risk": "Folgeauftrag gefährdet",
|
||||
"milestone_reached": "Meilenstein erreicht",
|
||||
"milestone_confirmed": "Meilenstein bestätigt",
|
||||
"milestone_rejected": "Meilenstein abgelehnt"
|
||||
},
|
||||
"events": {
|
||||
"work_order_assigned": {
|
||||
@@ -145,6 +148,18 @@
|
||||
"planning_followup_at_risk": {
|
||||
"title": "Folgeauftrag gefährdet: {number}",
|
||||
"message": "{title} – {customer} ({team}) ist gefährdet durch Verzug {blocker}."
|
||||
},
|
||||
"milestone_reached": {
|
||||
"title": "Meilenstein erreicht: {number}",
|
||||
"message": "{actor} meldet einen Meilenstein zu {number} als erreicht. Bitte bestätigen."
|
||||
},
|
||||
"milestone_confirmed": {
|
||||
"title": "Meilenstein bestätigt: {number}",
|
||||
"message": "{actor} hat Ihren gemeldeten Meilenstein zu {number} bestätigt."
|
||||
},
|
||||
"milestone_rejected": {
|
||||
"title": "Meilenstein abgelehnt: {number}",
|
||||
"message": "{actor} hat Ihren gemeldeten Meilenstein zu {number} abgelehnt: {reason}"
|
||||
}
|
||||
},
|
||||
"fallback": {
|
||||
|
||||
@@ -156,7 +156,8 @@
|
||||
"notes": "Notizen",
|
||||
"reports": "Berichte",
|
||||
"documents": "Dokumente",
|
||||
"history": "Verlauf"
|
||||
"history": "Verlauf",
|
||||
"billing": "Meilensteine & Abrechnung"
|
||||
}
|
||||
},
|
||||
"overview": {
|
||||
|
||||
@@ -0,0 +1,250 @@
|
||||
{
|
||||
"crumb": "Billing",
|
||||
"title": "Billing overview",
|
||||
"subtitle": "Completed orders, confirmed milestones and approved daily reports for your accounting. No prices, no invoices.",
|
||||
"hm": "{value} h",
|
||||
"tabs": { "open": "Open", "billed": "Billed", "voided": "Voided" },
|
||||
"filter": {
|
||||
"title": "Filter",
|
||||
"q": "Search",
|
||||
"qPlaceholder": "Order number or customer",
|
||||
"from": "Period from",
|
||||
"to": "Period to",
|
||||
"customer": "Customer",
|
||||
"team": "Team",
|
||||
"kind": "Type",
|
||||
"any": "All",
|
||||
"apply": "Apply",
|
||||
"reset": "Reset"
|
||||
},
|
||||
"list": {
|
||||
"noPermission": "The billing overview is not enabled for your role.",
|
||||
"empty": {
|
||||
"open": "Nothing open – all entries are billed.",
|
||||
"billed": "No entries billed yet.",
|
||||
"voided": "No voided entries."
|
||||
},
|
||||
"selectHint": "Select entries to print them together.",
|
||||
"print": "Print billing sheets",
|
||||
"select": "Selection",
|
||||
"selectRow": "Select {number}",
|
||||
"order": "Order",
|
||||
"customerSite": "Customer / site",
|
||||
"section": "Type / section",
|
||||
"period": "Period",
|
||||
"work": "Working time",
|
||||
"travel": "Travel time",
|
||||
"trips": "Trips",
|
||||
"material": "Material",
|
||||
"readySince": "Ready since",
|
||||
"billedAt": "Billed on",
|
||||
"voidedAt": "Voided on",
|
||||
"pending": "{value} h pending times",
|
||||
"invoice": "Invoice {number}",
|
||||
"pagination": "Pages",
|
||||
"prev": "Previous",
|
||||
"next": "Next",
|
||||
"page": "Page {page} of {pages}"
|
||||
},
|
||||
"kind": { "order_completion": "Order completion", "milestone": "Milestone", "daily_report": "Daily report" },
|
||||
"status": { "open": "Open", "billed": "Billed", "voided": "Voided" },
|
||||
"milestoneStatus": { "open": "Open", "reached": "Reported as reached", "confirmed": "Confirmed", "billed": "Billed" },
|
||||
"detail": {
|
||||
"back": "Back to billing overview",
|
||||
"title": "Billing sheet {number}",
|
||||
"markBilled": "Mark as billed",
|
||||
"pdf": "PDF",
|
||||
"print": "Print view",
|
||||
"changeInvoice": "Change invoice number",
|
||||
"void": "Void",
|
||||
"openOrder": "Open order",
|
||||
"photos": "Photos",
|
||||
"report": "Report {number} · v{version}",
|
||||
"done": {
|
||||
"billed": "Marked as billed. The statement is frozen, the PDF is being created.",
|
||||
"voided": "Voided. The positions are free again – this is the new open entry.",
|
||||
"invoice": "Invoice number saved."
|
||||
},
|
||||
"pdfPending": "The PDF billing sheet is being created.",
|
||||
"pdfRequest": "Request PDF again",
|
||||
"pdfRequested": "PDF creation requested.",
|
||||
"voidedInfo": "Voided on {at} by {by}"
|
||||
},
|
||||
"bill": {
|
||||
"title": "Mark as billed",
|
||||
"sub": "Your accounting issues the invoice outside of Craftvia.",
|
||||
"submit": "Billed",
|
||||
"pending": "Saving …",
|
||||
"invoiceNumber": "Invoice number (optional)",
|
||||
"invoiceHint": "Number from your accounting, if already available.",
|
||||
"pendingWarning": "{value} h pending times ({count}) are not approved yet and not included.",
|
||||
"confirmPending": "Bill anyway – pending times stay excluded",
|
||||
"freezeHint": "The statement is frozen; included times and materials cannot be billed a second time."
|
||||
},
|
||||
"invoice": { "title": "Change invoice number", "submit": "Save" },
|
||||
"void": {
|
||||
"title": "Void billing",
|
||||
"sub": "Times and material become free again, a new open entry is created.",
|
||||
"submit": "Void",
|
||||
"pending": "Voiding …",
|
||||
"reason": "Reason"
|
||||
},
|
||||
"print": {
|
||||
"back": "Back to overview",
|
||||
"count": "{count, plural, =1 {1 billing sheet} other {# billing sheets}}",
|
||||
"print": "Print",
|
||||
"empty": "No entries selected."
|
||||
},
|
||||
"tab": {
|
||||
"milestones": "Milestones",
|
||||
"milestonesHint": "Confirm reached milestones – they then appear in the billing overview.",
|
||||
"noMilestonesHint": "Without milestones, every approved daily report of a multi-day order becomes a billable section.",
|
||||
"noMilestones": "No milestones defined.",
|
||||
"reachedBy": "Reported as reached by {name} on {at}",
|
||||
"confirmedBy": "Confirmed by {name} on {at}",
|
||||
"rejected": "Last rejected: {reason}",
|
||||
"up": "Move up",
|
||||
"down": "Move down",
|
||||
"delete": "Delete",
|
||||
"confirm": "Confirm",
|
||||
"reject": "Reject",
|
||||
"rejectReason": "Reason for rejection",
|
||||
"add": "Add milestone",
|
||||
"newTitle": "Title",
|
||||
"newTitlePlaceholder": "e.g. rough installation completed",
|
||||
"newDescription": "Description",
|
||||
"records": "Billing entries",
|
||||
"noRecords": "No billing entries yet.",
|
||||
"open": "Open"
|
||||
},
|
||||
"mobile": {
|
||||
"title": "Milestones",
|
||||
"rejected": "Rejected by the office: {reason}",
|
||||
"waiting": "Reported – waiting for confirmation by the office.",
|
||||
"queued": "Saved – will be sent as soon as there is a connection.",
|
||||
"sent": "Reported as reached.",
|
||||
"note": "Note",
|
||||
"notePlaceholder": "Note (optional)",
|
||||
"reachAria": "Report {title} as reached",
|
||||
"confirmReach": "Report now",
|
||||
"reach": "Report as reached",
|
||||
"cancel": "Cancel"
|
||||
},
|
||||
"sheet": {
|
||||
"title": "Billing sheet",
|
||||
"dailyReportOf": "Daily report of {date}",
|
||||
"period": "Period",
|
||||
"status": "Status",
|
||||
"invoiceNumber": "Invoice number",
|
||||
"noAccounting": "Statement for your accounting – not an invoice, no prices."
|
||||
},
|
||||
"section": {
|
||||
"order": "Order data",
|
||||
"time": "Times",
|
||||
"trips": "Trips",
|
||||
"material": "Material",
|
||||
"texts": "Additional work, deviations, open items",
|
||||
"reports": "Reports and signature"
|
||||
},
|
||||
"field": {
|
||||
"customer": "Customer",
|
||||
"customerNumber": "Customer number",
|
||||
"billingAddress": "Billing address",
|
||||
"site": "Site",
|
||||
"orderNumber": "Order number",
|
||||
"externalOrderNumber": "External order number",
|
||||
"offerNumber": "Offer number",
|
||||
"title": "Order",
|
||||
"orderType": "Order type",
|
||||
"billingType": "Billing type",
|
||||
"team": "Team",
|
||||
"section": "Section",
|
||||
"workDates": "Work days",
|
||||
"billedAt": "Billed",
|
||||
"billingNotes": "Customer billing notes"
|
||||
},
|
||||
"billingType": { "fixed": "Fixed price", "time_material": "Time and material", "maintenance_contract": "Maintenance contract", "warranty": "Warranty" },
|
||||
"time": {
|
||||
"hm": "{value} h",
|
||||
"empty": "No approved times in this section.",
|
||||
"person": "Person",
|
||||
"work": "Work",
|
||||
"travel": "Travel time",
|
||||
"materialProcurement": "Material procurement",
|
||||
"total": "Total",
|
||||
"breaks": "Breaks (info)",
|
||||
"manual": "of which recorded manually (approved): {value} h",
|
||||
"sum": "Total",
|
||||
"breaksInfo": "Travel time = outbound + return travel. Breaks are listed for information only and are not part of the totals.",
|
||||
"pendingHint": "{value} h pending ({count} entries), not approved yet – not included.",
|
||||
"runningHint": "A time entry is still running and is not included."
|
||||
},
|
||||
"trips": {
|
||||
"count": "{count, plural, =0 {No trip} =1 {1 trip} other {# trips}}",
|
||||
"rule": "A crew travelling together counts as one trip."
|
||||
},
|
||||
"material": {
|
||||
"name": "Description",
|
||||
"articleNumber": "Item no.",
|
||||
"quantity": "Quantity",
|
||||
"planned": "Planned",
|
||||
"status": "Status",
|
||||
"reason": "Reason for deviation",
|
||||
"undocumented": "Not recorded",
|
||||
"empty": "No material in this section.",
|
||||
"used": "Material used",
|
||||
"additional": "Additional material",
|
||||
"notUsed": "Planned items not used",
|
||||
"notUsedInfo": "For information only."
|
||||
},
|
||||
"materialStatus": { "fully_used": "Fully used", "partially_used": "Partially used", "not_used": "Not used", "additional": "Additional" },
|
||||
"texts": {
|
||||
"fromReport": "({number})",
|
||||
"empty": "No details in the reports.",
|
||||
"additionalWork": "Additional work",
|
||||
"deviations": "Deviations",
|
||||
"openItems": "Open items"
|
||||
},
|
||||
"reports": {
|
||||
"empty": "No approved report in this section.",
|
||||
"number": "Report",
|
||||
"type": "Type",
|
||||
"date": "Date",
|
||||
"approvedAt": "Approved",
|
||||
"signature": "Signature",
|
||||
"noSignature": "No signature"
|
||||
},
|
||||
"reportType": { "daily": "Daily report", "completion": "Completion report" },
|
||||
"outcome": { "signed": "Signed", "customer_absent": "Customer absent", "refused": "Signature refused", "later": "Signature to follow", "not_required": "Not required" },
|
||||
"pdf": {
|
||||
"documentTitle": "Billing sheet {number} – {kind}",
|
||||
"page": "Page {page} of {pages}",
|
||||
"recordId": "Entry ID",
|
||||
"created": "Created"
|
||||
},
|
||||
"errors": {
|
||||
"not_found": "Not found or no permission.",
|
||||
"forbidden": "You are not allowed to do this.",
|
||||
"invalid": "Please check your input.",
|
||||
"conflict": "The entry has changed in the meantime. Reload the page.",
|
||||
"blocked": "Not possible yet.",
|
||||
"internal": "Action not possible.",
|
||||
"validation_failed": "Please check the required fields.",
|
||||
"billing_record_not_found": "Billing entry not found.",
|
||||
"billing_record_not_open": "The entry is no longer open.",
|
||||
"billing_record_not_billed": "The entry is not billed.",
|
||||
"pending_time_entries": "There are pending times. Please confirm that they are excluded.",
|
||||
"positions_already_billed": "Some positions have been billed elsewhere in the meantime. Reload the page.",
|
||||
"milestone_not_found": "Milestone not found.",
|
||||
"milestone_not_open": "Only open milestones can be changed.",
|
||||
"milestone_not_confirmable": "This milestone cannot be confirmed.",
|
||||
"milestone_not_reached": "Only reported milestones can be rejected.",
|
||||
"not_editable": "The order can no longer be changed in this status.",
|
||||
"work_order_not_found": "Order not found.",
|
||||
"work_order_status": "This is no longer possible for this order.",
|
||||
"transition_blocked": "The order status cannot be reset – details are missing.",
|
||||
"transition_forbidden": "You are not allowed to perform this status change.",
|
||||
"reason_required": "Please enter a reason.",
|
||||
"version_conflict": "The order has changed in the meantime. Reload the page."
|
||||
}
|
||||
}
|
||||
@@ -17,7 +17,8 @@
|
||||
"emergency_new": "New emergencies",
|
||||
"missing_signatures": "Missing signatures",
|
||||
"sync_conflicts": "Sync conflicts",
|
||||
"time_approvals": "Time approvals"
|
||||
"time_approvals": "Time approvals",
|
||||
"billing_ready": "Ready for billing"
|
||||
},
|
||||
"hints": {
|
||||
"open": "Not yet billed or cancelled",
|
||||
@@ -31,7 +32,8 @@
|
||||
"emergency_new": "New or in review",
|
||||
"missing_signatures": "Signature pending",
|
||||
"sync_conflicts": "Review offline changes",
|
||||
"time_approvals": "Review added time and corrections"
|
||||
"time_approvals": "Review added time and corrections",
|
||||
"billing_ready": "Open entries of the billing overview"
|
||||
},
|
||||
"open": "Show"
|
||||
}
|
||||
|
||||
@@ -14,5 +14,6 @@
|
||||
"crumb": "Module",
|
||||
"status": "Module under construction",
|
||||
"hint": "This area is currently being built. Navigation, module activation and permissions are already in place."
|
||||
}
|
||||
},
|
||||
"billing": "Billing overview"
|
||||
}
|
||||
|
||||
@@ -20,5 +20,6 @@
|
||||
"admin": "Admin console",
|
||||
"openMenu": "Open menu",
|
||||
"closeMenu": "Close menu",
|
||||
"timeApprovals": "Time approvals"
|
||||
"timeApprovals": "Time approvals",
|
||||
"billing": "Billing"
|
||||
}
|
||||
|
||||
@@ -51,7 +51,10 @@
|
||||
"time_rejected": "Time rejected",
|
||||
"planning_capacity_freed": "Finished early",
|
||||
"planning_overrun": "Planned duration exceeded",
|
||||
"planning_followup_at_risk": "Follow-up order at risk"
|
||||
"planning_followup_at_risk": "Follow-up order at risk",
|
||||
"milestone_reached": "Milestone reached",
|
||||
"milestone_confirmed": "Milestone confirmed",
|
||||
"milestone_rejected": "Milestone rejected"
|
||||
},
|
||||
"events": {
|
||||
"work_order_assigned": {
|
||||
@@ -145,6 +148,18 @@
|
||||
"planning_followup_at_risk": {
|
||||
"title": "Follow-up order at risk: {number}",
|
||||
"message": "{title} – {customer} ({team}) is at risk due to the delay of {blocker}."
|
||||
},
|
||||
"milestone_reached": {
|
||||
"title": "Milestone reached: {number}",
|
||||
"message": "{actor} reports a milestone of {number} as reached. Please confirm."
|
||||
},
|
||||
"milestone_confirmed": {
|
||||
"title": "Milestone confirmed: {number}",
|
||||
"message": "{actor} confirmed your reported milestone of {number}."
|
||||
},
|
||||
"milestone_rejected": {
|
||||
"title": "Milestone rejected: {number}",
|
||||
"message": "{actor} rejected your reported milestone of {number}: {reason}"
|
||||
}
|
||||
},
|
||||
"fallback": {
|
||||
|
||||
@@ -156,7 +156,8 @@
|
||||
"notes": "Notes",
|
||||
"reports": "Reports",
|
||||
"documents": "Documents",
|
||||
"history": "History"
|
||||
"history": "History",
|
||||
"billing": "Milestones & billing"
|
||||
}
|
||||
},
|
||||
"overview": {
|
||||
|
||||
Reference in New Issue
Block a user