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)
|
.foregroundStyle(Color.accentColor)
|
||||||
.frame(width: 28)
|
.frame(width: 28)
|
||||||
VStack(alignment: .leading, spacing: 2) {
|
VStack(alignment: .leading, spacing: 2) {
|
||||||
Text(expense.kategorie).font(.subheadline.bold())
|
Text(label(for: expense.kategorie)).font(.subheadline.bold())
|
||||||
HStack(spacing: 6) {
|
HStack(spacing: 6) {
|
||||||
Text(dateLabel)
|
Text(dateLabel)
|
||||||
if let dog = expense.dogName {
|
if let dog = expense.dogName {
|
||||||
|
|
@ -115,14 +115,24 @@ private struct ExpenseRow: View {
|
||||||
|
|
||||||
private func icon(for kategorie: String) -> String {
|
private func icon(for kategorie: String) -> String {
|
||||||
switch kategorie.lowercased() {
|
switch kategorie.lowercased() {
|
||||||
case "futter", "essen": return "fork.knife"
|
case "futter": return "fork.knife"
|
||||||
case "tierarzt": return "stethoscope"
|
case "tierarzt": return "stethoscope"
|
||||||
case "versicherung": return "shield.lefthalf.filled"
|
case "zubehoer": return "bag.fill"
|
||||||
case "spielzeug": return "tennisball.fill"
|
case "versicherung": return "shield.lefthalf.filled"
|
||||||
case "pflege", "fellpflege": return "scissors"
|
case "sitter": return "person.fill"
|
||||||
case "training", "hundeschule": return "graduationcap.fill"
|
default: return "eurosign.circle"
|
||||||
case "leckerli", "snacks": return "carrot.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
|
@Environment(\.dismiss) private var dismiss
|
||||||
let onSaved: () -> Void
|
let onSaved: () -> Void
|
||||||
|
|
||||||
@State private var kategorie = "Futter"
|
@State private var kategorie = "futter"
|
||||||
@State private var betrag = ""
|
@State private var betrag = ""
|
||||||
@State private var date = Date()
|
@State private var date = Date()
|
||||||
@State private var notiz = ""
|
@State private var notiz = ""
|
||||||
|
|
@ -140,14 +150,24 @@ private struct AddExpenseSheet: View {
|
||||||
@State private var isSaving = false
|
@State private var isSaving = false
|
||||||
@State private var errorMessage: String?
|
@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 {
|
var body: some View {
|
||||||
NavigationStack {
|
NavigationStack {
|
||||||
Form {
|
Form {
|
||||||
Section("Kategorie") {
|
Section("Kategorie") {
|
||||||
Picker("Kategorie", selection: $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") {
|
Section("Betrag") {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue