Gegenstands-Verwaltung (Non-Food) neben Lebensmitteln
Die Kategorie bestimmt die Verwaltungsart (food/object). Gegenstaende: Menge je Lagerort statt Chargen/MHD, Umlagern (ohne Grund) und Entfernen mit Pflicht-Grund samt Entnahme-Statistik. Beliebig viele eigene Felder je Kategorie (vererbt an Unterkategorien), "gekauft bei" ueber eine verwaltbare Shop-Liste und ein Produktlink. Barcode-Lookup zusaetzlich ueber Open Products Facts. Der Lebensmittel-Teil (Chargen/MHD/FEFO) bleibt unveraendert. Umgesetzt in Backend (FastAPI, +Tests gruen), Web (React) und iOS (SwiftUI). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -188,6 +188,43 @@ actor APIClient {
|
||||
try check(response, data: data)
|
||||
}
|
||||
|
||||
// MARK: - Gegenstaende (Non-Food)
|
||||
|
||||
func shops() async throws -> [ShopItem] {
|
||||
try await send(try makeRequest("/shops"), as: [ShopItem].self)
|
||||
}
|
||||
|
||||
/// Effektive (vererbte) Felder einer Kategorie – fuer das Artikelformular.
|
||||
func categoryFields(categoryId: Int) async throws -> [FieldDefinition] {
|
||||
try await send(try makeRequest("/categories/\(categoryId)/fields"), as: [FieldDefinition].self)
|
||||
}
|
||||
|
||||
/// Menge eines Gegenstands an einem Lagerort erhoehen.
|
||||
func objectCheckIn(_ payload: ObjectCheckInRequest) async throws -> StockResponse {
|
||||
var request = try makeRequest("/stock/checkin", method: "POST")
|
||||
try jsonBody(&request, payload)
|
||||
return try await send(request, as: StockResponse.self)
|
||||
}
|
||||
|
||||
/// Menge von einem Lagerort zum anderen umbuchen (ohne Grund).
|
||||
func relocate(_ payload: RelocateRequest) async throws -> StockResponse {
|
||||
var request = try makeRequest("/stock/relocate", method: "POST")
|
||||
try jsonBody(&request, payload)
|
||||
return try await send(request, as: StockResponse.self)
|
||||
}
|
||||
|
||||
/// Menge mit Pflicht-Grund aus dem Bestand entfernen.
|
||||
func removeStock(_ payload: RemoveRequest) async throws -> StockResponse {
|
||||
var request = try makeRequest("/stock/remove", method: "POST")
|
||||
try jsonBody(&request, payload)
|
||||
return try await send(request, as: StockResponse.self)
|
||||
}
|
||||
|
||||
/// Entnahme-Statistik (Summe je Grund) und die juengsten Entnahmen.
|
||||
func productRemovals(id: Int) async throws -> RemovalSummary {
|
||||
try await send(try makeRequest("/products/\(id)/removals"), as: RemovalSummary.self)
|
||||
}
|
||||
|
||||
// MARK: - Uebersicht und Verlauf
|
||||
|
||||
func dashboardStats() async throws -> DashboardStats {
|
||||
|
||||
Reference in New Issue
Block a user