Öffnungszeiten: Plan-löschen-Rückfrage zählt die Ausnahmen beim Öffnen

Der Hinweis „Die N Ausnahmen, die nur für diesen Plan gelten, werden mit gelöscht“
wurde beim Bauen der Karte berechnet und war nach dem Speichern einer Ausnahme
veraltet. Er wird jetzt beim Öffnen der Rückfrage aus dem aktuellen Stand gelesen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Opus 5.5 committed 2026-10-05 06:23:56 +00:00
1 parent f01ed15247
commit 242fbb01e5
3 files changed
+68 -9

No files matched your search

+12 -7
View File
@@ -273,17 +273,22 @@ function planKarte(t, plan) {
const speichern = h('button', { type: 'submit', class: 'kb-btn-primary', 'data-aktion': 'speichern' }, 'Speichern')
const grund = daten && !nurLesen ? planLoeschenGrund(daten, plan.id) : null
const mitAusnahmen = daten ? (daten.ausnahmen || []).filter((a) => a?.plan === plan.id).length : 0
// Wie viele Ausnahmen nur fuer diesen Plan gelten, steht erst beim Oeffnen der Rueckfrage fest: Ausnahmen zeichnen die Karte nicht neu
const mitAusnahmen = () => (Array.isArray(ctx.stand.daten?.ausnahmen) ? ctx.stand.daten.ausnahmen : []).filter((a) => a?.plan === plan.id).length
const loeschenText = () => {
const n = mitAusnahmen()
return [
LOESCHEN_WARNUNG,
n === 0 ? '' : n === 1
? 'Die eine Ausnahme, die nur für diesen Plan gilt, wird mit gelöscht.'
: `Die ${n} Ausnahmen, die nur für diesen Plan gelten, werden mit gelöscht.`,
]
}
const entfernen = daten && !nurLesen && grund === null ? entfernenKnopf(sp, {
knopfText: 'Plan löschen',
ja: 'Ja, löschen',
titel: `Zeitplan „${plan.name}“ löschen?`,
text: [
LOESCHEN_WARNUNG,
mitAusnahmen === 0 ? '' : mitAusnahmen === 1
? 'Die eine Ausnahme, die nur für diesen Plan gilt, wird mit gelöscht.'
: `Die ${mitAusnahmen} Ausnahmen, die nur für diesen Plan gelten, werden mit gelöscht.`,
],
text: loeschenText,
fehlerPfad: p,
// Ausnahmen, die nur fuer diesen Plan galten, haetten danach keinen Plan mehr (R10): sie gehen mit
aendere: (entwurf) => {
+4 -2
View File
@@ -185,7 +185,7 @@ export function nachSpeichern(t, meldung, selektor, neuZeichnen = () => t.zeichn
}
/**
* Knopf mit Rueckfrage in der Seite (kein confirm()): Titel, Erklaerung (text, ein Text oder eine Liste von Absaetzen), Platz fuer den Fehler
* Knopf mit Rueckfrage in der Seite (kein confirm()): Titel, Erklaerung (text: ein Text, eine Liste von Absaetzen oder eine Funktion, die beides beim Oeffnen liefert), Platz fuer den Fehler
* des Servers, Knoepfe. aendere(entwurf) entfernt den Eintrag, nachher() laeuft nach dem erfolgreichen Speichern (der Abschnitt zeichnet neu).
* Abbrechen schliesst die Rueckfrage und der Fokus geht zum Knopf zurueck. => { knopf, box }: der Aufrufer setzt beide NEBEN sein Formular, nicht
* hinein (ein submit der Rueckfrage stiege sonst ins aeussere Formular auf).
@@ -195,7 +195,9 @@ export function entfernenKnopf(sp, { knopfText = 'Entfernen', ja = 'Ja, entferne
const knopf = h('button', { type: 'button', class: 'kb-btn-outline tm-gefahr', 'data-aktion': 'entfernen' }, knopfText)
knopf.addEventListener('click', () => {
const { zeile } = knopfZeile(ja, () => { box.replaceChildren(); knopf.focus() })
const absaetze = (Array.isArray(text) ? text : [text]).filter(Boolean).map((t) => h('p', null, t))
// text darf eine Funktion sein: sie liest den Stand erst jetzt, beim Oeffnen (die Karte kann aelter sein als eine Ausnahme, die inzwischen dazukam)
const gesagt = typeof text === 'function' ? text() : text
const absaetze = (Array.isArray(gesagt) ? gesagt : [gesagt]).filter(Boolean).map((t) => h('p', null, t))
const rueckfrage = frage(titel,
...absaetze,
fehlerPfad ? h('p', { class: 'tm-fehler', 'data-fehler': fehlerPfad, role: 'alert' }) : null,