Files
certain/web/src/components/Money.jsx
T
GuidoandClaude Opus 4.8 e69be7f3d5 fix: negative Kontostände werden nicht mehr als positiv angezeigt
Die Money-Komponente gab den Betrag immer durch Math.abs() aus; das Vorzeichen
kam nur über das optionale sign-Prop. Kontostände (Konten-Seite und Dashboard-
Karte) übergeben keines – ein überzogenes Konto oder eine Kreditkartenschuld sah
dadurch positiv aus, während die Gesamtsumme korrekt negativ rechnete. Genau
dieser Widerspruch: alle Konten scheinbar im Plus, Gesamt im Minus.

Ohne sign steht der Wert für sich selbst und wird jetzt mit echtem Vorzeichen
(und rot) ausgegeben; mit sign bleibt es wie bisher, weil dort die Richtung aus
der Buchungsart kommt.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-21 07:01:04 +02:00

39 lines
1.4 KiB
React
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { formatMoney } from "../format";
// Zeigt einen Betrag in Kontowährung und – falls abweichend – zusätzlich den in
// die Hauptwährung umgerechneten Wert.
//
// `sign` ist für Listen gedacht, in denen die Richtung aus der Buchungsart kommt
// (Ausgabe/Einnahme): dort wird der Betrag ohne Vorzeichen geführt und hier mit
// +/− und Farbe versehen. OHNE `sign` steht der Wert für sich selbst – etwa ein
// Kontostand – und wird mit seinem echten Vorzeichen ausgegeben. Früher lief er
// auch dann durch Math.abs(), wodurch ein überzogenes Konto oder eine
// Kreditkartenschuld fälschlich positiv aussah.
export default function Money({
cents,
currency = "EUR",
baseCents = null,
baseCurrency = "EUR",
sign = null, // "pos" | "neg" | null
showConverted = true,
}) {
const negativ = !sign && Number(cents) < 0;
const cls = sign ? `amount ${sign}` : negativ ? "amount neg" : "amount";
const prefix = sign === "pos" ? "+" : sign === "neg" ? "−" : "";
const showBase =
showConverted && baseCents != null && currency !== baseCurrency;
return (
<span className="money">
<span className={cls}>
{prefix}
{formatMoney(sign ? Math.abs(cents) : cents, currency)}
</span>
{showBase && (
<span className="amount-converted">
≈ {formatMoney(sign ? Math.abs(baseCents) : baseCents, baseCurrency)}
</span>
)}
</span>
);
}