Termin aus Mail, Rollen & Rechte, Abwesenheiten, Glas-Darstellung und Pi-Betrieb

- Termin aus Mail: Mailtext oder .eml per Drag & Drop/Strg+V auf Terminplan
  oder Aufgaben, KI schlägt Aufgaben vor, Prüfung im Aufgaben-Panel; neues
  Notizfeld je Aufgabe (plan_todos.notiz)
- Terminplan: Meilensteine ohne Aufgabenbezug je in eigener Zeile,
  "+ Neu"-Menü klappt neben schmaler Seitenleiste nach rechts, Leistungsphasen
- Rollen & Rechte, Abwesenheiten-Seite, Benachrichtigungen, Rundgang
- Glas-Darstellung, Logo als Favicon
- Pi-Betrieb: PDF-Arbeit im Kindprozess, Wächter, Einrichtungs- und
  Prüfskript inkl. WLAN-Wächter

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
erikandClaude Opus 5.5 committed 2026-10-29 14:16:52 +01:00
1 parent f4fb3c550b
commit b7e0bd0d92
56 files changed
+12265 -2974

No files matched your search

+10 -78
View File
@@ -1,19 +1,16 @@
// -----------------------------
// Projektplan — Verlauf über mehrere Sitzungen
// -----------------------------
// Dieses Modul macht die Sitzungs-Historie eines Projekts sichtbar: die
// Kompakt-Karte "Verlauf" unter dem GANTT zeigt den letzten Kommentarwechsel,
// ein Klick öffnet #planHistoryModal mit dem vollständigen Verlauf.
// Dieses Modul liefert die Fassungen eines Projekts über die Sitzungen
// (Vorwochen-Helfer für den GANTT). Angezeigt wird der Kommentar-Verlauf
// im Projekt-Dashboard von plan-info.js.
//
// Der Verlauf selbst wird NICHT hier gezeichnet, sondern von
// renderProjektVerlauf() in js/utils.js — derselben Darstellung, die auch der
// Wochenbericht unter der Projektkarte und die Projektliste zeigen. Zuvor
// Der Verlauf in Wochenbericht und Projektliste wird von
// renderProjektVerlauf() in js/utils.js gezeichnet. Zuvor
// hatte jede dieser Stellen ihre eigene Fassung mit eigener Auswahl (hier nur
// Sitzungen mit Kommentarwechsel, im Bericht auch Termine und
// Leistungsphasen), weshalb derselbe Projektverlauf je nach Aufrufort anders
// aussah und sich widersprechen konnte. Der Dialog übergibt kein weekLabel:
// Er kennt keine "aktuelle" Fassung, die auszulassen wäre, und zeigt deshalb
// alle Sitzungen einschließlich der geöffneten.
// aussah und sich widersprechen konnte.
//
// Hintergrund: Beim wöchentlichen cloneWeek() (js/weeks.js) wird der
// Kommentartext in die neue Sitzung kopiert und dort überschrieben. Der alte
@@ -86,75 +83,10 @@
return null;
}
// historyEntries: die Verlaufsliste des aktuell geöffneten Projekts
// (neueste zuerst, Wiederholungen desselben Textes gefiltert). Logik in
// js/utils.js, siehe projectStatusHistory().
function historyEntries(){
return projectStatusHistory(app.project && app.project.projectUid);
}
// renderPlanHistory: füllt die Kompakt-Karte "Verlauf" (#planHistorySummary
// in App.html) — Anzahl der Einträge und die Sitzung des letzten
// Kommentarwechsels. Wird von renderPlanPage() (plan-state.js) nach dem
// Laden aufgerufen. Keine Parameter, keine Rückgabe.
window.renderPlanHistory = function(){
const summaryEl = document.getElementById('planHistorySummary');
if(!summaryEl || !app.project) return;
// Ein Sandbox-Plan der Planung lebt in genau einer, nie geklonten Sitzung
// (SANDBOX_WEEK_LABEL) — es gibt also nie einen "Verlauf über mehrere
// Sitzungen" zu zeigen, nur immer denselben einen Schnappschuss.
if(app.isSandboxPlan && app.isSandboxPlan()){
summaryEl.innerHTML = '<span class="hint">Kein Verlauf — dieser Terminplan gehört zu keiner Sitzung.</span>';
return;
}
if(!app.project.projectUid){
summaryEl.innerHTML = '<span class="hint">Für dieses Projekt ist kein Verlauf verfügbar.</span>';
return;
}
const entries = historyEntries();
if(entries.length === 0){
summaryEl.innerHTML = '<span class="hint">Noch keine Kommentare erfasst.</span>';
return;
}
const latest = entries[0];
const versionCount = projectVersions().length;
summaryEl.innerHTML = `<div class="plan-mini-card-preview">${esc(latest.text)}</div>
<div class="plan-mini-chip-row">
<span class="plan-mini-chip">${entries.length} Eintrag${entries.length === 1 ? '' : 'e'}</span>
<span class="plan-mini-chip">zuletzt ${esc(latest.week.label)}</span>
<span class="plan-mini-chip">${versionCount} Sitzung${versionCount === 1 ? '' : 'en'}</span>
</div>`;
};
// openHistoryModal/closeHistoryModal: öffnen bzw. schließen das
// Verlaufs-Modal (#planHistoryModal). Der Inhalt wird beim Öffnen frisch
// aufgebaut, damit ein gerade im Projektinfo-Modal geänderter Kommentar
// sofort mit auftaucht.
window.openHistoryModal = function(){
const listEl = document.getElementById('planHistoryList');
if(listEl){
if(!app.project || !app.project.projectUid){
listEl.innerHTML = '<span class="hint">Dieses Projekt hat keine dauerhafte Projekt-Kennung und kann daher nicht über Sitzungen hinweg verfolgt werden.</span>';
} else {
// Dieselbe Darstellung wie im Wochenbericht und im Projektboard
// (renderProjektVerlauf(), js/utils.js). Der Dialog hatte zuvor eine
// eigene, enger gefasste Liste — sie zeigte nur Kommentartexte und
// konnte dem Verlauf an den anderen Stellen widersprechen.
//
// weekLabel bleibt leer: Im Dialog gibt es keine "aktuelle" Fassung,
// die auszulassen wäre — hier sollen ALLE Sitzungen erscheinen,
// einschließlich der gerade geöffneten.
listEl.innerHTML = renderProjektVerlauf(app.project, '', app.isLocked());
}
}
document.getElementById('planHistoryModal').style.display = 'flex';
};
window.closeHistoryModal = function(){
document.getElementById('planHistoryModal').style.display = 'none';
};
// Die Kompakt-Karte "Verlauf" (renderPlanHistory()) und der Dialog
// #planHistoryModal (openHistoryModal()/closeHistoryModal()) sind entfallen:
// Der Kommentar-Verlauf steht jetzt in der Kachel "Kommentar der Sitzung"
// des Projekt-Dashboards (renderPlanKommentarVerlauf(), plan-info.js).
// Export für die anderen plan-Module (plan-gantt.js/plan-build-gantt.js:
// Geister-Balken der letzten geplanten Sitzung).