Legacy-Abbau Schritt 1: Dual-Write in die kl_*-Tabellen entfernt
Die Migration in participants/ledger_entries ist abgeschlossen: kein
Teilnehmer traegt noch eine legacy_mitarbeiter_id, kein Journaleintrag eine
legacy_table. Damit war der jeweils zweite Zweig ("Default-Mandant schreibt
zusaetzlich nach kl_Einzahlungen/kl_Kaffeeverbrauch/kl_Mitarbeiter") in
sechs Dateien nicht mehr erreichbar - er musste aber bei jeder Aenderung
mitgepflegt werden, zuletzt bei der Bemerkung fuer Einzahlungen.
Entfernt:
- Dual-Write beim Buchen: einzahlung.php, stricheintragen.php, index.php,
jahresauswertung.php, app/imports.php, app/paypal-inbox.php
- Dual-Write in der Mitgliederverwaltung: ledger_create_participant,
ledger_update_participant, ledger_set_participant_active,
ledger_anonymize_participant
- die verwaisten Spiegelfunktionen ledger_mirror_legacy_payment,
ledger_mirror_legacy_consumption und ledger_void_entry_by_legacy_id
Nebenbei behoben: kaffeeliste.php hat die Teilnehmer-Detailseite nur fuer
Mitglieder mit legacy_mitarbeiter_id verlinkt - die hat seit der Migration
niemand mehr, die Seite war also fuer alle unerreichbar. Verlinkt und
adressiert wird jetzt ueber participant_id; "user_id" bleibt als Alias
erhalten. Der Mandanten-Isolationstest prueft jetzt ledger_void_entry, also
den Pfad, den letzteneintraege.php tatsaechlich nutzt.
Pruefskripte unveraendert gegenueber der Baseline vor dem Umbau
(http-smoke 27/6, role-matrix 55/0); die Isolationspruefung steigt von
9 auf 11 PASS bei gleichem vorbestehendem Fehler.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -129,48 +129,16 @@ function dashboard_record_self_entry(PDO $pdo, array $participant, array $settin
|
||||
return ['ok' => false, 'error' => 'Der Preis pro Strich ist nicht gültig konfiguriert.'];
|
||||
}
|
||||
|
||||
$legacyMitarbeiterId = $participant['legacy_mitarbeiter_id'] !== null
|
||||
? (int)$participant['legacy_mitarbeiter_id']
|
||||
: 0;
|
||||
|
||||
try {
|
||||
if ($legacyMitarbeiterId > 0) {
|
||||
// Migrierter Default-Mandant: weiterhin in die Legacy-Tabelle
|
||||
// schreiben, damit die noch-legacy Sammelseiten (stricheintragen.php)
|
||||
// den Eintrag ebenfalls sehen; der Ledger-Eintrag entsteht per
|
||||
// Spiegelung.
|
||||
$bookedAt = date('Y-m-d H:i:s');
|
||||
$cost = (($marks * $unitPriceCents) / 100);
|
||||
$unitPrice = ($unitPriceCents / 100);
|
||||
|
||||
$pdo->beginTransaction();
|
||||
$stmt = $pdo->prepare(
|
||||
'INSERT INTO kl_Kaffeeverbrauch
|
||||
(MitarbeiterID, AnzahlStriche, Kosten, KostenproStrich, Datum, Eintragsart)
|
||||
VALUES (?, ?, ?, ?, ?, 2)'
|
||||
);
|
||||
$stmt->execute([$legacyMitarbeiterId, $marks, $cost, $unitPrice, $bookedAt]);
|
||||
$legacyConsumptionId = (int)$pdo->lastInsertId();
|
||||
if ($legacyConsumptionId <= 0) {
|
||||
throw new RuntimeException('Legacy-Strich konnte nicht angelegt werden.');
|
||||
}
|
||||
|
||||
ledger_mirror_legacy_consumption($pdo, (int)$participant['tenant_id'], $legacyConsumptionId);
|
||||
$pdo->commit();
|
||||
} else {
|
||||
// SaaS-native Mandanten (alle ausser dem migrierten Default-
|
||||
// Mandanten) haben keine Legacy-Schattentabelle - direkt ins
|
||||
// Ledger buchen.
|
||||
ledger_record_consumption(
|
||||
$pdo,
|
||||
(int)$participant['tenant_id'],
|
||||
(int)$participant['participant_id'],
|
||||
$marks,
|
||||
$unitPriceCents,
|
||||
'self_entry',
|
||||
$actorUserId
|
||||
);
|
||||
}
|
||||
ledger_record_consumption(
|
||||
$pdo,
|
||||
(int)$participant['tenant_id'],
|
||||
(int)$participant['participant_id'],
|
||||
$marks,
|
||||
$unitPriceCents,
|
||||
'self_entry',
|
||||
$actorUserId
|
||||
);
|
||||
} catch (Throwable $e) {
|
||||
if ($pdo->inTransaction()) {
|
||||
$pdo->rollBack();
|
||||
|
||||
Reference in New Issue
Block a user