feat(lager): Lagerbewegung-Protokoll (Roadmap Phase 4, Modul Lager)
Objekt bleibt der Materialträger (Rucksack/Gerät/Fahrzeug, Karte 11) -
"Material verschieben" heißt: das Objekt bekommt einen neuen Standort, jede
Bewegung wird append-only protokolliert (Wer/Wann/Von/Nach/Grund, Nutzer-
Vorgabe Modul 5).
POST /objekte/{id}/lagerbewegungen setzt Standort + protokolliert in einem
Zug, GET /lagerbewegungen (Filter objekt_id/standort_id) für die Historie.
Rollen wie beim Mangel-Modul: Materialverantwortliche+Leitung+Admin dürfen
verschieben, alle Eingeloggten dürfen lesen.
Frontend: "Verschieben"-Aktion in ObjektSection, neuer Admin-Tab
"Lagerbewegungen" (reine Anzeige, analog HistorieSection).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KC8HYvv6UkCVYheYiTw9DD
This commit is contained in:
@@ -10,6 +10,7 @@ import { EskalationSection } from "./admin/EskalationSection";
|
||||
import { FachSection } from "./admin/FachSection";
|
||||
import { HistorieSection } from "./admin/HistorieSection";
|
||||
import { KategorieSection } from "./admin/KategorieSection";
|
||||
import { LagerbewegungSection } from "./admin/LagerbewegungSection";
|
||||
import { KontrollverantwortungSection } from "./admin/KontrollverantwortungSection";
|
||||
import { MaterialSection } from "./admin/MaterialSection";
|
||||
import { ObjektSection } from "./admin/ObjektSection";
|
||||
@@ -30,7 +31,8 @@ type Tab =
|
||||
| "eskalation"
|
||||
| "kontrollverantwortung"
|
||||
| "zustaendigkeit"
|
||||
| "personal";
|
||||
| "personal"
|
||||
| "lagerbewegungen";
|
||||
|
||||
// Deckt sich mit den require_roles()-Gates der jeweiligen Backend-Endpunkte
|
||||
// (Rollen-Vorgabe: Material-/Leitungsverantwortliche sahen bisher exakt
|
||||
@@ -56,6 +58,11 @@ const TABS: { key: Tab; label: string; rollen: ("administration" | "materialvera
|
||||
},
|
||||
{ key: "eskalation", label: "Eskalation", rollen: ["administration"] },
|
||||
{ key: "personal", label: "Personal", rollen: ["administration"] },
|
||||
{
|
||||
key: "lagerbewegungen",
|
||||
label: "Lagerbewegungen",
|
||||
rollen: ["administration", "materialverantwortlicher", "leitungsverantwortlicher"],
|
||||
},
|
||||
];
|
||||
|
||||
/**
|
||||
@@ -212,6 +219,9 @@ export function AdminPage() {
|
||||
<KontrollverantwortungSection objekte={objekte} benutzer={benutzer} onFehler={setFehler} />
|
||||
)}
|
||||
{aktiverTab === "historie" && <HistorieSection onFehler={setFehler} />}
|
||||
{aktiverTab === "lagerbewegungen" && (
|
||||
<LagerbewegungSection objekte={objekte} standorte={standorte} onFehler={setFehler} />
|
||||
)}
|
||||
{aktiverTab === "eskalation" && <EskalationSection onFehler={setFehler} />}
|
||||
{aktiverTab === "personal" && (
|
||||
<>
|
||||
|
||||
Reference in New Issue
Block a user