Files
CC-Manager/web/src/lib/format.ts
T
Harlekin f775b0a594 Reaktivierung haengt nur noch am Redesign, nicht am Grund
Ein CC, der nicht redesignt wurde, existiert unveraendert weiter und kommt
deshalb immer gratis zurueck - egal ob der Spieler inaktiv war oder die
Einheit voruebergehend aus dem Spiel genommen wurde. Bisher kostete der Fall
OTHER ein Guthaben, was die Regel unnoetig verkompliziert hat.

Damit der zweite Fall brauchbar wird, haelt inactiveNote den Grund im Klartext
fest ("Einheit bis Maerz entfernt"); die Notiz steht an der CC-Karte und wird
beim Reaktivieren wieder geleert.
2026-09-18 14:09:59 +02:00

50 lines
1.4 KiB
TypeScript

import type { CreditKind, CreditSource, InactiveReason, ImportPlan } from './types';
export const KIND_LABEL: Record<CreditKind, string> = {
CC: 'CC-Guthaben',
REDESIGN_PAID: 'Redesign (bezahlt)',
REDESIGN_KULANZ: 'Redesign (Kulanz)',
};
export const SOURCE_LABEL: Record<CreditSource, string> = {
CC_PACKAGE: 'CC-Paket',
REDESIGN_PACKAGE: 'Redesign-Paket',
KULANZ: 'Kulanz',
ADJUSTMENT: 'Korrektur',
CONSUME: 'Verbrauch',
REVERSAL: 'Storno',
};
export const REASON_LABEL: Record<InactiveReason, string> = {
PLAYER_INACTIVITY: 'Spieler-Inaktivitaet',
REWORKED: 'Redesignt',
OTHER: 'Anderer Grund',
};
export const PLAN_LABEL: Record<ImportPlan, string> = {
BOOK: 'Wird gebucht',
CREATE_PLAYER_AND_BOOK: 'Spieler anlegen + buchen',
SKIP_DUPLICATE: 'Uebersprungen: schon gebucht',
SKIP_IGNORED: 'Uebersprungen: ignoriertes Produkt',
SKIP_UNMAPPED: 'Uebersprungen: kein Mapping',
SKIP_NO_PLAYER: 'Uebersprungen: Spieler unbekannt',
};
const dateFormat = new Intl.DateTimeFormat('de-DE', {
day: '2-digit',
month: '2-digit',
year: 'numeric',
hour: '2-digit',
minute: '2-digit',
});
export function formatDate(value: string | null | undefined): string {
if (!value) return '—';
const parsed = new Date(value);
return Number.isNaN(parsed.getTime()) ? '—' : dateFormat.format(parsed);
}
export function formatAmount(amount: number): string {
return amount > 0 ? `+${amount}` : String(amount);
}