From 174d2eb3409002bd482c2ce0861762acdf6feaca Mon Sep 17 00:00:00 2001 From: Herculino Trotta Date: Sat, 10 Oct 2026 18:19:07 -0300 Subject: [PATCH] fix(simulator): use money mask on amount field Match the other amount fields by using the Alpine money mask, and parse the masked value with the user's separators. --- app/templates/mini_tools/simulator.html | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/app/templates/mini_tools/simulator.html b/app/templates/mini_tools/simulator.html index 4912bb32..56784138 100644 --- a/app/templates/mini_tools/simulator.html +++ b/app/templates/mini_tools/simulator.html @@ -68,8 +68,11 @@
{% translate 'Amount' %} - +
{% translate 'Frequency' %} @@ -272,13 +275,19 @@ return year * 12 + month - 1; }; const currentMonth = keyToIndex(baseline.current_month); + // Amounts are masked with the user's separators, so normalize them before parsing + const {decimalSeparator, thousandSeparator} = document.getElementById('simulator').dataset; + const parseAmount = (value) => { + if (thousandSeparator) value = value.split(thousandSeparator).join(''); + return parseFloat(value.split(decimalSeparator).join('.')); + }; const parsed = entries.map(entry => { const picker = entry.startInput.monthPicker; const date = picker && picker.selectedDates[0]; return { type: entry.type, frequency: entry.frequency, - amount: parseFloat(entry.amount) || 0, + amount: parseAmount(entry.amount) || 0, start: date ? date.getFullYear() * 12 + date.getMonth() : currentMonth, interval: Math.max(parseInt(entry.interval) || 1, 1), unit: entry.unit,