iOS: Benachrichtigungs-Kategorien laden + Ein-/Auslager-Meldung huebscher
1) In den Benachrichtigungs-Regeln liess sich keine Kategorie waehlen: der Abruf
holte den ganzen Snapshot (Produkte + Ablauf + Kategorien) - schlug ein Teil
fehl, kamen auch die Kategorien leer. snapshot ist jetzt widerstandsfaehig
(Teilausfaelle egal), und die Regel-Bearbeitung holt nur noch die Kategorien.
2) Die gruene Erfolgsmeldung ist jetzt eine saubere, eingerueckte Pille mit Titel
("Eingelagert"/"Ausgelagert") und Detailzeile ("Neuer Bestand: 2 Packungen").
Die Einheit steht in der Mehrzahl (Gebinde-Plural vom Server; Basiseinheiten
wie Gramm bleiben unveraendert).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -135,7 +135,7 @@ struct CheckInView: View {
|
||||
// Einzelstücke werden nicht als Charge eingelagert, sondern als
|
||||
// physische Exemplare (UID/QR) angelegt – die zählen den Bestand.
|
||||
ItemAddSheet(productId: item.id, onDone: {
|
||||
status = "\(item.name): Einzelstück(e) angelegt."
|
||||
status = "Eingelagert\n\(item.name): Einzelstück(e) angelegt."
|
||||
})
|
||||
} else if item.foodLike {
|
||||
// Lebensmittel + Verbrauchsgegenstand: Charge mit Menge/MHD.
|
||||
@@ -147,7 +147,7 @@ struct CheckInView: View {
|
||||
// Menge je Lagerort (Gegenstand): ohne MHD, direkt Menge + Lagerort.
|
||||
ObjectAddSheet(product: item, locations: locations,
|
||||
einheit: item.unitName.isEmpty ? "Stück" : item.unitName,
|
||||
perform: { status = "\(item.name): Menge eingelagert." })
|
||||
perform: { status = "Eingelagert\n\(item.name): Menge hinzugefügt." })
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -187,15 +187,21 @@ struct CheckInView: View {
|
||||
// MARK: - Bausteine
|
||||
|
||||
private func banner(_ text: String, color: Color) -> some View {
|
||||
Text(text)
|
||||
.font(.callout)
|
||||
.padding(10)
|
||||
.frame(maxWidth: .infinity, alignment: .leading)
|
||||
.background(color.opacity(0.9))
|
||||
.foregroundStyle(.white)
|
||||
.clipShape(RoundedRectangle(cornerRadius: 10))
|
||||
.listRowInsets(EdgeInsets())
|
||||
.listRowBackground(Color.clear)
|
||||
// Erste Zeile = Titel (fett), Rest = Detail – ergibt eine saubere,
|
||||
// rundum eingerückte Melde-Pille statt eines randlosen Balkens.
|
||||
let zeilen = text.components(separatedBy: "\n")
|
||||
return VStack(alignment: .leading, spacing: 2) {
|
||||
Text(zeilen.first ?? text).font(.headline)
|
||||
if zeilen.count > 1 {
|
||||
Text(zeilen.dropFirst().joined(separator: "\n")).font(.subheadline)
|
||||
}
|
||||
}
|
||||
.padding(.horizontal, 16).padding(.vertical, 12)
|
||||
.frame(maxWidth: .infinity, alignment: .leading)
|
||||
.foregroundStyle(.white)
|
||||
.background(color, in: RoundedRectangle(cornerRadius: 14))
|
||||
.listRowInsets(EdgeInsets(top: 4, leading: 16, bottom: 4, trailing: 16))
|
||||
.listRowBackground(Color.clear)
|
||||
}
|
||||
|
||||
private func bestandText(_ p: Product) -> String {
|
||||
|
||||
Reference in New Issue
Block a user