P-2608-0001 wurde abgebrochen, bevor es das Archiv-Kennzeichen gab. Es hat deshalb zwar den Status "abgebrochen", aber archiviert = 0 -- und stand bis heute zwischen den offenen Auftraegen. Also genau das, was der Wunsch "wenn ich abbreche dan sollen die auch da weg" abstellen sollte. Ueber die Oberflaeche war das nicht zu reparieren: Die Verwaltung zeigt bei Status "abgebrochen" den Info-Block statt des Abbrechen-Knopfes, ein zweiter Klick war also gar nicht moeglich. Migration statt Handarbeit in der Datenbank: Ein einzelner UPDATE per Hand repariert einen Fall und hinterlaesst keine Spur. Die Migration erwischt jeden Altfall, laeuft ueberall gleich (Server, Testdatenbank, ein spaeterer Neuaufbau) und steht nachvollziehbar in der Geschichte. Bewusst NICHT gefuellt: abbruch_am, abbruch_grund, abbruch_wer, abbruch_erstattung_cent. Diese Felder gab es beim damaligen Abbruch noch nicht. Sie nachtraeglich mit plausiblen Werten zu fuellen waere eine Behauptung ueber einen Vorgang, bei dem niemand mehr weiss, wie er wirklich ablief -- und ausgerechnet im Streitfall waere das die gefaehrlichste Stelle fuer eine Erfindung. Ein leeres Feld sagt ehrlich "unbekannt", und die Verwaltung zeigt diese Angaben ohnehin nur an, wenn sie gefuellt sind. Der Test stellt den Altzustand echt nach: alle Migrationen bis 0017, dann der Altfall, dann erst 0018. Geprueft wird auch, was NICHT passieren darf -- ein laufendes Projekt bleibt unberuehrt, ein sauber abgebrochenes behaelt Datum, Grund und Erstattung, und ein zweiter Durchlauf aendert nichts mehr (beim Wiederherstellen einer Sicherung passiert genau das). Geprueft: 167 Pruefungen gruen (Altabbruch 16, Automatik 55, Angebote 56, Kette 40). Co-Authored-By: Claude Opus 5 <[email protected]>
53 lines
2.3 KiB
SQL
53 lines
2.3 KiB
SQL
-- =====================================================================
|
|
-- Altfälle aufräumen: abgebrochene Projekte, die noch in der laufenden
|
|
-- Liste stehen (24.08.2026)
|
|
--
|
|
-- Warum es diese Migration überhaupt braucht:
|
|
--
|
|
-- Der Wunsch "wenn ich abbreche dan sollen die auch da weg" wurde erst
|
|
-- am 24.08.2026 umgesetzt. Seitdem setzt der Abbruch neben dem Status
|
|
-- auch archiviert = 1, und genau dieses Feld blendet das Projekt aus
|
|
-- der laufenden Liste aus.
|
|
--
|
|
-- Projekte, die VORHER abgebrochen wurden, haben den Status, aber nicht
|
|
-- das Archiv-Kennzeichen. Sie stehen deshalb bis heute zwischen den
|
|
-- offenen Aufträgen -- also genau das, was der Wunsch abstellen sollte.
|
|
-- Konkret betrifft das P-2608-0001.
|
|
--
|
|
-- Warum nicht von Hand in der Datenbank:
|
|
--
|
|
-- Ein einzelner UPDATE per Hand repariert einen Fall und hinterlässt
|
|
-- keine Spur. Diese Migration erwischt jeden Altfall, läuft überall
|
|
-- gleich (Server, Testdatenbank, ein späterer Neuaufbau) und steht
|
|
-- nachvollziehbar in der Versionsgeschichte.
|
|
--
|
|
-- Warum archivieren und nicht löschen:
|
|
--
|
|
-- Dieselbe Begründung wie beim Abbruch selbst: Zahlungen, Erstattung
|
|
-- und Verlauf hängen daran, und bei einem Streit braucht man genau das.
|
|
-- Über den Archiv-Umschalter in der Projektliste bleibt alles
|
|
-- auffindbar.
|
|
--
|
|
-- Bewusst NICHT angefasst:
|
|
--
|
|
-- abbruch_am, abbruch_grund, abbruch_wer, abbruch_erstattung_cent.
|
|
-- Diese Felder gab es beim damaligen Abbruch noch nicht, sie sind also
|
|
-- leer. Sie nachträglich mit erfundenen Werten zu füllen wäre eine
|
|
-- Behauptung über einen Vorgang, bei dem niemand mehr weiß, wie er
|
|
-- wirklich ablief -- und ausgerechnet bei einem Streitfall wäre das die
|
|
-- gefährlichste Stelle für eine Erfindung. Ein leeres Feld sagt
|
|
-- ehrlich "unbekannt". Die Verwaltung kommt damit zurecht: Sie zeigt
|
|
-- Datum, Grund und Erstattung nur an, wenn sie gefüllt sind.
|
|
-- =====================================================================
|
|
|
|
UPDATE wd_projekte
|
|
SET archiviert = 1,
|
|
-- Die Uhr steht ab jetzt auch formal still. Ohne das bliebe
|
|
-- wartet_auf auf einem Wert wie 'kunde' stehen, und jede
|
|
-- Auswertung über offene Wartezustände zählte einen toten
|
|
-- Vorgang mit.
|
|
wartet_auf = 'niemand',
|
|
aktualisiert_am = strftime('%Y-%m-%dT%H:%M:%fZ', 'now')
|
|
WHERE status = 'abgebrochen'
|
|
AND (archiviert IS NULL OR archiviert = 0);
|