Frontend: Code-Vorschlag beim Objekt-Anlegen/Duplizieren einbinden
Präfix-Feld + "Code vorschlagen"-Button ruft GET /objekte/naechster-code und füllt das Code-Feld vor, bleibt überschreibbar. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
This commit is contained in:
@@ -2542,3 +2542,39 @@ Keine Commits in dieser Session.
|
||||
- frontend/src/pages/admin/VorlageSection.tsx | 26 +++---
|
||||
|
||||
---
|
||||
## 2026-09-04 17:35 – 17:35 (0m)
|
||||
**Beschreibung:** Claude Code Session
|
||||
**Projekt:** asb-material
|
||||
|
||||
### Commits
|
||||
- 69e7d0c Karte 10: Geräte-Code für Objektpositionen (Code128-Vorbereitung) + Code-Vorschlag
|
||||
|
||||
### Geänderte Dateien
|
||||
- DEVLOG.md | 147 +++++++++++++++++++++
|
||||
- backend/DEVLOG.md | 78 +++++++++++
|
||||
- .../versions/0005_add_objektposition_code.py | 32 +++++
|
||||
- backend/app/api/v1/endpoints/objekte.py | 58 +++++++-
|
||||
- backend/app/models/objektposition.py | 4 +
|
||||
- backend/app/schemas/objekt.py | 2 +
|
||||
- backend/app/services/objekte.py | 21 +++
|
||||
- backend/tests/test_objekte.py | 83 ++++++++++++
|
||||
|
||||
---
|
||||
## 2026-09-04 17:35 – 17:35 (0m)
|
||||
**Beschreibung:** Claude Code Session
|
||||
**Projekt:** asb-material
|
||||
|
||||
### Commits
|
||||
Keine Commits in dieser Session.
|
||||
|
||||
### Geänderte Dateien
|
||||
- DEVLOG.md | 147 +++++++++++++++++++++
|
||||
- backend/DEVLOG.md | 78 +++++++++++
|
||||
- .../versions/0005_add_objektposition_code.py | 32 +++++
|
||||
- backend/app/api/v1/endpoints/objekte.py | 58 +++++++-
|
||||
- backend/app/models/objektposition.py | 4 +
|
||||
- backend/app/schemas/objekt.py | 2 +
|
||||
- backend/app/services/objekte.py | 21 +++
|
||||
- backend/tests/test_objekte.py | 83 ++++++++++++
|
||||
|
||||
---
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
# frontend – Dev Log
|
||||
|
||||
## 2026-09-04 17:35 – 17:36 (0m)
|
||||
**Beschreibung:** Claude Code Session
|
||||
**Projekt:** asb-material
|
||||
|
||||
### Commits
|
||||
Keine Commits in dieser Session.
|
||||
|
||||
### Geänderte Dateien
|
||||
- DEVLOG.md | 147 +++++++++++++++++++++
|
||||
- backend/DEVLOG.md | 78 +++++++++++
|
||||
- .../versions/0005_add_objektposition_code.py | 32 +++++
|
||||
- backend/app/api/v1/endpoints/objekte.py | 58 +++++++-
|
||||
- backend/app/models/objektposition.py | 4 +
|
||||
- backend/app/schemas/objekt.py | 2 +
|
||||
- backend/app/services/objekte.py | 21 +++
|
||||
- backend/tests/test_objekte.py | 83 ++++++++++++
|
||||
|
||||
---
|
||||
@@ -14,6 +14,7 @@ interface Props {
|
||||
}
|
||||
|
||||
export function ObjektSection({ objekte, vorlagen, standorte, materialien, onGeaendert, onFehler }: Props) {
|
||||
const [praefix, setPraefix] = useState("");
|
||||
const [code, setCode] = useState("");
|
||||
const [name, setName] = useState("");
|
||||
const [vorlageId, setVorlageId] = useState<number | "">("");
|
||||
@@ -21,10 +22,41 @@ export function ObjektSection({ objekte, vorlagen, standorte, materialien, onGea
|
||||
const [wirdAngelegt, setWirdAngelegt] = useState(false);
|
||||
const [ausgeklapptId, setAusgeklapptId] = useState<number | null>(null);
|
||||
const [duplizierId, setDuplizierId] = useState<number | null>(null);
|
||||
const [neuerPraefix, setNeuerPraefix] = useState("");
|
||||
const [neuerCode, setNeuerCode] = useState("");
|
||||
const [neuerName, setNeuerName] = useState("");
|
||||
const [neuerStandortId, setNeuerStandortId] = useState<number | "">("");
|
||||
|
||||
async function codeVorschlagen() {
|
||||
if (!praefix) {
|
||||
onFehler("Präfix eingeben (z. B. RK, FZ).");
|
||||
return;
|
||||
}
|
||||
try {
|
||||
const antwort = await apiRequest<{ code: string }>(
|
||||
`/objekte/naechster-code?praefix=${encodeURIComponent(praefix.toUpperCase())}`
|
||||
);
|
||||
setCode(antwort.code);
|
||||
} catch {
|
||||
onFehler("Code-Vorschlag fehlgeschlagen.");
|
||||
}
|
||||
}
|
||||
|
||||
async function neuerCodeVorschlagen() {
|
||||
if (!neuerPraefix) {
|
||||
onFehler("Präfix eingeben (z. B. RK, FZ).");
|
||||
return;
|
||||
}
|
||||
try {
|
||||
const antwort = await apiRequest<{ code: string }>(
|
||||
`/objekte/naechster-code?praefix=${encodeURIComponent(neuerPraefix.toUpperCase())}`
|
||||
);
|
||||
setNeuerCode(antwort.code);
|
||||
} catch {
|
||||
onFehler("Code-Vorschlag fehlgeschlagen.");
|
||||
}
|
||||
}
|
||||
|
||||
async function anlegen() {
|
||||
if (vorlageId === "" || standortId === "") {
|
||||
onFehler("Vorlage und Standort auswählen.");
|
||||
@@ -43,6 +75,7 @@ export function ObjektSection({ objekte, vorlagen, standorte, materialien, onGea
|
||||
standort_id: standortId,
|
||||
},
|
||||
});
|
||||
setPraefix("");
|
||||
setCode("");
|
||||
setName("");
|
||||
await onGeaendert();
|
||||
@@ -55,6 +88,7 @@ export function ObjektSection({ objekte, vorlagen, standorte, materialien, onGea
|
||||
|
||||
function duplizierenStarten(o: Objekt) {
|
||||
setDuplizierId(duplizierId === o.id ? null : o.id);
|
||||
setNeuerPraefix("");
|
||||
setNeuerCode("");
|
||||
setNeuerName(`${o.name} (Kopie)`);
|
||||
setNeuerStandortId(o.standort_id);
|
||||
@@ -115,8 +149,20 @@ export function ObjektSection({ objekte, vorlagen, standorte, materialien, onGea
|
||||
</div>
|
||||
<div className="field">
|
||||
<label>Code (eindeutig)</label>
|
||||
<div className="row" style={{ flexWrap: "wrap" }}>
|
||||
<input
|
||||
className="input"
|
||||
style={{ maxWidth: "6rem" }}
|
||||
value={praefix}
|
||||
onChange={(e) => setPraefix(e.target.value)}
|
||||
placeholder="Präfix (RK, FZ…)"
|
||||
/>
|
||||
<button type="button" className="btn btn-secondary" onClick={codeVorschlagen}>
|
||||
Code vorschlagen
|
||||
</button>
|
||||
<input className="input" value={code} onChange={(e) => setCode(e.target.value)} />
|
||||
</div>
|
||||
</div>
|
||||
<div className="field">
|
||||
<label>Name</label>
|
||||
<input className="input" value={name} onChange={(e) => setName(e.target.value)} />
|
||||
@@ -154,6 +200,16 @@ export function ObjektSection({ objekte, vorlagen, standorte, materialien, onGea
|
||||
)}
|
||||
{duplizierId === o.id && (
|
||||
<div className="row" style={{ marginTop: "0.5rem", flexWrap: "wrap" }}>
|
||||
<input
|
||||
className="input"
|
||||
style={{ maxWidth: "6rem" }}
|
||||
value={neuerPraefix}
|
||||
onChange={(e) => setNeuerPraefix(e.target.value)}
|
||||
placeholder="Präfix (RK, FZ…)"
|
||||
/>
|
||||
<button type="button" className="btn btn-secondary" onClick={neuerCodeVorschlagen}>
|
||||
Code vorschlagen
|
||||
</button>
|
||||
<input
|
||||
className="input"
|
||||
value={neuerCode}
|
||||
|
||||
Reference in New Issue
Block a user