iOS: Lagerorte umhängen, Unterkategorien anlegen, eigene Felder verwalten

- Lagerorte: LocationEditor hängt bestehende Orte jetzt um (Elternort auch beim
  Bearbeiten, eigene Unterorte ausgeschlossen); Client updateLocation +
  LocationUpdateRequest (parent_id wird immer gesendet, auch null).
- Kategorien: beim Anlegen optionale Oberkategorie wählbar (Unterkategorie);
  mit Eltern erbt sie deren Verwaltungsart, sonst wird sie gewählt.
- Eigene Felder: neue CategoryFieldsView + FieldEditor (anlegen/bearbeiten/
  löschen von Feldern je Kategorie), erreichbar aus dem Kategorie-Editor;
  Client ownFieldDefinitions/create/update/deleteFieldDefinition + Models.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-07-26 16:10:14 +02:00
parent f88a459e12
commit 9a11e3cfc6
3 changed files with 394 additions and 32 deletions

View File

@@ -280,6 +280,29 @@ actor APIClient {
try await send(try makeRequest("/categories/\(categoryId)/fields"), as: [FieldDefinition].self)
}
/// Nur die *eigenen* Felder einer Kategorie (ohne vererbte) fuer die
/// Feldverwaltung, wo man sie anlegt, bearbeitet und loescht.
func ownFieldDefinitions(categoryId: Int) async throws -> [FieldDefinition] {
try await send(try makeRequest("/field-definitions?category_id=\(categoryId)"),
as: [FieldDefinition].self)
}
func createFieldDefinition(_ payload: FieldDefinitionCreate) async throws -> FieldDefinition {
var request = try makeRequest("/field-definitions", method: "POST")
try jsonBody(&request, payload)
return try await send(request, as: FieldDefinition.self)
}
func updateFieldDefinition(id: Int, _ payload: FieldDefinitionUpdate) async throws -> FieldDefinition {
var request = try makeRequest("/field-definitions/\(id)", method: "PATCH")
try jsonBody(&request, payload)
return try await send(request, as: FieldDefinition.self)
}
func deleteFieldDefinition(id: Int) async throws {
try await sendNoContent(try makeRequest("/field-definitions/\(id)", method: "DELETE"))
}
/// Menge eines Gegenstands an einem Lagerort erhoehen.
func objectCheckIn(_ payload: ObjectCheckInRequest) async throws -> StockResponse {
var request = try makeRequest("/stock/checkin", method: "POST")
@@ -358,6 +381,12 @@ actor APIClient {
return try await send(request, as: StorageLocation.self)
}
func updateLocation(id: Int, _ payload: LocationUpdateRequest) async throws -> StorageLocation {
var request = try makeRequest("/locations/\(id)", method: "PATCH")
try jsonBody(&request, payload)
return try await send(request, as: StorageLocation.self)
}
func deleteLocation(id: Int) async throws {
try await sendNoContent(try makeRequest("/locations/\(id)", method: "DELETE"))
}