diff --git a/server/pruef-call-kategorien.mjs b/server/pruef-call-kategorien.mjs index b7fb5f8b..a5405158 100644 --- a/server/pruef-call-kategorien.mjs +++ b/server/pruef-call-kategorien.mjs @@ -372,11 +372,30 @@ melde("\n=== Wiederholungen: eigene Gruppe, nur dieser Monat ==="); const serieId = d2.prepare("SELECT last_insert_rowid() AS id").get().id; const rein = d2.prepare(`INSERT INTO termine (titel, art, beginn, dauer_min, serie_id, erstellt, erstellt_von) VALUES (?,?,?,?,?,?,1)`); - /* Zwei Auspraegungen derselben Serie: eine in vier Tagen (also mit - grosser Wahrscheinlichkeit dieser Monat) und eine in sechzig Tagen - (sicher ein anderer). Der Monatsschnitt wird aus dem Datumstext - gerechnet, nicht aus einer Zeitzone. */ - const nah = inTagen(4), fern = inTagen(60); + /* ZWEI AUSPRAEGUNGEN -- und die nahe wird GERECHNET, nicht gehofft. + + Hier stand „in vier Tagen (also mit grosser Wahrscheinlichkeit + dieser Monat)". Am 30.09.2026 war das der Oktober, die Pruefung + wurde rot, und die Anwendung hatte recht: Der Server verlangt + kuenftig UND im laufenden Monat, und am Monatsende gibt es + beides zusammen fuer „in vier Tagen" nicht. + + Genau die Zeitbombe aus den Hausregeln -- dieselbe Art wie bei + `pruef-kalender` am 29.09. „Mit grosser Wahrscheinlichkeit" ist + keine Voraussetzung, sondern eine Hoffnung. + + Der letzte Tag des laufenden Monats um 23:59 liegt im Monat, + weil er so gebaut ist, und in der Zukunft an jedem Tag ausser in + der letzten Minute des Monats. Fuer die gibt es unten den + dritten Ausgang. */ + const heute = new Date(); + const letzterTag = new Date(heute.getFullYear(), heute.getMonth() + 1, 0); + const zz = (x) => String(x).padStart(2, "0"); + const nah = `${letzterTag.getFullYear()}-${zz(letzterTag.getMonth() + 1)}` + + `-${zz(letzterTag.getDate())}T23:59`; + const fern = inTagen(60); + /* Liegt die nahe Auspraegung ueberhaupt noch in der Zukunft? */ + const nochZeit = new Date(nah).getTime() > Date.now(); rein.run("Serie dieser Monat", "call", nah, 30, serieId, new Date().toISOString()); rein.run("Serie spaeter", "call", fern, 30, serieId, new Date().toISOString()); d2.close(); @@ -400,8 +419,19 @@ melde("\n=== Wiederholungen: eigene Gruppe, nur dieser Monat ==="); const gleicherMonat = nah.slice(0, 7) === fern.slice(0, 7); ok(!gleicherMonat, `die beiden Auspraegungen liegen in verschiedenen Monaten (${nah.slice(0, 7)} / ${fern.slice(0, 7)})`); - ok(serien.includes("Serie dieser Monat"), - `die Wiederholung dieses Monats steht in "Laeuft automatisch" (${serien.join(", ") || "leer"})`); + /* DER DRITTE AUSGANG, und zwar benannt: In der letzten Minute des + Monats gibt es keinen kuenftigen Termin mehr in diesem Monat. + Das ist eine Auskunft ueber den Kalender, kein Befund ueber die + Software -- und die drei anderen Aussagen werden trotzdem + geprueft. Ein Ausstieg, der gar nichts mehr misst, waere ein + stiller Aussetzer. */ + if (!nochZeit) { + melde(" KONNTE NICHT NACHSEHEN: letzte Minute des Monats -- es gibt " + + "keinen kuenftigen Termin mehr in diesem Monat."); + } else { + ok(serien.includes("Serie dieser Monat"), + `die Wiederholung dieses Monats steht in "Laeuft automatisch" (${serien.join(", ") || "leer"})`); + } ok(!serien.includes("Serie spaeter"), "die des naechsten Monats nicht -- keine Monate im Voraus"); ok(!anstehend.includes("Serie dieser Monat") && !anstehend.includes("Serie spaeter"), diff --git a/workspace/anruf-probe.html b/workspace/anruf-probe.html index 8acef641..cd1b9595 100644 --- a/workspace/anruf-probe.html +++ b/workspace/anruf-probe.html @@ -16,8 +16,8 @@ verdeckt. Gefunden hat es pruef-struktur. Richtig sind `gate.css` (die Farbwerte des Hauses) und `haus.css`. --> - - + + - +