Files
meldestelle/shared/src/commonMain/kotlin/at/mocode/model/Bewerb.kt
T
2025-07-14 22:02:46 +02:00

100 lines
4.6 KiB
Kotlin

package at.mocode.model
import at.mocode.enums.BeginnzeitTypE
import at.mocode.enums.SparteE
import at.mocode.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 Informationen
var nummer: String, // Offizielle Nummer aus Ausschreibung, z.B. "12"
var bezeichnungOffiziell: String, // z.B. "Dressurprüfung Kl. L", "Standardspringprüfung 115 cm"
var internerName: String?, // Für Listen, falls abweichend/kürzer
var sparteE: SparteE,
var klasse: String?, // z.B. "L", "115 cm", "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 standardBeginnzeitTypE: BeginnzeitTypE = BeginnzeitTypE.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.