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:
1 parent
312705efc4
commit
e1c9b57249
2 files changed
+82
-1
No files matched your search
@@ -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.' }
|
||||
}
|
||||
Reference in new issue
Block a user