From a36e23617575b1a798165addf31181dbffcbacca Mon Sep 17 00:00:00 2001 From: Matthias Hochmeister Date: Sun, 1 Mar 2026 14:53:46 +0100 Subject: [PATCH] bug fix for atemschutz --- backend/src/config/database.ts | 6 +++++- frontend/src/pages/Atemschutz.tsx | 19 ++++++++++++++----- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/backend/src/config/database.ts b/backend/src/config/database.ts index d884f8b..230b3e5 100644 --- a/backend/src/config/database.ts +++ b/backend/src/config/database.ts @@ -1,9 +1,13 @@ -import { Pool, PoolConfig } from 'pg'; +import { Pool, PoolConfig, types } from 'pg'; import * as fs from 'fs'; import * as path from 'path'; import environment from './environment'; import logger from '../utils/logger'; +// Override pg's default DATE parser: return plain 'YYYY-MM-DD' strings +// instead of JavaScript Date objects (which introduce timezone shifts). +types.setTypeParser(1082, (val: string) => val); + const poolConfig: PoolConfig = { host: environment.database.host, port: environment.database.port, diff --git a/frontend/src/pages/Atemschutz.tsx b/frontend/src/pages/Atemschutz.tsx index 520d14f..16a51e7 100644 --- a/frontend/src/pages/Atemschutz.tsx +++ b/frontend/src/pages/Atemschutz.tsx @@ -65,6 +65,15 @@ function formatDate(iso: string | null): string { }); } +/** Extract YYYY-MM-DD from an ISO timestamp or date string for */ +function toInputDate(iso: string | null | undefined): string { + if (!iso) return ''; + // Already YYYY-MM-DD + if (/^\d{4}-\d{2}-\d{2}$/.test(iso)) return iso; + // Full ISO timestamp — take the first 10 chars (YYYY-MM-DD) + return iso.substring(0, 10); +} + function getDisplayName(item: AtemschutzUebersicht): string { if (item.user_family_name || item.user_given_name) { return [item.user_family_name, item.user_given_name].filter(Boolean).join(', '); @@ -219,12 +228,12 @@ function Atemschutz() { setForm({ user_id: item.user_id, atemschutz_lehrgang: item.atemschutz_lehrgang, - lehrgang_datum: item.lehrgang_datum || '', - untersuchung_datum: item.untersuchung_datum || '', - untersuchung_gueltig_bis: item.untersuchung_gueltig_bis || '', + lehrgang_datum: toInputDate(item.lehrgang_datum), + untersuchung_datum: toInputDate(item.untersuchung_datum), + untersuchung_gueltig_bis: toInputDate(item.untersuchung_gueltig_bis), untersuchung_ergebnis: item.untersuchung_ergebnis || '', - leistungstest_datum: item.leistungstest_datum || '', - leistungstest_gueltig_bis: item.leistungstest_gueltig_bis || '', + leistungstest_datum: toInputDate(item.leistungstest_datum), + leistungstest_gueltig_bis: toInputDate(item.leistungstest_gueltig_bis), leistungstest_bestanden: item.leistungstest_bestanden || false, bemerkung: item.bemerkung || '', });