diff --git a/Web/templates/termin_configure.html b/Web/templates/termin_configure.html
index 7765f4f..699c1c4 100644
--- a/Web/templates/termin_configure.html
+++ b/Web/templates/termin_configure.html
@@ -202,7 +202,19 @@
if (slotsAmountsInput) slotsAmountsInput.value = totalSlots;
if (slotsAmountsDisplay) slotsAmountsDisplay.innerText = totalSlots + " Slots gesamt";
}
-
+
+ // Helper utility in case your timeToMinutes handler doesn't catch empty strings safely
+ function safeTimeToMinutes(timeString) {
+ if (!timeString || typeof timeString !== 'string' || !timeString.includes(':')) {
+ return 0; // Return 0 instead of NaN for empty or missing values
+ }
+ const parts = timeString.split(':');
+ const hours = parseInt(parts[0], 10);
+ const minutes = parseInt(parts[1], 10);
+ if (isNaN(hours) || isNaN(minutes)) return 0;
+ return (hours * 60) + minutes;
+ }
+
// Berechnet die Slots basierend auf den konfigurierten Zeiten & Pausen
function calculateSlots() {
if (!slotLengthInput || !slotsAmountsInput || !clientsperslot) return;
@@ -212,25 +224,29 @@
updateSlotsDisplay(0);
return;
}
-
+
+ // FIX 1: Make sure we parse the input VALUE, defaulting to 1 if empty or invalid
+ const multiplier = parseInt(clientsperslot.value, 10) || 1;
+
let totalSlots = 0;
const rows = Array.from(daysContainer.querySelectorAll('[data-day-row]'));
-
+
rows.forEach(row => {
const startTime = row.querySelector('[data-time-start]')?.value;
const endTime = row.querySelector('[data-time-end]')?.value;
const pauseStart = row.querySelector('[data-time-pause-start]')?.value;
const pauseEnd = row.querySelector('[data-time-pause-end]')?.value;
-
+
if (!startTime || !endTime) return;
-
- const startMins = timeToMinutes(startTime);
- const endMins = timeToMinutes(endTime);
- const pauseStartMins = timeToMinutes(pauseStart);
- const pauseEndMins = timeToMinutes(pauseEnd);
-
- if (endMins <= startMins) return; // Ungültige Zeit
-
+
+ // Using safety parsing to prevent missing values from generating NaN
+ const startMins = safeTimeToMinutes(startTime);
+ const endMins = safeTimeToMinutes(endTime);
+ const pauseStartMins = safeTimeToMinutes(pauseStart);
+ const pauseEndMins = safeTimeToMinutes(pauseEnd);
+
+ if (isNaN(startMins) || isNaN(endMins) || endMins <= startMins) return;
+
// Wenn eine gültige Pause innerhalb der Start/Endzeit existiert
if (pauseStartMins > 0 && pauseEndMins > 0 && pauseStartMins < pauseEndMins && pauseStartMins > startMins && pauseStartMins < endMins) {
// Segment 1 (Vor der Pause)
@@ -248,8 +264,12 @@
totalSlots += Math.floor((endMins - startMins) / slotLength);
}
});
- totalSlotscomplete = totalSlots * Number(clientsperslot)
- updateSlotsDisplay(totalSlotscomplete);
+
+ // FIX 2: Multiply by our safely parsed input value scalar
+ const totalSlotscomplete = totalSlots * multiplier;
+
+ // Safety check: if anything went wrong anyway, fallback to 0 instead of displaying NaN
+ updateSlotsDisplay(isNaN(totalSlotscomplete) ? 0 : totalSlotscomplete);
}
// Synchronisiert das Textfeld und fügt den Break-Cut hinzu