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:
@@ -1,8 +1,8 @@
|
|||||||
# Journal: 21. April 2026 - Abschluss der Morgen-Session (Curator)
|
# 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
|
### ✅ 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.
|
* Fehlen Daten, wird der `StammdatenImportScreen` direkt im Wizard eingebettet.
|
||||||
* Modul-Abhängigkeit zu `zns-import-feature` in `veranstaltung-feature` hergestellt.
|
* 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.
|
* Neuer `ProfileOnboardingWizard` zur Verknüpfung des lokalen Users mit einer ZNS-Satznummer.
|
||||||
* Integration des Onboarding-Flows in die Desktop-Shell (`ContentArea.kt`).
|
* Integration des Onboarding-Flows in die Desktop-Shell (`ContentArea.kt`).
|
||||||
* Erweiterung der `AppScreen` Navigation um `/profile/onboarding`.
|
* Erweiterung der `AppScreen` Navigation um `/profile/onboarding`.
|
||||||
|
|||||||
+2
-1
@@ -13,7 +13,8 @@ class FakeVeranstalterRepository : VeranstalterRepository {
|
|||||||
Veranstalter(2, "RV Schloß Rosenau", "3-0012", "Rosenau", "Aktiv"),
|
Veranstalter(2, "RV Schloß Rosenau", "3-0012", "Rosenau", "Aktiv"),
|
||||||
Veranstalter(3, "Reitclub Tulln", "3-1520", "Tulln", "Inaktiv"),
|
Veranstalter(3, "Reitclub Tulln", "3-1520", "Tulln", "Inaktiv"),
|
||||||
Veranstalter(4, "RC St. Pölten", "3-0101", "St. Pölten", "Aktiv"),
|
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)
|
override suspend fun list(): Result<List<Veranstalter>> = Result.success(mockData)
|
||||||
|
|||||||
+8
-4
@@ -28,7 +28,8 @@ import kotlin.uuid.ExperimentalUuidApi
|
|||||||
fun VeranstaltungWizardScreen(
|
fun VeranstaltungWizardScreen(
|
||||||
viewModel: VeranstaltungWizardViewModel,
|
viewModel: VeranstaltungWizardViewModel,
|
||||||
onBack: () -> Unit,
|
onBack: () -> Unit,
|
||||||
onFinish: () -> Unit
|
onFinish: () -> Unit,
|
||||||
|
onNavigateToVeranstalterNeu: () -> Unit = {}
|
||||||
) {
|
) {
|
||||||
val state = viewModel.state
|
val state = viewModel.state
|
||||||
|
|
||||||
@@ -69,7 +70,7 @@ fun VeranstaltungWizardScreen(
|
|||||||
) {
|
) {
|
||||||
when (state.currentStep) {
|
when (state.currentStep) {
|
||||||
WizardStep.ZNS_CHECK -> ZnsCheckStep(viewModel)
|
WizardStep.ZNS_CHECK -> ZnsCheckStep(viewModel)
|
||||||
WizardStep.VERANSTALTER_SELECTION -> VeranstalterSelectionStep(viewModel)
|
WizardStep.VERANSTALTER_SELECTION -> VeranstalterSelectionStep(viewModel, onNavigateToVeranstalterNeu)
|
||||||
WizardStep.ANSPRECHPERSON_MAPPING -> AnsprechpersonMappingStep(viewModel)
|
WizardStep.ANSPRECHPERSON_MAPPING -> AnsprechpersonMappingStep(viewModel)
|
||||||
WizardStep.META_DATA -> MetaDataStep(viewModel)
|
WizardStep.META_DATA -> MetaDataStep(viewModel)
|
||||||
WizardStep.TURNIER_ANLAGE -> TurnierAnlageStep(viewModel)
|
WizardStep.TURNIER_ANLAGE -> TurnierAnlageStep(viewModel)
|
||||||
@@ -228,7 +229,10 @@ private fun ZnsCheckStep(viewModel: VeranstaltungWizardViewModel) {
|
|||||||
|
|
||||||
@OptIn(ExperimentalMaterial3Api::class, ExperimentalUuidApi::class)
|
@OptIn(ExperimentalMaterial3Api::class, ExperimentalUuidApi::class)
|
||||||
@Composable
|
@Composable
|
||||||
private fun VeranstalterSelectionStep(viewModel: VeranstaltungWizardViewModel) {
|
private fun VeranstalterSelectionStep(
|
||||||
|
viewModel: VeranstaltungWizardViewModel,
|
||||||
|
onNavigateToVeranstalterNeu: () -> Unit
|
||||||
|
) {
|
||||||
var searchQuery by remember { mutableStateOf("") }
|
var searchQuery by remember { mutableStateOf("") }
|
||||||
Column(verticalArrangement = Arrangement.spacedBy(16.dp)) {
|
Column(verticalArrangement = Arrangement.spacedBy(16.dp)) {
|
||||||
Text("Schritt 2: Veranstalter auswählen", style = MaterialTheme.typography.titleLarge)
|
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)
|
Text("Verein nicht gefunden?", style = MaterialTheme.typography.labelLarge)
|
||||||
|
|
||||||
Button(
|
Button(
|
||||||
onClick = { /* Navigiere zu Veranstalter anlegen */ },
|
onClick = onNavigateToVeranstalterNeu,
|
||||||
colors = ButtonDefaults.buttonColors(containerColor = MaterialTheme.colorScheme.secondary)
|
colors = ButtonDefaults.buttonColors(containerColor = MaterialTheme.colorScheme.secondary)
|
||||||
) {
|
) {
|
||||||
Icon(Icons.Default.Add, null)
|
Icon(Icons.Default.Add, null)
|
||||||
|
|||||||
+9
-1
@@ -10,7 +10,15 @@ class FakeVereinRepository : VereinRepository {
|
|||||||
id = "v1",
|
id = "v1",
|
||||||
name = "URFV Neumarkt am Wallersee",
|
name = "URFV Neumarkt am Wallersee",
|
||||||
oepsNr = "4221",
|
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",
|
plz = "4221",
|
||||||
status = VereinStatus.AKTIV
|
status = VereinStatus.AKTIV
|
||||||
),
|
),
|
||||||
|
|||||||
+2
-1
@@ -240,7 +240,8 @@ fun DesktopContentArea(
|
|||||||
at.mocode.veranstaltung.feature.presentation.VeranstaltungWizardScreen(
|
at.mocode.veranstaltung.feature.presentation.VeranstaltungWizardScreen(
|
||||||
viewModel = viewModel,
|
viewModel = viewModel,
|
||||||
onBack = onBack,
|
onBack = onBack,
|
||||||
onFinish = { onBack() }
|
onFinish = { onBack() },
|
||||||
|
onNavigateToVeranstalterNeu = { onNavigate(AppScreen.VeranstalterNeu) }
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user