Aufträge und Rechnungen: frische Kundenart und Rückmeldungen nach Rechnung und Auftrag (mit Tests)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Sonnet 5.5 committed 2026-10-07 14:24:47 +00:00
1 parent 312705efc4
commit e1c9b57249
2 files changed
+82 -1

No files matched your search

+38
View File
@@ -1,6 +1,7 @@
// Ansichtslogik des Reiters „Aufträge und Rechnungen“ (rein, ohne React und ohne Appwrite; unter Node testbar).
// Die API-Funktionen kommen als Argument. Der Container (AuftraegeUndRechnungen.jsx) verdrahtet diese Funktionen mit
// useFinanceResource und den Abschnitten des Reiters.
import { invoiceDoneMessage } from './financeView'
export const KONTEN_FEHLER = 'Die Projektübersicht konnte nicht geladen werden.'
export const AUFTRAEGE_FEHLER = 'Die Aufträge konnten nicht geladen werden.'
@@ -67,3 +68,40 @@ export function ansichtsZustand({ data, error } = {}) {
auftraege: auftraegeAktiv && Array.isArray(data.auftraege) ? data.auftraege : [],
}
}
// Wertebereich von customers.kundenart (V1); bewusst lokal, auftragView.js gehört dem Strang W2
const KUNDENARTEN = ['unternehmen', 'privat']
/**
* Kundendokument mit der frischen Kundenart des Portals (getProjektkonten -> kunde.kundenart). Gilt nur ein gültiger Wert
* („unternehmen“ oder „privat“), kommt eine Kopie mit diesem Wert zurück, das Dokument der Seite bleibt unverändert.
* Sonst dieselbe Referenz (null bleibt null). So fragt der AB-Dialog nicht erneut, wenn die Kundenart eben gespeichert wurde
* und die Kundenseite noch den alten Datensatz hält.
*/
export function kundeMitKundenart(customer, kundeInfo) {
const art = istObjekt(kundeInfo) ? kundeInfo.kundenart : undefined
if (!customer || !KUNDENARTEN.includes(art)) return customer
return { ...customer, kundenart: art }
}
/**
* Rückmeldung nach dem Anlegen einer Rechnung (wie InvoiceTable.handleCreated): `info.notice` (festgeschrieben, aber nicht
* versendet) gewinnt mit seinem Ton, sonst Entwurf oder gesendet. `info` darf fehlen oder null sein. -> { tone, text }
*/
export function erstelltMeldung(rechnung, info) {
const i = istObjekt(info) ? info : {}
if (typeof i.notice === 'string' && i.notice) return { tone: i.tone || 'ok', text: i.notice }
return { tone: 'ok', text: invoiceDoneMessage(i.senden ? 'create-send' : 'create-draft', rechnung) }
}
/** Rückmeldung nach dem Speichern oder Senden einer Auftragsbestätigung (onSaved des AB-Dialogs). -> { tone, text } */
export function auftragMeldung(auftrag) {
const a = istObjekt(auftrag) ? auftrag : {}
const name = a.nummer ? `Auftragsbestätigung ${a.nummer}` : 'Die Auftragsbestätigung'
if (a.status === 'entwurf') return { tone: 'ok', text: 'Der Entwurf wurde gespeichert.' }
if (a.mailStatus === 'fehler') {
return { tone: 'warn', text: `${name} ist versendet, die Mail an den Kunden wurde aber nicht zugestellt. Bitte in der Liste erneut senden.` }
}
if (a.nummer) return { tone: 'ok', text: `${name} wurde${a.gesendetAn ? ` an ${a.gesendetAn}` : ''} gesendet.` }
return { tone: 'ok', text: 'Die Auftragsbestätigung wurde gespeichert.' }
}