Finanzen: Einstellungen, Rechnungen am Kunden, InvoiceNinja aus der Oberflaeche entfernt

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Sonnet 5.5 committed 2026-10-01 15:12:18 +00:00
1 parent 24a3cc41ef
commit 2aacdb2d56
24 files changed
+1410 -499

No files matched your search

+27
View File
@@ -46,6 +46,7 @@ const {
customerPickerOptions,
customerSuggestions,
resolveCustomerText,
customerInvoicesGate,
sortTransactions,
strongestSuggestion,
suggestionText,
@@ -1184,3 +1185,29 @@ test('assignBody und invoiceAssignConfirmText', () => {
assert.deepEqual(assignBody(null, 'x'), { note: 'x' })
assert.equal(invoiceAssignConfirmText('WK-0005'), 'Die Rechnung WK-0005 wird in Stripe als bezahlt markiert. Das lässt sich nicht rückgängig machen.')
})
test('customerInvoicesGate: fester Kunde mit E-Mail darf, alle anderen bekommen Grund und Hinweis', () => {
assert.deepEqual(customerInvoicesGate({ $id: 'c1', name: 'A', email: 'a@example.invalid', customerStatus: 'customer' }), { ok: true })
// Bestandsdaten ohne Status zählen als fester Kunde
assert.deepEqual(customerInvoicesGate({ $id: 'c1', name: 'A', email: 'a@example.invalid' }), { ok: true })
const lead = customerInvoicesGate({ name: 'A', email: 'a@example.invalid', customerStatus: 'lead' })
assert.equal(lead.ok, false)
assert.equal(lead.title, 'Noch ein Lead')
assert.equal(lead.hint, 'Erst zum festen Kunden machen (vollständige Daten nötig), dann sind Rechnungen möglich.')
// Lead ohne E-Mail: der Lead-Hinweis hat Vorrang
assert.equal(customerInvoicesGate({ name: 'A', email: '', customerStatus: 'LEAD' }).title, 'Noch ein Lead')
const lost = customerInvoicesGate({ name: 'A', email: 'a@example.invalid', customerStatus: 'lost' })
assert.deepEqual(lost, { ok: false, title: 'Noch kein fester Kunde', hint: 'Rechnungen gibt es nur für feste Kunden.' })
const noMail = customerInvoicesGate({ name: 'A', email: ' ', customerStatus: 'customer' })
assert.equal(noMail.ok, false)
assert.equal(noMail.title, 'E-Mail fehlt')
assert.match(noMail.hint, /E-Mail-Adresse in den Stammdaten/)
const none = customerInvoicesGate(null)
assert.equal(none.ok, false)
assert.equal(none.title, 'Kein Kunde ausgewählt')
assert.equal(none.hint, '')
})