Ausgaben: Kategorien backend-konform (kleingeschrieben, sechs Werte)
Backend-Whitelist: tierarzt, futter, zubehoer, versicherung, sitter, sonstiges. Bisher schickte ich großgeschriebene Display-Strings, daher HTTP 400 'Ungültige Kategorie: Futter'. Jetzt: interner Key kleingeschrieben für die API, label() für die Anzeige in der Liste und im Picker.
This commit is contained in:
parent
f054b2a07f
commit
c03f018c0c
1 changed files with 32 additions and 12 deletions
|
|
@ -93,7 +93,7 @@ private struct ExpenseRow: View {
|
|||
.foregroundStyle(Color.accentColor)
|
||||
.frame(width: 28)
|
||||
VStack(alignment: .leading, spacing: 2) {
|
||||
Text(expense.kategorie).font(.subheadline.bold())
|
||||
Text(label(for: expense.kategorie)).font(.subheadline.bold())
|
||||
HStack(spacing: 6) {
|
||||
Text(dateLabel)
|
||||
if let dog = expense.dogName {
|
||||
|
|
@ -115,14 +115,24 @@ private struct ExpenseRow: View {
|
|||
|
||||
private func icon(for kategorie: String) -> String {
|
||||
switch kategorie.lowercased() {
|
||||
case "futter", "essen": return "fork.knife"
|
||||
case "tierarzt": return "stethoscope"
|
||||
case "versicherung": return "shield.lefthalf.filled"
|
||||
case "spielzeug": return "tennisball.fill"
|
||||
case "pflege", "fellpflege": return "scissors"
|
||||
case "training", "hundeschule": return "graduationcap.fill"
|
||||
case "leckerli", "snacks": return "carrot.fill"
|
||||
default: return "eurosign.circle"
|
||||
case "futter": return "fork.knife"
|
||||
case "tierarzt": return "stethoscope"
|
||||
case "zubehoer": return "bag.fill"
|
||||
case "versicherung": return "shield.lefthalf.filled"
|
||||
case "sitter": return "person.fill"
|
||||
default: return "eurosign.circle"
|
||||
}
|
||||
}
|
||||
|
||||
private func label(for kategorie: String) -> String {
|
||||
switch kategorie.lowercased() {
|
||||
case "futter": return "Futter"
|
||||
case "tierarzt": return "Tierarzt"
|
||||
case "zubehoer": return "Zubehör"
|
||||
case "versicherung": return "Versicherung"
|
||||
case "sitter": return "Sitter"
|
||||
case "sonstiges": return "Sonstiges"
|
||||
default: return kategorie.capitalized
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -131,7 +141,7 @@ private struct AddExpenseSheet: View {
|
|||
@Environment(\.dismiss) private var dismiss
|
||||
let onSaved: () -> Void
|
||||
|
||||
@State private var kategorie = "Futter"
|
||||
@State private var kategorie = "futter"
|
||||
@State private var betrag = ""
|
||||
@State private var date = Date()
|
||||
@State private var notiz = ""
|
||||
|
|
@ -140,14 +150,24 @@ private struct AddExpenseSheet: View {
|
|||
@State private var isSaving = false
|
||||
@State private var errorMessage: String?
|
||||
|
||||
private let kategorien = ["Futter", "Tierarzt", "Versicherung", "Spielzeug", "Pflege", "Training", "Leckerli", "Sonstiges"]
|
||||
/// Backend-Whitelist: tierarzt, futter, zubehoer, versicherung, sitter, sonstiges
|
||||
private let kategorien: [(key: String, label: String)] = [
|
||||
("futter", "Futter"),
|
||||
("tierarzt", "Tierarzt"),
|
||||
("zubehoer", "Zubehör"),
|
||||
("versicherung", "Versicherung"),
|
||||
("sitter", "Sitter"),
|
||||
("sonstiges", "Sonstiges")
|
||||
]
|
||||
|
||||
var body: some View {
|
||||
NavigationStack {
|
||||
Form {
|
||||
Section("Kategorie") {
|
||||
Picker("Kategorie", selection: $kategorie) {
|
||||
ForEach(kategorien, id: \.self) { Text($0) }
|
||||
ForEach(kategorien, id: \.key) { entry in
|
||||
Text(entry.label).tag(entry.key)
|
||||
}
|
||||
}
|
||||
}
|
||||
Section("Betrag") {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue