fix(multi): FDISK sync, order UX, Ausbildungen display, untracked items
FDISK sync: - fix(sync): strip 'KFZ-Führerschein / ' prefix from license class select option text before whitelist validation - fix(sync): fix navigateAndGetTableRows to pick date column with most matches (prevents sidebar tables from hijacking dateColIdx for Beförderungen) - fix(sync): input.value fallback now falls through to textContent when value is empty - feat(sync): expand Ausbildungen to capture Kursnummer, Kurz, Kurs (full name), Erfolgscode from FDISK table; add migration 086 External orders (Bestellungen): - fix(bestellungen): allow erhalten_menge editing in lieferung_pruefen status (resolves deadlock preventing order completion) - fix(bestellungen): show cost/received warnings for bestellt/teillieferung/lieferung_pruefen, not just when abgeschlossen is next - feat(bestellungen): rename status labels to Eingereicht, Genehmigt, Teilweise geliefert, Vollständig geliefert - fix(bestellungen): remove duplicate Bestelldatum from PDF export - feat(bestellungen): add catalog item autocomplete to creation form (auto-fills bezeichnung + artikelnummer) Internal orders (Ausruestungsanfrage): - fix(ausruestung): untracked items with zuweisung_typ='keine' now appear in Nicht-zugewiesen tab (frontend filter was too strict) - feat(ausruestung): load user-specific personal items when ordering for another user - feat(ausruestung): auto-set ist_ersatz=true for items from personal equipment list; add toggle for catalog/free-text items - feat(ausruestung): load item eigenschaften when personal item with artikel_id is checked Ausbildungen display: - feat(mitglieder): show kursname (full), kurs_kurzbezeichnung chip, erfolgscode chip (color-coded) per Ausbildung entry Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -243,17 +243,20 @@ export async function syncToDatabase(
|
||||
const userId = result.rows[0].user_id;
|
||||
|
||||
const upsertResult = await client.query<{ was_inserted: boolean }>(
|
||||
`INSERT INTO ausbildung (user_id, kursname, kurs_datum, ablaufdatum, ort, bemerkung, fdisk_sync_key)
|
||||
VALUES ($1, $2, $3::date, $4::date, $5, $6, $7)
|
||||
`INSERT INTO ausbildung (user_id, kursname, kursnummer, kurs_kurzbezeichnung, erfolgscode, kurs_datum, ablaufdatum, ort, bemerkung, fdisk_sync_key)
|
||||
VALUES ($1, $2, $3, $4, $5, $6::date, $7::date, $8, $9, $10)
|
||||
ON CONFLICT (user_id, fdisk_sync_key) DO UPDATE SET
|
||||
kursname = EXCLUDED.kursname,
|
||||
kurs_datum = EXCLUDED.kurs_datum,
|
||||
ablaufdatum = EXCLUDED.ablaufdatum,
|
||||
ort = EXCLUDED.ort,
|
||||
bemerkung = EXCLUDED.bemerkung,
|
||||
updated_at = NOW()
|
||||
kursname = EXCLUDED.kursname,
|
||||
kursnummer = EXCLUDED.kursnummer,
|
||||
kurs_kurzbezeichnung = EXCLUDED.kurs_kurzbezeichnung,
|
||||
erfolgscode = EXCLUDED.erfolgscode,
|
||||
kurs_datum = EXCLUDED.kurs_datum,
|
||||
ablaufdatum = EXCLUDED.ablaufdatum,
|
||||
ort = EXCLUDED.ort,
|
||||
bemerkung = EXCLUDED.bemerkung,
|
||||
updated_at = NOW()
|
||||
RETURNING (xmax = 0) AS was_inserted`,
|
||||
[userId, ausb.kursname, ausb.kursDatum, ausb.ablaufdatum, ausb.ort, ausb.bemerkung, ausb.syncKey]
|
||||
[userId, ausb.kursname, ausb.kursnummer, ausb.kurzbezeichnung, ausb.erfolgscode, ausb.kursDatum, ausb.ablaufdatum, ausb.ort, ausb.bemerkung, ausb.syncKey]
|
||||
);
|
||||
|
||||
if (upsertResult.rows[0]?.was_inserted) {
|
||||
|
||||
Reference in New Issue
Block a user