M5: Sammelerfassung (Striche/Einzahlungen) tenant-nativ machen

stricheintragen.php und einzahlung.php lasen ihren Mitarbeiter-Picker
bisher direkt aus der global unscoped kl_Mitarbeiter-Tabelle. Fuer jeden
Mandanten ausser dem Default-Mandanten zeigte das fremde Namen und
Schreiben schlug (sicher, aber unverstaendlich) am Tenant-Check in
ledger_mirror_legacy_* fehl.

- Picker kommt jetzt aus participants (tenant-scoped), Formularfelder
  nutzen participant_id statt MitarbeiterID.
- Schreibpfad pro Teilnehmer: mit legacy_mitarbeiter_id (Default-Mandant)
  weiterhin Dual-Write nach kl_Kaffeeverbrauch/kl_Einzahlungen plus
  Ledger-Spiegelung; ohne Legacy-Verknuepfung (jeder andere Mandant) direkt
  ueber neue ledger_record_consumption()/ledger_record_payment().
- Vorderseite/Rueckseite-Filter (100-Tage-Regel) bleiben fuer den
  Default-Mandanten exakt auf der bisherigen Legacy-Logik; andere
  Mandanten nutzen die neue ledger_fetch_participants_by_window_marks()
  mit tenant_settings.sheet_window_days.
- Nebenbei behoben: einzahlung.php verlinkte auf ?aktion=... statt
  ?action=..., wodurch die Vorderseite/Rueckseite-Buttons nie griffen.
  Preis-pro-Strich-Vorbelegung kommt jetzt aus tenant_settings statt der
  seit M3 nicht mehr gepflegten kl_config-Tabelle.
- Live getestet: isolierter Test-Mandant, Picker zeigt nur eigene
  Teilnehmer, Buchungen rein Ledger-nativ mit korrektem Saldo, 10-Striche-
  Schwelle korrekt sortiert, Default-Mandant-Dual-Write weiterhin gruen.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-15 00:57:51 +02:00
co-authored by Claude Sonnet 5
parent aeb687f42e
commit 4d5f32ae6d
5 changed files with 346 additions and 150 deletions
+8 -1
View File
@@ -534,7 +534,14 @@ Schritte:
die Revision erhalten.
- Sammelerfassung (`stricheintragen.php`, `einzahlung.php`) tenant-sicher
absichern und ans Ledger anbinden: erledigt. Beide Seiten hatten zuvor
keine Zugriffskontrolle außer CSRF; das ist behoben.
keine Zugriffskontrolle außer CSRF; das ist behoben. Zusätzlich lasen
beide Seiten ihre Mitarbeiterliste aus der global unscoped
`kl_Mitarbeiter`-Tabelle, was sie für jeden Mandanten außer dem
Default-Mandanten unbrauchbar machte. Der Picker kommt jetzt aus
`participants` (tenant-scoped); der Schreibpfad nutzt für den
Default-Mandanten weiterhin Dual-Write nach `kl_Kaffeeverbrauch`/
`kl_Einzahlungen`, für alle anderen Mandanten schreibt er direkt und
ausschließlich ins Ledger.
- Hinweise als tenant-spezifische Notices umsetzen: erledigt. Neue Tabelle
`notices` mit Soft-Delete, `hinweise.php` und die Banner-Anzeige in
`header.php` sind tenant-scoped umgestellt; `kl_hinweise` bleibt nur noch