From 5fe8fe2814a13c9d97282356ca87ee05df51a070 Mon Sep 17 00:00:00 2001 From: jtricerolph Date: Thu, 2 Jul 2026 20:47:01 +0000 Subject: [PATCH] =?UTF-8?q?Cashup:=20fix=20exchange=20table=20=E2=80=94=20?= =?UTF-8?q?show=20all=20over-par=20denominations?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Was filtering out any denomination with target=0 before checking if it was counted, so notes (default target £0) never appeared even when surplus. Now: skip only shortfalls where no target is set; surpluses always show. Also use denom.target from the saved record (backend already populates this) instead of current-settings lookup. Co-Authored-By: Claude Sonnet 4.6 --- frontend/src/pages/FloatManagement.tsx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/frontend/src/pages/FloatManagement.tsx b/frontend/src/pages/FloatManagement.tsx index 3135ff0..ed49cd0 100644 --- a/frontend/src/pages/FloatManagement.tsx +++ b/frontend/src/pages/FloatManagement.tsx @@ -76,12 +76,13 @@ function FloatRecordPrint({ record, changeTinTargets, onClose, closeLabel = 'New // Build exchange table for change tin: surplus → "to bank", shortfall → "in exchange" const exchangeRows = isTin ? CHANGE_TIN_DENOMS.map(d => { - const tgt = parseFloat(String(changeTinTargets[d.value.toFixed(2)] ?? 0)) - if (tgt <= 0) return null const denom = record.denominations.find(x => Math.abs(parseFloat(x.denomination_value) - d.value) < 0.001) + // Use per-denom target from the saved record (backend populates this); fall back to current settings + const tgt = parseFloat(String(denom?.target ?? changeTinTargets[d.value.toFixed(2)] ?? 0)) const counted = parseFloat(denom?.total_amount ?? '0') const diff = counted - tgt - if (Math.abs(diff) < 0.005) return null + if (Math.abs(diff) < 0.005) return null // at par — nothing to exchange + if (diff < 0 && tgt <= 0) return null // shortfall but no target set — skip return { label: d.label, toBank: diff > 0 ? diff : 0,