feat(handelsware-datev): Modulseite mit Import, Konten und Einstellungen

- Reiter Import: Vorschau mit neu-Markierung, Buchungsdatum (TTMM) aus dem Dateinamen, Download speichert neue Konten
- Reiter Konten: anlegen, bearbeiten, loeschen mit Rueckfrage, CSV-Import (ersetzt alles, nach Rueckfrage) und -Export
- Reiter Einstellungen nur fuer Administratoren; Texte de/en

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-10-02 11:47:09 +02:00
parent 44c1d4351f
commit 42b89f110b
15 changed files with 1726 additions and 1 deletions
+101
View File
@@ -1698,6 +1698,107 @@
"saved": "The settings have been saved."
}
},
"handelswareDatev": {
"title": "Merchandise",
"description": "Map merchandise sales from Excel to revenue accounts and download them as a DATEV booking file.",
"tabs": {
"import": "Import",
"accounts": "Accounts",
"settings": "Settings"
},
"loading": "Loading …",
"notConfigured": {
"admin": "The default revenue account and the starting counter account have not been set yet. Without them no accounts can be assigned.",
"adminAction": "Go to settings",
"user": "An administrator has to set the default revenue account and the starting counter account first."
},
"import": {
"dropPlaceholder": "Drag an Excel file here or click",
"dropFormats": ".xlsx, booking text in column A, amount in column B, header text in cell B1",
"clear": "Remove file",
"checking": "Checking file …",
"headerText": "Header text",
"exportFilename": "Download file name",
"date": "Booking date (DDMM)",
"dateHint": "Derived from the file name (last day of the month) and can be changed.",
"dateInvalid": "Please enter the date as DDMM, for example 3103 for 31 March.",
"columns": {
"text": "Booking text",
"amount": "Amount",
"sh": "D/C",
"counter": "Counter account",
"date": "Date",
"revenue": "Revenue account"
},
"newBadge": "new",
"newSummary": "{count, plural, one {One new account will be saved when you download} other {# new accounts will be saved when you download}}",
"noNewAccounts": "All products already have an account.",
"totals": "Total debit {debit}, total credit {credit}",
"truncated": "Showing the first {shown} of {total} rows. The file contains all rows.",
"noRows": "The file contains no data rows.",
"rowErrorsTitle": "Faulty rows",
"rowErrorLine": "Row {line}",
"download": "Download booking file",
"downloading": "Creating file …",
"downloaded": "The file {filename} has been downloaded. {count, plural, =0 {No new accounts were saved.} one {One new account was saved.} other {# new accounts were saved.}}",
"reloadPreview": "Reload preview"
},
"accounts": {
"name": "Name",
"counter": "Counter account",
"revenue": "Revenue account",
"actions": "Actions",
"empty": "There are no accounts yet.",
"add": "Add",
"edit": "Edit",
"save": "Save",
"cancel": "Cancel",
"delete": "Delete",
"deleteConfirm": "Really delete account “{name}”?",
"deleteYes": "Yes, delete",
"namePlaceholder": "Product name",
"importCsv": "Import CSV",
"exportCsv": "Export CSV",
"importConfirm": "{count, plural, =0 {The empty account list is} one {The existing account is} other {All # existing accounts are}} replaced by the content of the file “{file}”. Continue?",
"importReplace": "Replace accounts",
"importDone": "{count, plural, one {One account was imported.} other {# accounts were imported.}}",
"importErrors": "The file contains errors, nothing was changed:",
"csvHint": "CSV format: Name;Counter account;Account (semicolon, UTF-8 or Windows-1252).",
"invalidNumber": "Counter account and revenue account must be whole numbers.",
"nameRequired": "Please enter a name."
},
"settings": {
"intro": "These values apply to all users of your tenant and only have to be set once.",
"erloeskonto": "Default revenue account",
"erloeskontoHelp": "Assigned to new accounts.",
"startGegenkonto": "Starting counter account",
"startGegenkontoHelp": "First number handed out when the account list is empty.",
"numberInvalid": "Please enter a whole number from 1 to 999999999.",
"save": "Save",
"saving": "Saving …",
"saved": "The settings have been saved."
},
"errors": {
"settingsMissing": "The default revenue account and the starting counter account have not been set yet.",
"invalidFile": "The file is not a valid Excel file.",
"tooManyRows": "The file contains too many data rows (10000 at most).",
"rowErrors": "The file contains faulty rows and cannot be exported.",
"noRows": "The file contains no data rows.",
"buchungsdatumInvalid": "The booking date must be given as DDMM, for example 3103.",
"accountsChanged": "The account list has changed in the meantime. Please upload the file again to refresh the preview.",
"nameTaken": "An account with this name already exists.",
"umsatzInvalid": "The amount is not a valid number.",
"csvErrors": "The CSV file contains errors. Nothing was changed.",
"newAccountsInvalid": "The details of the new accounts are invalid.",
"nameEmpty": "The name is missing.",
"nameTooLong": "The name is too long (120 characters at most).",
"gegenkontoInvalid": "The counter account must be a whole number from 1 to 999999999.",
"erloeskontoInvalid": "The revenue account must be a whole number from 1 to 999999999.",
"missingErloeskonto": "The revenue account is missing and no default revenue account is set.",
"duplicateName": "The name appears more than once in the file.",
"request": "The request failed. Please try again."
}
},
"moduleCategories": {
"domain-tools": "Domains",
"security-tools": "Security",