MHD nur mit Monat und Jahr in Web-UI und iOS-App
Setzt den Backend-Umbau in beiden Oberflaechen um. Die Genauigkeit gilt jeweils fuer den ganzen Einlager-Vorgang und nicht je Charge: Auf einer Packung steht entweder ein Tagesdatum oder nur Monat/Jahr, gemischt kommt das nicht vor. Vorbelegt wird sie aus dem Produkt, laesst sich aber im Vorgang umstellen. Web-UI: Umschalter im Kopf der Chargenliste; das Eingabefeld wechselt zwischen type="date" und type="month". Im Produktformular gibt es das neue Feld "MHD-Angabe" neben der Gebinde-Bezeichnung. Anzeige laeuft ueber den Settings-Context, damit das eingestellte Datumsformat erhalten bleibt und Monatsangaben ueberall als "09/2026" erscheinen (Auslagern, Uebersicht, Chargentabelle). Die Abgelaufen-Warnung prueft bei Monatsangaben gegen den Monatsletzten - sonst haette eine Packung schon am Monatsersten als abgelaufen gegolten. iOS: Auswahl "Tagesdatum / nur Monat/Jahr" im Einlagern-Formular und beim Anlegen eines Artikels. SwiftUI hat keinen DatePicker ohne Tag, deshalb ein eigener MonthYearPicker aus zwei Auswahlfeldern; die Jahresliste reicht zwei Jahre zurueck (bereits abgelaufene Ware) und fuenfzehn nach vorn (Konserven). Die Chargenauswahl beim Auslagern zeigt Monatsangaben ebenfalls ohne Tag. Getestet: Web-Build (vite) und iOS-Geraetebuild laufen fehlerfrei durch, die App ist auf dem iPhone installiert. Das Verhalten in der Oberflaeche ist noch nicht von Hand durchgeklickt. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -51,9 +51,12 @@ struct Product: Codable, Identifiable, Hashable {
|
||||
let unitName: String
|
||||
let unitFactor: Double
|
||||
let barcodes: [BarcodeEntry]
|
||||
/// Welche MHD-Genauigkeit bei diesem Produkt ueblich ist ("day"/"month").
|
||||
let datePrecision: String?
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case id, barcode, name, brand, stock, kind, barcodes
|
||||
case datePrecision = "date_precision"
|
||||
case imageUrl = "image_url"
|
||||
case baseUnit = "base_unit"
|
||||
case packageSize = "package_size"
|
||||
@@ -118,12 +121,14 @@ struct Lot: Codable, Identifiable, Hashable {
|
||||
let productId: Int
|
||||
let quantity: Double
|
||||
let bestBefore: String?
|
||||
let bestBeforePrecision: String?
|
||||
let locationId: Int?
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case id, quantity
|
||||
case productId = "product_id"
|
||||
case bestBefore = "best_before"
|
||||
case bestBeforePrecision = "best_before_precision"
|
||||
case locationId = "location_id"
|
||||
}
|
||||
}
|
||||
@@ -142,11 +147,13 @@ struct StorageLocation: Codable, Identifiable, Hashable {
|
||||
struct CheckInLine: Codable {
|
||||
let quantity: Double
|
||||
let bestBefore: String?
|
||||
let bestBeforePrecision: String
|
||||
let locationId: Int?
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case quantity
|
||||
case bestBefore = "best_before"
|
||||
case bestBeforePrecision = "best_before_precision"
|
||||
case locationId = "location_id"
|
||||
}
|
||||
}
|
||||
@@ -191,6 +198,7 @@ struct NewProductRequest: Codable {
|
||||
let baseUnit: String
|
||||
let packageSize: Double?
|
||||
let packageLabel: String?
|
||||
let datePrecision: String
|
||||
let groupId: Int?
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
@@ -199,6 +207,7 @@ struct NewProductRequest: Codable {
|
||||
case baseUnit = "base_unit"
|
||||
case packageSize = "package_size"
|
||||
case packageLabel = "package_label"
|
||||
case datePrecision = "date_precision"
|
||||
case groupId = "group_id"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user