Bearbeiten zeigt jetzt, was schon eingetragen war -- und loescht es nicht mehr

Filipe, screen19: "wenn ich auf bearbeiten drücke will ich dass mir immer
die daten angezeigt werden die schon ausgewählt wurden, damit ich auch
immer sehe okee das war alles und das änder ich."

Das war nicht nur unbequem, es war ein DATENVERLUST. Das Feld "Mit wem"
wurde beim Bearbeiten nie gefuellt und stand leer da. Beim Speichern wird
`teilnehmer_extern` aber trotzdem mitgeschickt -- der leere Wert
ueberschrieb also den vorhandenen. Wer einen Termin mit einem frei
eingetragenen Namen ("BananaStift") bearbeitete und speicherte, hatte den
Namen danach verloren, ohne ihn je gesehen zu haben. Nichts stuerzte ab,
nichts meldete sich; er war einfach weg.

DIE URSACHE lag tiefer als im Kalender: `window.personenwahl` konnte
lesen (`wert`, `extern`) und leeren (`zuruecksetzen`), aber NICHT
fuellen. Ein Bearbeiten-Formular hatte gar keine Moeglichkeit, einen
freien Namen anzuzeigen. Deshalb kommt die Reparatur in zwei Teilen:

  wahl.js      neue Funktion `setzen(wert, externText)`. Sie behandelt
               die beiden Faelle als das, was sie sind: entweder eine
               Person aus der Liste ODER ein freier Name -- nie beides.
               Das eine setzt das andere zurueck.

  kalender.js  belegt das Gegenueber beim Bearbeiten vor, aus
               creator_id / teilnehmer_id / teilnehmer_extern. Nur fuer
               die Leitung, wie beim Speichern auch -- fuer die anderen
               Rollen gibt es das Feld gar nicht.

Der Server lieferte die noetigen Felder die ganze Zeit mit
(t.teilnehmer_extern, t.creator_id, t.teilnehmer_id) -- es hat sie nur
niemand abgeholt.

Nachgemessen: `personenwahl('f-teilnehmer').setzen('', 'BananaStift')`
ergibt extern="BananaStift", wert="" -- der freie Name steht im Feld,
die Personennummer ist leer. pruef-kalender EXIT=0 (84),
pruef-serien EXIT=0 (69).

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-09-08 11:54:39 +02:00
co-authored by Claude Opus 5
parent 29785cc2a4
commit df0e74f751
2 changed files with 56 additions and 0 deletions
+24
View File
@@ -1553,6 +1553,30 @@
$('f-ort').value = termin.ort || '';
$('f-text').value = termin.beschreibung || '';
baueDabei(termin.teilnehmer_ids || []);
/* DAS GEGENUEBER VORBELEGEN -- und das war ein Datenverlust
(08.09.2026, screen19).
"Mit wem" wurde beim Bearbeiten NIE gefuellt. Das Feld stand
leer da, und weil `koerper.teilnehmer_extern` beim Speichern
trotzdem mitgeschickt wird, ueberschrieb der leere Wert den
vorhandenen: Wer einen Termin mit einem frei eingetragenen
Namen ("BananaStift") bearbeitete und speicherte, hatte den
Namen danach verloren -- ohne ihn je gesehen zu haben.
Filipe: "wenn ich auf bearbeiten drücke will ich dass mir immer
die daten angezeigt werden die schon ausgewählt wurden, damit
ich auch immer sehe okee das war alles und das änder ich."
Nur fuer die Leitung, wie beim Speichern auch: Fuer die anderen
Rollen gibt es das Feld gar nicht, und `personenwahl` liefe ins
Leere. */
if (LEITUNG.has(ich.rolle)) {
window.personenwahl?.('f-teilnehmer')
?.setzen(termin.creator_id ?? termin.teilnehmer_id ?? '',
termin.teilnehmer_extern || '');
}
$('f-takt').value = '';
wdhVorschau();
/* `false`: Beim Bearbeiten bleibt die eingetragene Dauer stehen. */
+32
View File
@@ -451,6 +451,38 @@
return {
wert: () => f.value,
extern: () => f.dataset.extern || '',
/* SETZEN -- fehlte bis zum 08.09.2026, und das Fehlen hat Daten
gekostet.
Die Schnittstelle konnte lesen (`wert`, `extern`) und leeren
(`zuruecksetzen`), aber nicht FUELLEN. Ein Bearbeiten-Formular
konnte einen frei eingetragenen Namen deshalb gar nicht
anzeigen -- es blieb leer. Beim Speichern wurde dann der leere
Wert mitgeschickt und ueberschrieb den vorhandenen: Wer einen
Termin mit "BananaStift" bearbeitete und speicherte, hatte den
Namen danach geloescht, ohne ihn je gesehen zu haben.
Genau das meinte Filipe mit "damit ich auch immer sehe okee das
war alles und das aender ich" (screen19).
Zwei Faelle, und sie schliessen sich aus: Entweder steht dort
eine PERSON aus der Liste (dann traegt das Feld ihre Nummer),
oder ein FREIER NAME (dann ist die Nummer leer und der Name
steht in `dataset.extern`). Beides gleichzeitig gibt es nicht --
deshalb setzt das eine das andere zurueck. */
setzen(wert, externText) {
const zz = OFFEN.get(f);
const frei = String(externText || '').replace(/\s+/g, ' ').trim().slice(0, EXTERN_MAX);
if (frei) {
f.value = '';
f.dataset.extern = frei;
} else {
f.dataset.extern = '';
f.value = wert == null ? '' : String(wert);
}
if (zz) zeige(zz);
return this;
},
zuruecksetzen() {
f.value = '';
f.dataset.extern = '';