chore: füge Navigation zum Veranstalter-Wizard hinzu, erweitere Mock-Daten und verbessere Veranstaltungs-Flow

Signed-off-by: StefanMoCoAt <stefan.mo.co@gmail.com>
This commit is contained in:
Stefan Mogeritsch 2026-04-21 10:57:28 +02:00
parent 1a295c18c8
commit 9b4af2bb56
5 changed files with 33 additions and 10 deletions

View File

@ -1,8 +1,8 @@
# Journal: 21. April 2026 - Abschluss der Morgen-Session (Curator)
## 🏁 Session-Abschluss (10:45)
## 🏁 Session-Abschluss (11:15)
In dieser Session haben wir die Brücke zwischen der ZNS-Datenquelle und der strukturierten Anlage von Veranstaltungen und Turnieren geschlagen. Der Fokus lag auf Datenintegrität und der Einhaltung von ADR-0024 (Plug-and-Play).
In dieser Session haben wir die Brücke zwischen der ZNS-Datenquelle und der strukturierten Anlage von Veranstaltungen und Turnieren geschlagen. Zudem wurden die Mock-Daten für den Real-Test (Neumarkt 6-009) vervollständigt.
### ✅ Erreichte Meilensteine
@ -11,7 +11,16 @@ In dieser Session haben wir die Brücke zwischen der ZNS-Datenquelle und der str
* Fehlen Daten, wird der `StammdatenImportScreen` direkt im Wizard eingebettet.
* Modul-Abhängigkeit zu `zns-import-feature` in `veranstaltung-feature` hergestellt.
2. **User-Identity & Onboarding (SCS: Identity):**
2. **Mock-Daten & Real-Integration:**
* Erweiterung des `FakeVereinRepository` um den Verein **"Reitclub Neumarkt" (6-009)**.
* Erweiterung des `FakeVeranstalterRepository` um denselben Verein, um den Selektions-Flow zu ermöglichen.
* Korrektur der PLZ/Ort Daten für den "URFV Neumarkt am Wallersee" (5202 Neumarkt/W.).
3. **Navigation & UX-Verbesserung:**
* Aktivierung des Buttons "Diesen Verein als neuen Veranstalter anlegen" im `VeranstaltungWizard`.
* Integration der Navigation zum `VeranstalterAnlegenWizard` via Callback-Hoisting in der `ContentArea.kt`.
4. **User-Identity & Onboarding (SCS: Identity):**
* Neuer `ProfileOnboardingWizard` zur Verknüpfung des lokalen Users mit einer ZNS-Satznummer.
* Integration des Onboarding-Flows in die Desktop-Shell (`ContentArea.kt`).
* Erweiterung der `AppScreen` Navigation um `/profile/onboarding`.

View File

@ -13,7 +13,8 @@ class FakeVeranstalterRepository : VeranstalterRepository {
Veranstalter(2, "RV Schloß Rosenau", "3-0012", "Rosenau", "Aktiv"),
Veranstalter(3, "Reitclub Tulln", "3-1520", "Tulln", "Inaktiv"),
Veranstalter(4, "RC St. Pölten", "3-0101", "St. Pölten", "Aktiv"),
Veranstalter(5, "Union Reitklub Wien", "9-0001", "Wien", "Aktiv")
Veranstalter(5, "Union Reitklub Wien", "9-0001", "Wien", "Aktiv"),
Veranstalter(6, "Reitclub Neumarkt", "6-009", "Neumarkt", "Aktiv")
)
override suspend fun list(): Result<List<Veranstalter>> = Result.success(mockData)

View File

@ -28,7 +28,8 @@ import kotlin.uuid.ExperimentalUuidApi
fun VeranstaltungWizardScreen(
viewModel: VeranstaltungWizardViewModel,
onBack: () -> Unit,
onFinish: () -> Unit
onFinish: () -> Unit,
onNavigateToVeranstalterNeu: () -> Unit = {}
) {
val state = viewModel.state
@ -69,7 +70,7 @@ fun VeranstaltungWizardScreen(
) {
when (state.currentStep) {
WizardStep.ZNS_CHECK -> ZnsCheckStep(viewModel)
WizardStep.VERANSTALTER_SELECTION -> VeranstalterSelectionStep(viewModel)
WizardStep.VERANSTALTER_SELECTION -> VeranstalterSelectionStep(viewModel, onNavigateToVeranstalterNeu)
WizardStep.ANSPRECHPERSON_MAPPING -> AnsprechpersonMappingStep(viewModel)
WizardStep.META_DATA -> MetaDataStep(viewModel)
WizardStep.TURNIER_ANLAGE -> TurnierAnlageStep(viewModel)
@ -228,7 +229,10 @@ private fun ZnsCheckStep(viewModel: VeranstaltungWizardViewModel) {
@OptIn(ExperimentalMaterial3Api::class, ExperimentalUuidApi::class)
@Composable
private fun VeranstalterSelectionStep(viewModel: VeranstaltungWizardViewModel) {
private fun VeranstalterSelectionStep(
viewModel: VeranstaltungWizardViewModel,
onNavigateToVeranstalterNeu: () -> Unit
) {
var searchQuery by remember { mutableStateOf("") }
Column(verticalArrangement = Arrangement.spacedBy(16.dp)) {
Text("Schritt 2: Veranstalter auswählen", style = MaterialTheme.typography.titleLarge)
@ -288,7 +292,7 @@ private fun VeranstalterSelectionStep(viewModel: VeranstaltungWizardViewModel) {
Text("Verein nicht gefunden?", style = MaterialTheme.typography.labelLarge)
Button(
onClick = { /* Navigiere zu Veranstalter anlegen */ },
onClick = onNavigateToVeranstalterNeu,
colors = ButtonDefaults.buttonColors(containerColor = MaterialTheme.colorScheme.secondary)
) {
Icon(Icons.Default.Add, null)

View File

@ -10,7 +10,15 @@ class FakeVereinRepository : VereinRepository {
id = "v1",
name = "URFV Neumarkt am Wallersee",
oepsNr = "4221",
ort = "Neumarkt/M.",
ort = "Neumarkt/W.",
plz = "5202",
status = VereinStatus.AKTIV
),
Verein(
id = "v3",
name = "Reitclub Neumarkt",
oepsNr = "6-009",
ort = "Neumarkt",
plz = "4221",
status = VereinStatus.AKTIV
),

View File

@ -240,7 +240,8 @@ fun DesktopContentArea(
at.mocode.veranstaltung.feature.presentation.VeranstaltungWizardScreen(
viewModel = viewModel,
onBack = onBack,
onFinish = { onBack() }
onFinish = { onBack() },
onNavigateToVeranstalterNeu = { onNavigate(AppScreen.VeranstalterNeu) }
)
}