Zum Hauptinhalt springen

Lager

Zweck

Lager bilden physische oder logische Bestandsorte ab — Hauptlager, Aussenlager, Servicefahrzeuge etc. Pro Lager werden Produktbestaende, Lagerorte (Spots/Regale) und Inventuren gefuehrt. Ein Lager kann über PurchaseDocument.parentType = 'Warehouse' Empfaenger einer Bestellung sein.

Voraussetzungen

- Berechtigung `create:Warehouse`.

Berechtigungen (CASL)

Frontend-Page-Guard:

ActionSubjectKeycloak-Rolle
viewFE_Warehouse
viewWarehouseAPP_SPEAMCORE_VIEW_WAREHOUSE

Tab-Subjects:

TabSubject
ProdukteWarehouseProduct:view
LagerorteWarehouseSpot:view
InventurenWarehouseInventory:view

API-Datenzugriff:

ActionSubjectEndpointKeycloak-Rolle
viewWarehouseGET /api/warehouses, GET /api/warehouses/:idAPP_SPEAMCORE_VIEW_WAREHOUSE
createWarehousePOST /api/warehousesAPP_SPEAMCORE_CREATE_WAREHOUSE
updateWarehousePATCH /api/warehouses/:idAPP_SPEAMCORE_UPDATE_WAREHOUSE
deleteWarehouseDELETE /api/warehouses/:idAPP_SPEAMCORE_DELETE_WAREHOUSE

Schritt-für-Schritt-Anleitung

Lager anlegen

  1. Lager (/warehouses) → + Lager hinzufuegen.
  2. Detailseite öffnet sich, Auto-Save laeuft beim Ändern jedes Feldes (Toast „Erfolg — Änderungen gespeichert").
  3. Pflichtbereich: name. Optional Adresse (Strasse/PLZ/Stadt/Land), E-Mail, Telefon.
  4. latitude/longitude werden in der UI nicht editiert — nur über API setzbar.

Lager-Liste mit DataGrid und +-Button

Lager-Detailseite — Tab Allgemeine Daten mit Stamm-, Adress-, E-Mail- und Telefonfeldern; Tabs Allgemeine Daten, Lagerprodukte, Lagerplaetze, Inventarisierung

Toolbar (Detail-Seite)

Schlanke Toolbar oben rechts:

IconAktion (aria-label)CASLWirkung
ZurückgehenZurück zur Liste.
🏠Zur Startseite gehenSpringt auf das Dashboard / /.
⏮/◀/▶/⏭PaginationNavigation durch die gefilterte Liste — Massen-Bearbeitung ohne Liste-Sprung.

Wie auf jeder Detail-Seite verfuegbar — siehe Floating-Quickbar:

  • KAL. (Mini-Kalender)
  • ZEIT (Persoenliche Wochen-Arbeitszeit)
  • ARBEIT (Eigene bevorstehende Aufträge)

UI-Elemente

Button: „+ Neu"

Listenseite. Erfordert create:Warehouse.

Felder und Eingaben

FeldnamePflichtDatentypWirkung beim AusfuellenVoraussetzung
nameneinStringLager-Name in Auswahllisten (Bestellungen, Bestand, Inventur).
streetneinStringStrasse und Hausnummer der Lagerstaette.
postalCodeneinStringPLZ.
cityneinStringStadt.
countryneinCountry-SelectLand aus Geo-Stammdaten.Geo-Stamm geladen.
emailGeneralneinE-MailAllgemeine Kontakt-Adresse für das Lager.RFC-Format.
phoneneinString + Country-Code-SelectTelefonnummer mit Vorwahl-Selector (Default +49).
latitude / longitudeDecimalGeokoordinaten für Karten-Visualisierung. Nur über API editierbar — kein UI-Feld.API-Zugriff.

Zusaetzlich am Detail-Form-Ende: Buttons „Neues Attributfeld" (zentral verwaltetes Attribut über AttributeParent) und „Neues Feld" (freies Custom-Feld). Siehe Custom-Fields und AttributeFields.

Ein Lager-Typ-Feld ist im UI aktuell nicht vorhanden — falls fachlich benötigt (z. B. Hauptlager / Servicewagen / Konsignationslager), muesste das Backend-Modell erweitert und ein UI-Feld ergaenzt werden.

Workflows und Zustaende

Lager haben kein Status-Feld.

Wiederverwendbare Konzepte

Verknuepfungen zu anderen Modulen

  • BestandWarehouseProduct (1:N) je productId.
  • LagerorteWarehouseSpot (Regal/Fach).
  • InventurenWarehouseInventory.
  • BestellbelegePurchaseDocument.parentType = 'Warehouse' (Wareneingangsempfaenger).

Häufige Fehler und Lösungen

FehlerLösung
latitude/longitude nicht änderbar in UIPer Design — nur über API. Geo-Picking-Feature folgt.
Lager nicht in Auswahl als Empfaenger sichtbarWarehouse:view oder clientScope blockiert Zugriff.

API/Schnittstellen

MethodeEndpointZweckCASL
GET/api/warehousesListeview Warehouse
GET/api/warehouses/:idDetailview Warehouse
POST/api/warehousesAnlegencreate Warehouse
PATCH/api/warehouses/:idÄndernupdate Warehouse
DELETE/api/warehouses/:idSoft-Deletedelete Warehouse

Versionshinweise

  • 2026-04-29: Initiale Veroeffentlichung.