Ein Termin von-bis belegt jeden Tag dazwischen

Zwei Fehler, nicht einer.

Der sichtbare: Die Kachel stand nur am Anfangstag. Wer im
Monatsraster auf den Mittwoch sah, sah nichts -- obwohl die Aktion
von Montag bis Freitag lief.

Der unsichtbare, und der ist der schlimmere: Der SERVER suchte
Eintraege, deren ANFANG im sichtbaren Fenster liegt. Eine Aktion vom
28.09. bis zum 05.10. kam im Oktober deshalb ueberhaupt nicht an --
nicht "nur am ersten Tag markiert", sondern gar nicht da. Wer im
Oktober plante, sah eine freie Woche, die belegt war. Jetzt
entscheidet die UEBERSCHNEIDUNG, nicht der Anfang.

Gebaut wurde es in nachTag() -- der einzigen Stelle, an der
Eintraege auf Tage verteilt werden. Monat, Woche, Liste und
Zeitstrahl holen sich alle dort; vier Ansichten einzeln
nachzuruesten waeren vier Stellen, an denen die fuenfte vergessen
wird.

Das Ende wird abgeleitet, nicht gepflegt: aus event_ende ODER aus
Uhrzeit plus Dauer. Ein Live von 22:00 ueber vier Stunden endet um
02:00 am naechsten Tag -- das stand bisher nirgends, obwohl die
Zahlen da waren.

Der Tagesdialog filterte selbst auf den Anfangstag. Im Raster war
der Mittwoch markiert, tippte man ihn an, stand da "An diesem Tag
steht nichts." Jetzt fragt er dieselbe Stelle wie das Raster.

pruef-zeitraum.mjs: 16 Pruefungen, beide Fehler einzeln, mit drei
Gegenproben (vor dem Anfang, nach dem Ende, Punkttermin).
pruef-terminregel.mjs weiterhin 35/0.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-09-20 19:20:18 +02:00
co-authored by Claude Opus 5
parent 947ea7ff49
commit d77dd216c5
5 changed files with 443 additions and 8 deletions
+20
View File
@@ -52,6 +52,26 @@
* den 24., auch wenn der Zettel am 3. entstanden ist. */
export const TERMIN_TAG_SQL = "COALESCE(e.geplant, e.datum)";
/** Der LETZTE Tag, an dem ein Eintrag noch laeuft -- als SQL-Ausdruck.
*
* Gebraucht seit dem 20.09.2026. Filipe: „wenn ich termine eintrage
* mit von bis, will ich dass die ganze zeit markiert ist und nicht
* nur der anfang."
*
* DER FEHLER SASS TIEFER ALS IN DER ANZEIGE. Der Kalender suchte
* Eintraege, deren ANFANG im sichtbaren Fenster liegt. Eine Aktion
* vom 28.09. bis zum 05.10. kam damit im Oktober ueberhaupt nicht an
* -- nicht „nur am ersten Tag markiert", sondern gar nicht da. Wer im
* Oktober plante, sah eine freie Woche, die belegt war.
*
* `MAX` und nicht `COALESCE(e.event_ende, ...)`: Ein Ende, das VOR
* dem Anfang liegt (vertippt, Anfang spaeter verschoben), wuerde
* sonst den Eintrag aus seinem eigenen Zeitraum werfen. Der leere
* Text sortiert vor jedem Datum -- ohne Ende gewinnt damit immer der
* Anfang, und das ist genau richtig. */
export const TERMIN_ENDE_SQL =
"MAX(COALESCE(e.event_ende, ''), COALESCE(e.geplant, e.datum))";
/** Die Bedingung als SQL. Erwartet GENAU EINEN Platzhalter: den
* heutigen Tag in Ortszeit (`heuteLokal()`).
*