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>
This commit is contained in:
@@ -1,7 +1,14 @@
|
|||||||
import { formatMoney } from "../format";
|
import { formatMoney } from "../format";
|
||||||
|
|
||||||
// Zeigt einen Betrag in Kontowährung und – falls abweichend – zusätzlich den in
|
// Zeigt einen Betrag in Kontowährung und – falls abweichend – zusätzlich den in
|
||||||
// die Hauptwährung umgerechneten Wert. `sign` färbt +/− (grün/rot).
|
// 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({
|
export default function Money({
|
||||||
cents,
|
cents,
|
||||||
currency = "EUR",
|
currency = "EUR",
|
||||||
@@ -10,7 +17,8 @@ export default function Money({
|
|||||||
sign = null, // "pos" | "neg" | null
|
sign = null, // "pos" | "neg" | null
|
||||||
showConverted = true,
|
showConverted = true,
|
||||||
}) {
|
}) {
|
||||||
const cls = sign ? `amount ${sign}` : "amount";
|
const negativ = !sign && Number(cents) < 0;
|
||||||
|
const cls = sign ? `amount ${sign}` : negativ ? "amount neg" : "amount";
|
||||||
const prefix = sign === "pos" ? "+" : sign === "neg" ? "−" : "";
|
const prefix = sign === "pos" ? "+" : sign === "neg" ? "−" : "";
|
||||||
const showBase =
|
const showBase =
|
||||||
showConverted && baseCents != null && currency !== baseCurrency;
|
showConverted && baseCents != null && currency !== baseCurrency;
|
||||||
@@ -18,10 +26,12 @@ export default function Money({
|
|||||||
<span className="money">
|
<span className="money">
|
||||||
<span className={cls}>
|
<span className={cls}>
|
||||||
{prefix}
|
{prefix}
|
||||||
{formatMoney(Math.abs(cents), currency)}
|
{formatMoney(sign ? Math.abs(cents) : cents, currency)}
|
||||||
</span>
|
</span>
|
||||||
{showBase && (
|
{showBase && (
|
||||||
<span className="amount-converted">≈ {formatMoney(Math.abs(baseCents), baseCurrency)}</span>
|
<span className="amount-converted">
|
||||||
|
≈ {formatMoney(sign ? Math.abs(baseCents) : baseCents, baseCurrency)}
|
||||||
|
</span>
|
||||||
)}
|
)}
|
||||||
</span>
|
</span>
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user