Inputvaledierung für die Projektnummern

This commit is contained in:
2026-03-12 17:24:01 +01:00
parent 929b3eae57
commit af20dc6bd8
5 changed files with 117 additions and 8 deletions

View File

@@ -38,6 +38,21 @@ function getWeekendPercentage(date) {
return 100; // Kein Wochenende = 100% (normal)
}
/** Plausibilitätsprüfung Projektnummer: 7 Ziffern, beginnt mit 5, dann YY (Jahr), dann 4 Ziffern (z.B. 5260001). */
function isValidProjectNumber(value) {
if (value === null || value === undefined || String(value).trim() === '') return true;
return /^5\d{6}$/.test(String(value).trim());
}
function validateActivityProjectNumbers(activities) {
for (let i = 0; i < activities.length; i++) {
if (!isValidProjectNumber(activities[i].projectNumber)) {
return { valid: false, activityIndex: i + 1, value: activities[i].projectNumber };
}
}
return { valid: true };
}
// Statistiken laden
async function loadUserStats() {
try {
@@ -683,7 +698,8 @@ function renderWeek() {
data-date="${dateStr}"
data-field="activity${idx + 1}_project_number"
value="${activity.projectNumber || ''}"
placeholder="Projektnummer"
placeholder="z. B. 5260001"
title="7 Ziffern: 5 + Jahr (YY) + 4 Ziffern"
${timeFieldsDisabled} ${disabled}
onblur="saveEntry(this)"
class="activity-project-input">
@@ -1274,6 +1290,19 @@ async function saveEntry(input) {
projectNumber: projectInput ? (projectInput.value || null) : (currentEntries[date][`activity${i}_project_number`] || null)
});
}
const projectNumberCheck = validateActivityProjectNumbers(activities);
if (!projectNumberCheck.valid) {
const idx = projectNumberCheck.activityIndex;
const invalidInput = document.querySelector(`input[data-date="${date}"][data-field="activity${idx}_project_number"]`);
if (invalidInput) {
invalidInput.value = '';
}
if (activities[idx - 1]) {
activities[idx - 1].projectNumber = null;
}
alert(`Ungültige Projektnummer in Tätigkeit ${projectNumberCheck.activityIndex}: Die Projektnummer muss 7 Ziffern haben, mit 5 beginnen, gefolgt vom Jahr (YY) und 4 Ziffern (z.B. 5260001). Die Eingabe wurde geleert.`);
}
// Aktualisiere currentEntries mit den DOM-Werten
currentEntries[date].start_time = start_time;
@@ -1538,6 +1567,11 @@ async function saveEntry(input) {
});
const result = await response.json();
if (!response.ok) {
alert(result.error || 'Fehler beim Speichern');
return;
}
if (result.success) {
// Aktualisiere Stunden-Anzeige