"use client"; import { useState } from "react"; import { Button } from "@/components/ui/button"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { Input } from "@/components/ui/input"; import type { InventoryItem, InventoryStockPayload } from "@/types/inventory"; export type StockAction = "adjust" | "reserve" | "release" | "consume"; type Props = { open: boolean; item: InventoryItem | null; action: StockAction; pending: boolean; serverError: string; onOpenChange: (open: boolean) => void; onSubmit: (payload: InventoryStockPayload) => void; }; const labels: Record = { adjust: { title: "Bestand anpassen", description: "Setzt den physischen Bestand auf den angegebenen Wert.", reason: "Inventurkorrektur", }, reserve: { title: "Bestand reservieren", description: "Reserviert verfügbaren Bestand für einen späteren Vorgang.", reason: "Reservierung", }, release: { title: "Reservierung aufheben", description: "Gibt reservierten Bestand wieder frei.", reason: "Reservierung aufgehoben", }, consume: { title: "Verbrauch buchen", description: "Bucht Bestand als verbraucht aus.", reason: "Verbrauch", }, }; export default function StockActionDialog({ open, item, action, pending, serverError, onOpenChange, onSubmit }: Props) { const [quantity, setQuantity] = useState(action === "adjust" ? item?.quantity_on_hand ?? 0 : 1); const [reason, setReason] = useState(labels[action].reason); const [note, setNote] = useState(""); const [clientError, setClientError] = useState(""); function submit() { if (quantity <= 0 && action !== "adjust") { setClientError("Bitte eine Menge größer 0 angeben."); return; } if (quantity < 0) { setClientError("Bitte keine negative Menge eingeben."); return; } if (!reason.trim()) { setClientError("Bitte einen Grund angeben."); return; } setClientError(""); onSubmit({ quantity, reason: reason.trim(), note: note.trim() || null, reference_type: null, reference_id: null, }); } return ( {labels[action].title} {item ? `${item.sku} · ${item.name}` : labels[action].description}

Bestand {item?.quantity_on_hand ?? 0} · Reserviert {item?.quantity_reserved ?? 0} · Verfügbar {item?.quantity_available ?? 0}