- Implemented a new method `ShapeTableNames` to gather entity and navigation table names, ensuring no blanks or duplicates are included. - Updated `FdsMfrClient` to handle cases where schema queries return no tables, logging appropriate warnings and preventing misleading errors. - Introduced `PdfPreviewAsync` in `IntranetController` to manage PDF preview rendering, capturing detailed logs for failures and notifying users with readable error messages. - Added comprehensive unit tests for error logging and table name shaping to ensure robustness and correctness. - Documented decision to persist user action failures to the `fds__admin_logdebug` table, enhancing support diagnostics.
149 lines
9.0 KiB
JavaScript
149 lines
9.0 KiB
JavaScript
let $ict = {
|
||
mdl: 'Rechnungen',
|
||
iov: {
|
||
all: 'Rechnungen (alle)', '': 'Rechnungen (nur fertige)', '#d': 'Rechnungen (nur Entwürfe)', '#u': 'Rechnungen (nur unbezahlt)', '#r': 'Rechnungen (nur angemahnt)', '#a': 'Rechnungen (nur Akonto)', '#c': 'Rechnungen (nur Storno)', '#ru': 'Rechnungen (nur angemahnt + unbez.)'
|
||
},
|
||
uba: ', gesamter Zeitraum)',
|
||
req: 'Auftrag',
|
||
inv: 'Rechnung',
|
||
rem: 'Mahnung',
|
||
in: 'Rechnungsnummer',
|
||
cc: 'Kunde',
|
||
wk: 'Woche',
|
||
nd: 'Keine Daten gefunden.',
|
||
dl: 'Herunterladen',
|
||
ed: 'Bearbeiten',
|
||
ced: 'Bearbeitung fortsetzen',
|
||
sItm: 'Einzelheiten anzeigen',
|
||
sPay: 'Zahlungen anzeigen',
|
||
cdI: 'Entwurf der Rechnung löschen?',
|
||
rel: 'Neu Laden',
|
||
relm: 'Bitte laden Sie Liste manuell neu, um die Änderungen zu sehen.',
|
||
dsp: 'Rechnung anzeigen',
|
||
storno: 'Storno-Rechnung erstellen',
|
||
credit: 'Gutschrift erstellen',
|
||
remd: 'Mahnung erstellen',
|
||
remdt: 'Mahnung erstellen zur Rechnung {0}',
|
||
remlst: 'Mahnungen anzeigen',
|
||
remdsp: 'Mahnung anzeigen',
|
||
remres: 'Mahnung erneut senden',
|
||
remresc: 'Mahnung {0} wirklich erneut senden?',
|
||
remresr: 'Mahnung {0} wurde erfolgreich versandt.',
|
||
setpyd: 'Bezahlt markieren',
|
||
cpyd: 'Rechnung wirklich als bezahlt markieren?',
|
||
setupd: 'Bezahlt-Markierung aufheben',
|
||
cupd: 'Bezahlt-Markierung wirklich aufheben?',
|
||
ivE: 'Die Email-Adresse ist vermutlich nicht gültig.',
|
||
ivEc: '\nMöchten Sie fortfahren?',
|
||
pna: 'Diese Seite ist in der Vorschau nicht verfügbar',
|
||
tpe: 'Die Anzahl von {0} Seiten wird aktuell nicht unterstützt',
|
||
eis: 'Der Rechnungsentwurf konnte nicht gespeichert werden.',
|
||
pvf: 'Die PDF-Vorschau konnte nicht erstellt werden.',
|
||
pvto: 'Der Server hat nicht rechtzeitig geantwortet (Zeitüberschreitung). Bitte versuchen Sie es erneut.',
|
||
pvgone: 'Der Entwurf ist auf dem Server nicht mehr vorhanden (Sitzung abgelaufen). Bitte öffnen Sie den Entwurf erneut.',
|
||
iss: 'Zwischenstand speichern.',
|
||
p13b: 'USt -> §13b',
|
||
setm: 'Set-Preisanzeige',
|
||
setmo: {
|
||
setprice: 'Set mit Preis – Positionen ohne Preis',
|
||
setonly: 'Nur Set mit Preis – Positionen ausgeblendet'
|
||
},
|
||
/* user-defined set structure dialog (ADR 0016) */
|
||
setst: 'Set-Struktur bearbeiten',
|
||
setsHint: 'Reihenfolge: Zeile per Drag & Drop an den oberen/unteren Rand einer anderen Zeile ziehen (davor/danach) oder ▲▼ nutzen. Zuordnung: Zeile auf die Mitte eines Sets ziehen (hinein) bzw. auf die Auftragszeile oder "oberste Ebene" (aus dem Set lösen); ◀▶ ändert die Ebene. Sets lassen sich über das Dreieck zu-/aufklappen und auch zugeklappt verschieben – ihre Positionen wandern mit. Änderungen werden sofort übernommen.',
|
||
setsUp: 'Nach oben (innerhalb der Ebene)',
|
||
setsDown: 'Nach unten (innerhalb der Ebene)',
|
||
setsCollapse: 'Set zuklappen',
|
||
setsExpand: 'Set aufklappen',
|
||
setsHR: ['', 'Pos.', 'Typ', 'Menge', 'Bezeichnung', 'Reihenfolge / Ebene'],
|
||
setsRoot: 'Hierher ziehen = aus dem Set lösen (oberste Ebene)',
|
||
setsOut: 'Eine Ebene höher (aus dem Set lösen)',
|
||
setsIn: 'Eine Ebene tiefer (dem vorangehenden Set zuordnen)',
|
||
setsNew: 'Neu:',
|
||
setsInto: 'in',
|
||
setsTop: 'oberste Ebene',
|
||
setsTitle: 'Bezeichnung',
|
||
setsAdd: 'Hinzufügen',
|
||
setsNoTitle: '(ohne Bezeichnung)',
|
||
settyp: { set: 'Set', text: 'Text', title: 'Text', material: 'Material', service: 'Arbeitsleistung', equipment: 'Ausrüstung', other: 'Position', osum: 'Zusammenfassung', intinvoiceallocation: 'Abschlag', intinvoiceallocationdiff: 'Abschlag (offen)' },
|
||
ctp: 'Ansprechpartner festlegen',
|
||
mfr: 'Von MFR neu abrufen',
|
||
rq1: 'Auftragsdaten werden von MFR abgerufen.\nDer Vorgang kann bis zu 90Sek dauern.',
|
||
rq2: 'Auftragsdaten werden geladen',
|
||
iq1: 'Rechnungsdaten werden von MFR abgerufen.\nDer Vorgang kann bis zu 90Sek dauern.',
|
||
iq2: 'Rechnungsdaten werden geladen',
|
||
sis: 'Rechnung als versandt markieren',
|
||
srs: 'Mahnung als versandt markieren',
|
||
sisc: 'Rechnung wirklich als versandt markieren?',
|
||
srsc: 'Mahnung wirklich als versandt markieren?',
|
||
iSt: {dft: 'Entwurf', uns: 'nicht versandt', pyd: 'bezahlt', cc: 'storniert', op: 'offen', due: 'fällig', ovd: 'überfällig', rem: 'angemahnt' },
|
||
rSt: ['', 'Überfällig', '2. Mahnung', '3. Stufe'],
|
||
pSt: { 'a': 'Vollst.', 'p': 'Teilz.' },
|
||
ivT: { i: 'AbschlagsR.', f: 'SchlussR', r: 'Rechnung', c: 'StornoR.' },
|
||
rovlh: 'Übersicht der bisherigen Mahnungen',
|
||
rovl: ['Betreff', 'Betrag', 'Betrag gezahlt', 'fertiggestellt am'],
|
||
remHR: ['Rechnung', 'vom', 'Rechnungsbetrag', 'bereits bezahlt', 'noch offen'],
|
||
// Reminder intro/closing notice texts are backend-authoritative (see FuchsPdf.BuildReminderNotes /
|
||
// $inv.rd.notes) — no client-side copies here.
|
||
translatePaymentTerm: (pt) => (pt || '').replace('wd', ' Werktagen').replace('d', ' Tagen').replace('wk', ' Wochen') || '10 Tagen'
|
||
, payi: { account: 'Konto', name: 'Zahler', text: 'Verw.Zweck', InvoiceID: 'Rechnung', amount: 'Betrag', date: 'Datum', manual: 'Typ'}
|
||
}, $invcol = {
|
||
datev: new fields_definition('Rechnung', 'Rechnungen', [
|
||
{ name: 'Umsatz (ohne Soll/Haben-Kz)', label: 'Umsatz (ohne Soll/Haben-Kz)', type: 'string' },
|
||
/*{ name: 'EINZELPOS_brutto', label: 'EINZELPOS_brutto', type: 'string' },
|
||
{ name: 'EINZELPOS_netto', label: 'EINZELPOS_netto', type: 'string' },*/
|
||
{ name: 'vf', label: 'vf', type: 'string' },
|
||
{ name: 'Soll/Haben-Kennzeichen', label: 'Soll/Haben-Kennzeichen', type: 'string' },
|
||
{ name: 'Konto', label: 'Konto', type: 'string' },
|
||
{ name: 'Gegenkonto', label: 'Gegenkonto', type: 'string' },
|
||
{ name: 'BU-Schlüssel', label: 'BU-Schlüssel', type: 'string' },
|
||
{ name: 'Belegdatum', label: 'Belegdatum', type: 'string' },
|
||
{ name: 'Belegfeld 1', label: 'Belegfeld 1', type: 'string' },
|
||
{ name: 'Belegfeld 2', label: 'Belegfeld 2', type: 'string' },
|
||
{ name: 'Buchungstext', label: 'Buchungstext', type: 'string' }
|
||
])
|
||
, inv: new fields_definition('Rechnung', 'Rechnungen', [
|
||
{ name: 'invstatus', label: 'Status', type: 'select', url: $ict.iSt },
|
||
{ name: 'balance', label: 'Umsatz', type: 'string', dtype: 'currency' },
|
||
{ name: 'CustomerName', label: 'Kunde', type: 'string' },
|
||
{ name: 'InvoiceId', label: 'RNummer', type: 'string' },
|
||
{ name: 'InvoiceType', label: 'Typ', type: 'select', url: $ict.ivT },
|
||
//{ name: 'requestcount', label: 'Anz. Aufträge', type: 'string', dtype: 'num' },
|
||
{ name: 'request', label: 'Auftrag', type: 'string', dtype: 'num' },
|
||
/*{ name: 'EINZELPOS_brutto', label: 'EINZELPOS_brutto', type: 'string', dtype: 'currency' },
|
||
{ name: 'EINZELPOS_netto', label: 'EINZELPOS_netto', type: 'string', dtype: 'currency' },*/
|
||
{ name: 'vat', label: 'MwSt', type: 'string', dtype: 'num' },
|
||
{ name: 'deb_cred', label: 'Soll/Haben', type: 'string' },
|
||
{ name: 'customer', label: 'Konto', type: 'string', dtype: 'num' },
|
||
{ name: 'contra_account', label: 'Gegenkonto', type: 'string', dtype: 'num' },
|
||
{ name: 'Belegdatum', label: 'Belegdatum', type: 'date' },
|
||
{ name: 'reminderstatus', label: 'MahnStatus', type: 'select', url: $ict.rSt },
|
||
{ name: 'reminder', label: '# Mahnungen', type: 'integer' },
|
||
{ name: 'Buchungstext', label: 'Buchungstext', type: 'string' },
|
||
{ name: 'Payment', label: 'Zahlung', type: 'string' }
|
||
/*{ name: 'PaymentStatus', label: 'Zahlungsstatus', type: 'select', url: $ict.pSt}*/
|
||
|
||
])
|
||
, rem: new fields_definition('Zahlungserinnerung', 'Zahlungserinnerung', [
|
||
{ name: 'amount', label: 'Rechnungsbetrag', type: 'number', precision: '0.01', value: 1 },
|
||
{ name: 'amount_payed', label: 'bereits bezahlt', type: 'number', precision: '0.01', value: 1 }
|
||
])
|
||
, rem2: new fields_definition('Zahlungserinnerung', 'Zahlungserinnerung', [
|
||
{ name: 'DocumentName', label: 'Name', type: 'string' },
|
||
{ name: 'subject', label: 'Betreff', type: 'string' },
|
||
{ name: 'DateSent', label: 'Versanddatum', type: 'date' },
|
||
{ name: 'status', label: 'Status', type: 'string' },
|
||
//{ name: 'IsDraft', label: 'Entwurf', type: 'boolean' },
|
||
{ name: 'amount_open', label: 'offener Betrag', type: 'number', precision: '0.01' },
|
||
{ name: 'InvoiceId', label: 'RNummer', type: 'string' },
|
||
//{ name: 'InvoiceDocumentName', label: 'RechnungName', type: 'string' }
|
||
])
|
||
, rid: new fields_definition('Zahlungserinnerung', 'Zahlungserinnerung', [
|
||
{ name: 'type', label: 'Typ', type: 'select', url: [['f', 'einfache Zahlungserinnerung'],[ 'm', 'Mahnung'],[ 'l', 'letzte Mahnung']], required: true},
|
||
{ name: 'level', label: 'Stufe', type: 'select', url: [['1', 'Stufe 1'], ['2', 'Stufe 2'], ['3', 'Stufe 3'], ['4', 'Stufe 4'], ['5', 'Stufe 5'], ['6', 'Stufe 6']], required: true }
|
||
])
|
||
, ctp: new fields_definition('Ansprechpartner', 'Ansprechpartner', [
|
||
{ name: 'name', label: 'Name', type: 'string' },
|
||
{ name: 'email', label: 'Email', type: 'string' }
|
||
])
|
||
}; |