impl Abteilung
This commit is contained in:
@@ -1,25 +0,0 @@
|
||||
package at.mocode.shared.entitaeten
|
||||
|
||||
import at.mocode.shared.serializers.KotlinInstantSerializer
|
||||
import at.mocode.shared.serializers.UuidSerializer
|
||||
import com.benasher44.uuid.Uuid
|
||||
import kotlinx.datetime.Clock
|
||||
import kotlinx.datetime.Instant
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
|
||||
@Serializable
|
||||
data class Abteilung(
|
||||
@Serializable(with = UuidSerializer::class)
|
||||
val id: Uuid,
|
||||
@Serializable(with = UuidSerializer::class)
|
||||
val bewerbId: Uuid,
|
||||
val bezeichnung: String, // z.B. "R1", "R2/RS2 u. höher"
|
||||
val beginnZeit: String, // TIME als String, z.B. "09:00" oder "anschließend"
|
||||
val istFixeBeginnZeit: Boolean = false,
|
||||
@Serializable(with = KotlinInstantSerializer::class)
|
||||
val createdAt: Instant = Clock.System.now(),
|
||||
@Serializable(with = KotlinInstantSerializer::class)
|
||||
var updatedAt: Instant = Clock.System.now()
|
||||
)
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
package at.mocode.shared.entitaeten
|
||||
|
||||
import at.mocode.shared.enums.BewerbStatus
|
||||
import at.mocode.shared.enums.Sparte
|
||||
import at.mocode.shared.serializers.BigDecimalSerializer
|
||||
import at.mocode.shared.serializers.KotlinInstantSerializer
|
||||
import at.mocode.shared.serializers.UuidSerializer
|
||||
import com.benasher44.uuid.Uuid
|
||||
import com.ionspin.kotlin.bignum.decimal.BigDecimal
|
||||
import kotlinx.datetime.Instant
|
||||
import kotlinx.datetime.LocalDate
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class Bewerb(
|
||||
@Serializable(with = UuidSerializer::class)
|
||||
val id: Uuid,
|
||||
@Serializable(with = UuidSerializer::class)
|
||||
var turnierId: Uuid,
|
||||
var nummer: Int,
|
||||
var bezeichnung: String,
|
||||
var klasse: String,
|
||||
var datum: LocalDate,
|
||||
var sparte: Sparte,
|
||||
var richtverfahren: String?,
|
||||
var beginnZeit: String, // TIME als String (z.B. "09:00" oder "anschließend")
|
||||
var istFixeBeginnZeit: Boolean = false,
|
||||
var laufzeitProStarter: Int?, // Dauer pro Starter in Minuten
|
||||
var maxStarter: Int?,
|
||||
@Serializable(with = BigDecimalSerializer::class)
|
||||
var nenngeld: BigDecimal?,
|
||||
var sonderpruefungReferenz: SonderpruefungReferenz?,
|
||||
var cupReferenz: List<CupReferenz> = emptyList(),
|
||||
var status: BewerbStatus = BewerbStatus.GEPLANT,
|
||||
var details: String?,
|
||||
var einteilung: String?,
|
||||
@Serializable(with = KotlinInstantSerializer::class)
|
||||
val createdAt: Instant,
|
||||
@Serializable(with = KotlinInstantSerializer::class)
|
||||
var updatedAt: Instant
|
||||
)
|
||||
@@ -15,6 +15,8 @@ enum class BewerbStatus { GEPLANT, OFFEN_FUER_NENNUNG, GESCHLOSSEN_FUER_NENNUNG,
|
||||
@Serializable
|
||||
enum class Bedingungstyp { LIZENZ_REITER, LIZENZ_FAHRER, ALTER_PFERD, ALTER_REITER, RASSE_PFERD, GESCHLECHT_PFERD, GESCHLECHT_REITER, STARTKARTE, SONSTIGES }
|
||||
@Serializable
|
||||
enum class BeginnzeitTyp { FIX_UM, NACH_BEWERB, CA_UM, ANSCHLIESSEND }
|
||||
@Serializable
|
||||
enum class Operator { GLEICH, UNGLEICH, MINDESTENS, MAXIMAL, ZWISCHEN, IN_LISTE, NICHT_IN_LISTE }
|
||||
@Serializable
|
||||
enum class FunktionaerRolle { RICHTER, PARCOURSBAUER, PARCOURSBAU_ASSISTENT, TECHN_DELEGIERTER, TURNIERBEAUFTRAGTER, STEWARD, ZEITNEHMER, SCHREIBER, VERANSTALTER_KONTAKT, TURNIERLEITER, HELFER, SONSTIGE }
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
package at.mocode.shared.model
|
||||
|
||||
import at.mocode.shared.enums.BeginnzeitTyp
|
||||
import at.mocode.shared.serializers.BigDecimalSerializer
|
||||
import at.mocode.shared.serializers.KotlinInstantSerializer
|
||||
import at.mocode.shared.serializers.KotlinLocalTimeSerializer
|
||||
import at.mocode.shared.serializers.UuidSerializer
|
||||
import com.benasher44.uuid.Uuid
|
||||
import com.benasher44.uuid.uuid4
|
||||
import com.ionspin.kotlin.bignum.decimal.BigDecimal
|
||||
import kotlinx.datetime.Clock
|
||||
import kotlinx.datetime.Instant
|
||||
import kotlinx.datetime.LocalDate
|
||||
import kotlinx.datetime.LocalTime
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
|
||||
@Serializable
|
||||
data class Abteilung(
|
||||
@Serializable(with = UuidSerializer::class)
|
||||
val id: Uuid = uuid4(),
|
||||
@Serializable(with = UuidSerializer::class)
|
||||
val bewerbId: Uuid, // Gehört zu diesem Hauptbewerb
|
||||
|
||||
var abteilungsKennzeichen: String, // z.B. "1", "A", "R1", oder generiert "Abt1"
|
||||
var bezeichnungIntern: String?, // Zur Unterscheidung im Admin, z.B. "R1 Reiter", "Lizenzfrei", "Pony LK3"
|
||||
var bezeichnungAufStartliste: String?, // Wie es auf der Start/Ergebnisliste erscheinen soll
|
||||
|
||||
// Kriterien für diese Abteilung (aus SUDO "Teilen nach:")
|
||||
var teilungsKriteriumLizenz: String? = null, // z.B. "R1", "R2+R3", "lizenzfrei" (kann komplex sein)
|
||||
var teilungsKriteriumPferdealter: String? = null,
|
||||
var teilungsKriteriumAltersklasseReiter: String? = null,
|
||||
var teilungsKriteriumAnzahlMin: Int? = null, // Mindestanzahl für diese Teilung
|
||||
var teilungsKriteriumAnzahlMax: Int? = null, // Maximale Anzahl für diese Teilung
|
||||
var teilungsKriteriumFreiText: String? = null, // Für "freie Angabe"
|
||||
|
||||
// Überschreibt ggf. Werte vom Hauptbewerb
|
||||
@Serializable(with = BigDecimalSerializer::class)
|
||||
var startgeld: BigDecimal? = null,
|
||||
var dotierungen: List<DotierungsAbstufung> = emptyList(),
|
||||
@Serializable(with = UuidSerializer::class)
|
||||
var platzId: Uuid?, // FK zum Austragungsplatz (kann vom Hauptbewerb abweichen)
|
||||
var datum: LocalDate?,
|
||||
var beginnzeitTyp: BeginnzeitTyp = BeginnzeitTyp.ANSCHLIESSEND,
|
||||
@Serializable(with = KotlinLocalTimeSerializer::class)
|
||||
var beginnzeitFix: LocalTime? = null,
|
||||
@Serializable(with = UuidSerializer::class)
|
||||
var beginnNachAbteilungId: Uuid?, // Reihenfolge der Abteilungen
|
||||
var beginnzeitCa: LocalTime? = null,
|
||||
var dauerProStartGeschaetztSek: Int? = null,
|
||||
var umbauzeitNachAbteilungMin: Int? = null,
|
||||
var besichtigungszeitVorAbteilungMin: Int? = null,
|
||||
var stechzeitZusaetzlichMin: Int? = null,
|
||||
|
||||
var anzahlStarter: Int = 0, // Wird später befüllt
|
||||
var istAktiv: Boolean = true, // Kann diese Abteilung genannt werden?
|
||||
|
||||
@Serializable(with = KotlinInstantSerializer::class)
|
||||
val createdAt: Instant = Clock.System.now(),
|
||||
@Serializable(with = KotlinInstantSerializer::class)
|
||||
var updatedAt: Instant = Clock.System.now()
|
||||
)
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package at.mocode.shared.entitaeten
|
||||
package at.mocode.shared.model
|
||||
|
||||
import at.mocode.shared.serializers.BigDecimalSerializer
|
||||
import at.mocode.shared.serializers.KotlinInstantSerializer
|
||||
@@ -0,0 +1,100 @@
|
||||
package at.mocode.shared.model
|
||||
|
||||
import at.mocode.shared.enums.BeginnzeitTyp
|
||||
import at.mocode.shared.enums.Sparte
|
||||
import at.mocode.shared.serializers.*
|
||||
import com.benasher44.uuid.Uuid
|
||||
import com.benasher44.uuid.uuid4
|
||||
import com.ionspin.kotlin.bignum.decimal.BigDecimal
|
||||
import kotlinx.datetime.Clock
|
||||
import kotlinx.datetime.Instant
|
||||
import kotlinx.datetime.LocalDate
|
||||
import kotlinx.datetime.LocalTime
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
|
||||
@Serializable
|
||||
data class Bewerb(
|
||||
@Serializable(with = UuidSerializer::class)
|
||||
val id: Uuid = uuid4(),
|
||||
@Serializable(with = UuidSerializer::class)
|
||||
val turnierId: Uuid,
|
||||
|
||||
// Allgemeine Infos
|
||||
var nummer: String, // Offizielle Nummer aus Ausschreibung, z.B. "12"
|
||||
var bezeichnungOffiziell: String, // z.B. "Dressurprüfung Kl. L", "Standardspringprüfung 115cm"
|
||||
var internerName: String?, // Für Listen, falls abweichend/kürzer
|
||||
var sparte: Sparte,
|
||||
var klasse: String?, // z.B. "L", "115cm", "Reiterpass"
|
||||
var kategorieOetoDesBewerbs: String?, // ÖTO Kategorie, z.B. "CDN-C Neu". Kann vom Turnier abweichen/spezifischer sein.
|
||||
// Wird für die Gültigkeit von Regeln/Lizenzen herangezogen.
|
||||
var teilnahmebedingungenText: String? = null, // Freitext für spezielle Teilnahmebedingungen
|
||||
|
||||
// Detail-Informationen (aus den Tabs deines alten Programms)
|
||||
var maxPferdeProReiter: Int? = null,
|
||||
var pferdealterAnforderung: String? = null, // z.B. "4-jährig", "alle", "5-6j."
|
||||
var zusatzTextZeile1: String? = null, // Für Cup-Namen, Sponsoren etc. auf Ergebnislisten
|
||||
var zusatzTextZeile2: String? = null,
|
||||
var zusatzTextZeile3: String? = null,
|
||||
var logoBewerbUrl: String? = null,
|
||||
var parcoursskizzeUrl: String? = null,
|
||||
|
||||
// Bewertung & Aufgabe
|
||||
var pruefungsArtDetailName: String?, // Beschreibung der Prüfung aus SUDO "Prüfung" Dropdown
|
||||
@Serializable(with = UuidSerializer::class)
|
||||
var pruefungsaufgabeId: Uuid?, // FK zu Pruefungsaufgabe.id (bes. für Dressur)
|
||||
@Serializable(with = UuidSerializer::class)
|
||||
var richtverfahrenId: Uuid?, // FK zu Richtverfahren.id
|
||||
var anzahlRichterGeplant: Int? = 1,
|
||||
var paraGradeAnforderung: String? = null,
|
||||
var istManuellKalkuliert: Boolean = false, // Für Ergebnisberechnung
|
||||
|
||||
// Geldpreis/Dotierung
|
||||
var istDotiert: Boolean = false,
|
||||
@Serializable(with = BigDecimalSerializer::class)
|
||||
var startgeldStandard: BigDecimal? = null, // Standard-Startgeld für diesen Bewerb
|
||||
@Serializable(with = BigDecimalSerializer::class)
|
||||
var startgeldKaderreiter: BigDecimal? = null,
|
||||
var auszahlungsModusGeldpreis: String? = null,
|
||||
var hatGeldpreisFuerKaderreiter: Boolean = false,
|
||||
@Serializable(with = UuidSerializer::class)
|
||||
var geldpreisVorlageId: Uuid?, // FK zu einer GeldpreisVorlagen-Tabelle (optional für später)
|
||||
var dotierungenManuell: List<DotierungsAbstufung> = emptyList(),
|
||||
|
||||
// Ort/Zeit (Default-Werte, können pro Abteilung überschrieben werden)
|
||||
@Serializable(with = UuidSerializer::class)
|
||||
var standardPlatzId: Uuid?, // FK zum Default-Austragungsplatz
|
||||
@Serializable(with = KotlinLocalDateSerializer::class)
|
||||
var standardDatum: LocalDate?,
|
||||
var standardBeginnzeitTyp: BeginnzeitTyp = BeginnzeitTyp.ANSCHLIESSEND, // neuer Enum Wert
|
||||
@Serializable(with = KotlinLocalTimeSerializer::class)
|
||||
var standardBeginnzeitFix: LocalTime? = null,
|
||||
@Serializable(with = UuidSerializer::class)
|
||||
var standardBeginnNachBewerbId: Uuid?,
|
||||
@Serializable(with = KotlinLocalTimeSerializer::class)
|
||||
var standardBeginnzeitCa: LocalTime? = null,
|
||||
var standardDauerProStartGeschaetztSek: Int? = 120,
|
||||
var standardUmbauzeitNachBewerbMin: Int? = 10,
|
||||
var standardBesichtigungszeitVorBewerbMin: Int? = 10,
|
||||
var standardStechzeitZusaetzlichMin: Int? = 0,
|
||||
|
||||
// ÖTO/ZNS Spezifika
|
||||
var oepsBewerbsartCodeZns: String? = null,
|
||||
var oepsAltersklasseCodeZns: String? = null,
|
||||
var oepsPferderassenCodeZns: String? = null,
|
||||
|
||||
// Steuerung
|
||||
var notizenIntern: String? = null,
|
||||
var istStartlisteFinal: Boolean = false,
|
||||
var istErgebnislisteFinal: Boolean = false,
|
||||
var erfordertAbteilungsAuswahlFuerNennung: Boolean = true, // Standardmäßig ja, außer es gibt nur eine Default-Abteilung
|
||||
|
||||
@Serializable(with = KotlinInstantSerializer::class)
|
||||
val createdAt: Instant = Clock.System.now(),
|
||||
@Serializable(with = KotlinInstantSerializer::class)
|
||||
var updatedAt: Instant = Clock.System.now()
|
||||
)
|
||||
|
||||
// Enum BeginnzeitTypEnum um ANSCHLIESSEND erweitern
|
||||
|
||||
// ANSCHLIESSEND wäre der Standard, wenn keine explizite Zeit oder "nach Bewerb X" angegeben ist.
|
||||
@@ -0,0 +1,14 @@
|
||||
package at.mocode.shared.model
|
||||
|
||||
import at.mocode.shared.serializers.BigDecimalSerializer
|
||||
import com.ionspin.kotlin.bignum.decimal.BigDecimal
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
|
||||
@Serializable
|
||||
data class DotierungsAbstufung(
|
||||
val platz: Int, // Für welchen Platz gilt dieser Geldpreis (z.B. 1, 2, 3)
|
||||
@Serializable(with = BigDecimalSerializer::class)
|
||||
val betrag: BigDecimal,
|
||||
val beschreibung: String? = null // z.B. "Ehrenpreis zusätzlich"
|
||||
)
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package at.mocode.shared.entitaeten
|
||||
package at.mocode.shared.model
|
||||
|
||||
import at.mocode.shared.serializers.UuidSerializer
|
||||
import com.benasher44.uuid.Uuid
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package at.mocode.shared.entitaeten
|
||||
package at.mocode.shared.model
|
||||
|
||||
import at.mocode.shared.enums.PlatzTyp
|
||||
import at.mocode.shared.serializers.UuidSerializer
|
||||
@@ -4,6 +4,7 @@ import at.mocode.shared.enums.Sparte
|
||||
import at.mocode.shared.serializers.KotlinInstantSerializer
|
||||
import at.mocode.shared.serializers.UuidSerializer
|
||||
import com.benasher44.uuid.Uuid
|
||||
import com.benasher44.uuid.uuid4
|
||||
import kotlinx.datetime.Clock
|
||||
import kotlinx.datetime.Instant
|
||||
import kotlinx.serialization.Serializable
|
||||
@@ -11,7 +12,7 @@ import kotlinx.serialization.Serializable
|
||||
@Serializable
|
||||
data class Pruefungsaufgabe(
|
||||
@Serializable(with = UuidSerializer::class)
|
||||
val id: Uuid,
|
||||
val id: Uuid = uuid4(),
|
||||
var kuerzel: String, // Eindeutiges Kürzel, z.B. "A1", "LF3", "FEI GP PSG"
|
||||
var nameLang: String, // Vollständiger Name, z.B. "Dressuraufgabe A1 (GM, 20x40m)"
|
||||
var kategorieText: String?, // Übergeordnete Kategorie, z.B. "Dressuraufgaben Klasse A", "FEI Grand Prix Serie"
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
package at.mocode.shared.model
|
||||
|
||||
import at.mocode.shared.enums.Sparte
|
||||
import at.mocode.shared.serializers.KotlinInstantSerializer
|
||||
import at.mocode.shared.serializers.UuidSerializer
|
||||
import com.benasher44.uuid.Uuid
|
||||
import com.benasher44.uuid.uuid4
|
||||
import kotlinx.datetime.Clock
|
||||
import kotlinx.datetime.Instant
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class Richtverfahren(
|
||||
@Serializable(with = UuidSerializer::class)
|
||||
val id: Uuid = uuid4(),
|
||||
var code: String, // Eindeutiger Code, z.B. "A", "A2_OETO204", "C_ZEIT", "STIL_A_IDEALZEIT"
|
||||
var bezeichnung: String, // z.B. "Standardspringprüfung nach Fehlern und Zeit (§204 A2)", "Stilspringprüfung Kl. A mit Idealzeit"
|
||||
var sparte: Sparte,
|
||||
var basisRegelnBeschreibungKurz: String?, // Kurze Beschreibung oder Hauptmerkmal
|
||||
var oetoParagraphVerweis: String?, // z.B. "ÖTO §204 A2", "ÖTO §104"
|
||||
var hatStechen: Boolean = false,
|
||||
var artDesStechens: String? = null, // z.B. "nach Fehlern/Zeit", "nur Fehler"
|
||||
// Weitere strukturierte Regeln könnten hier folgen, z.B. für Fehlerpunkte, Zeitberechnung.
|
||||
// Für V1 könnten viele Regeln noch in der Anwendungslogik sein, basierend auf dem `code`.
|
||||
// Beispiel für strukturierte Fehler:
|
||||
// var fehlerdefinitionen: Map<String, Double> = emptyMap(), // z.B. "HINDERNIS" -> 4.0
|
||||
var istAktiv: Boolean = true,
|
||||
@Serializable(with = KotlinInstantSerializer::class)
|
||||
val createdAt: Instant = Clock.System.now(),
|
||||
@Serializable(with = KotlinInstantSerializer::class)
|
||||
var updatedAt: Instant = Clock.System.now()
|
||||
)
|
||||
+7
-2
@@ -1,7 +1,12 @@
|
||||
package at.mocode.shared.entitaeten
|
||||
package at.mocode.shared.model
|
||||
|
||||
import at.mocode.shared.model.Artikel
|
||||
import at.mocode.shared.enums.NennungsArt
|
||||
import at.mocode.shared.serializers.*
|
||||
import at.mocode.shared.serializers.BigDecimalSerializer
|
||||
import at.mocode.shared.serializers.KotlinInstantSerializer
|
||||
import at.mocode.shared.serializers.KotlinLocalDateSerializer
|
||||
import at.mocode.shared.serializers.KotlinLocalDateTimeSerializer
|
||||
import at.mocode.shared.serializers.UuidSerializer
|
||||
import com.benasher44.uuid.Uuid
|
||||
import com.benasher44.uuid.uuid4
|
||||
import com.ionspin.kotlin.bignum.decimal.BigDecimal
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package at.mocode.shared.entitaeten
|
||||
package at.mocode.shared.model
|
||||
|
||||
import at.mocode.shared.enums.VeranstalterTyp
|
||||
import at.mocode.shared.serializers.KotlinInstantSerializer
|
||||
@@ -6,6 +6,7 @@ import com.ionspin.kotlin.bignum.decimal.BigDecimal
|
||||
import kotlinx.datetime.Instant
|
||||
import kotlinx.datetime.LocalDate
|
||||
import kotlinx.datetime.LocalDateTime
|
||||
import kotlinx.datetime.LocalTime
|
||||
import kotlinx.serialization.KSerializer
|
||||
import kotlinx.serialization.descriptors.PrimitiveKind
|
||||
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
|
||||
@@ -42,3 +43,9 @@ object KotlinLocalDateTimeSerializer : KSerializer<LocalDateTime> {
|
||||
override fun serialize(encoder: Encoder, value: LocalDateTime) = encoder.encodeString(value.toString())
|
||||
override fun deserialize(decoder: Decoder): LocalDateTime = LocalDateTime.parse(decoder.decodeString())
|
||||
}
|
||||
|
||||
object KotlinLocalTimeSerializer : KSerializer<LocalTime> {
|
||||
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("LocalTime", PrimitiveKind.STRING)
|
||||
override fun serialize(encoder: Encoder, value: LocalTime) = encoder.encodeString(value.toString())
|
||||
override fun deserialize(decoder: Decoder): LocalTime = LocalTime.parse(decoder.decodeString())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user