Stundenkonto: Vorschuss bei beendetem Abo als "verfällt, wird nicht berechnet" anzeigen (Abschlussprüfung W1)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
1742fb254d
commit
8685411a93
3 files changed
+29
-2
No files matched your search
@@ -14,9 +14,14 @@ const lesbar = (at) => typeof at === 'string' && at !== '' && !Number.isNaN(new
|
||||
|
||||
const HINWEIS_HOSTING = 'Hosting-Abo: kein Stundenkonto.'
|
||||
const HINWEIS_KEINS = 'Kein Abo: kein Stundenkonto.'
|
||||
// Vorschuss (Einrichtung ohne Deckung): mit laufendem Abo geht er in die nächsten Gutschriften, nach dem Ende des Abos verfällt er (E17: WEBklar trägt den Rest)
|
||||
const SUB_VORSCHUSS = 'wird mit den nächsten Gutschriften verrechnet'
|
||||
const SUB_VORSCHUSS_ENDE = 'verfällt, wird nicht berechnet'
|
||||
|
||||
// null (keine brauchbare Antwort) | { art: 'konto'|'hosting'|'keins', hinweis, eintraege: [{ key, label, wert, sub, ton }] }
|
||||
// Reihenfolge: Guthaben, Vorschuss (nur > 0), Mehraufwand (nur > 0), Verfall (nur mit Minuten und lesbarem Datum).
|
||||
// antwort.active (Portal, boolean, Abo läuft): nur ein ausdrückliches false ändert den Satz zum Vorschuss; fehlt das Feld (altes Portal) oder ist es
|
||||
// etwas anderes, gilt wie bisher "wird mit den nächsten Gutschriften verrechnet".
|
||||
export function stundenkontoAnsicht(antwort) {
|
||||
if (!istObjekt(antwort)) return null
|
||||
const ledger = antwort.ledger
|
||||
@@ -29,7 +34,7 @@ export function stundenkontoAnsicht(antwort) {
|
||||
const eintraege = [{ key: 'guthaben', label: 'Guthaben', wert: stepLabel(minuten(ledger.balanceMinutes)), sub: '', ton: '' }]
|
||||
const vorschuss = minuten(ledger.vorschussMinutes)
|
||||
if (vorschuss > 0) {
|
||||
eintraege.push({ key: 'vorschuss', label: 'Vorschuss (Einrichtung)', wert: stepLabel(vorschuss), sub: 'wird mit den nächsten Gutschriften verrechnet', ton: 'warn' })
|
||||
eintraege.push({ key: 'vorschuss', label: 'Vorschuss (Einrichtung)', wert: stepLabel(vorschuss), sub: antwort.active === false ? SUB_VORSCHUSS_ENDE : SUB_VORSCHUSS, ton: 'warn' })
|
||||
}
|
||||
const mehraufwand = minuten(ledger.overageMinutes)
|
||||
if (mehraufwand > 0) {
|
||||
|
||||
+1
-1
@@ -140,5 +140,5 @@ export const getCustomerAboStatus = (customerId) => request(`/customers/${enc(cu
|
||||
|
||||
// --- Stundenkonto (alle Mitarbeiter) ---
|
||||
|
||||
/** { produkt: 'hosting' | 'wartung' | null, ledger: { balanceMinutes, vorschussMinutes, overageMinutes, nextExpiry: { minutes, at } | null } | null } (Aufbereitung: stundenkontoView) */
|
||||
/** { produkt: 'hosting' | 'wartung' | null, active?: boolean (Abo läuft; fehlt bei einem älteren Portal), ledger: { balanceMinutes, vorschussMinutes, overageMinutes, nextExpiry: { minutes, at } | null } | null } (Aufbereitung: stundenkontoView) */
|
||||
export const getCustomerStundenkonto = (customerId) => request(`/customers/${enc(customerId)}/stundenkonto`)
|
||||
Reference in new issue
Block a user