Files
MABEA/backend/app/schemas/stammdaten.py
T
patrickandClaude Sonnet 5 3b5cf8feab
CI / backend-tests (push) Successful in 2m24s
CI / frontend-build (push) Successful in 27s
feat(identity): IDENT-003 konfigurierbare Nummernschemata je Objekttyp
Neue Stammdaten-Tabelle nummernschema (Migration 0032): Präfix + Stellenzahl
einmal je Objekttyp festlegen statt bei jeder Objekt-Anlage manuell
einzutippen (Fehlerquelle - Tippfehler, uneinheitliche Schreibweise,
falsches Präfix für den Typ). GET /objekte/naechster-code akzeptiert jetzt
objekttyp_id als Alternative zu praefix; ohne konfiguriertes Schema bleibt
der bisherige manuelle Präfix-Weg nutzbar (Rückwärtskompatibilität).

Admin-UI: Nummernschema-Pflege direkt in der Objekttyp-Verwaltung
(ObjekttypSection). ObjektAnlegenFormular versucht zuerst das Schema des
gewählten Objekttyps, fällt bei 404 auf manuelles Präfix zurück.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-08 20:23:14 +02:00

171 lines
3.4 KiB
Python

from pydantic import BaseModel, ConfigDict
from app.models.stammdaten import MaterialTyp
class BereichCreate(BaseModel):
name: str
beschreibung: str | None = None
class BereichRead(BereichCreate):
model_config = ConfigDict(from_attributes=True)
id: int
class BereichUpdate(BaseModel):
name: str | None = None
beschreibung: str | None = None
class KategorieCreate(BaseModel):
bereich_id: int
name: str
ueberkategorie_id: int | None = None
class KategorieRead(KategorieCreate):
model_config = ConfigDict(from_attributes=True)
id: int
class KategorieUpdate(BaseModel):
bereich_id: int | None = None
name: str | None = None
ueberkategorie_id: int | None = None
class HerstellerCreate(BaseModel):
name: str
class HerstellerRead(HerstellerCreate):
model_config = ConfigDict(from_attributes=True)
id: int
class ModellCreate(BaseModel):
hersteller_id: int
name: str
class ModellRead(ModellCreate):
model_config = ConfigDict(from_attributes=True)
id: int
class NummernschemaCreate(BaseModel):
objekttyp_id: int
praefix: str
stellenzahl: int = 5
class NummernschemaRead(NummernschemaCreate):
model_config = ConfigDict(from_attributes=True)
id: int
class NummernschemaUpdate(BaseModel):
praefix: str | None = None
stellenzahl: int | None = None
class StandortCreate(BaseModel):
name: str
adresse: str | None = None
class StandortRead(StandortCreate):
model_config = ConfigDict(from_attributes=True)
id: int
class StandortUpdate(BaseModel):
name: str | None = None
adresse: str | None = None
class ObjekttypCreate(BaseModel):
bereich_id: int
kategorie_id: int | None = None
name: str
ist_zugfahrzeug: bool = False
class ObjekttypRead(ObjekttypCreate):
model_config = ConfigDict(from_attributes=True)
id: int
class ObjekttypUpdate(BaseModel):
bereich_id: int | None = None
kategorie_id: int | None = None
name: str | None = None
ist_zugfahrzeug: bool | None = None
class FachCreate(BaseModel):
objekttyp_id: int
name: str
sortierung: int = 0
class FachRead(FachCreate):
model_config = ConfigDict(from_attributes=True)
id: int
class FachUpdate(BaseModel):
name: str | None = None
sortierung: int | None = None
class FachErsetzen(BaseModel):
neuer_name: str
class FachVerwendungObjekt(BaseModel):
id: int
name: str
code: str
class MaterialCreate(BaseModel):
name: str
artikelnummer: str | None = None
einheit: str
materialtyp: MaterialTyp
kategorie_id: int | None = None
hersteller: str | None = None
beschreibung: str | None = None
code: str | None = None
warnzeitraum_tage: int | None = None
aktiv: bool = True
class MaterialUpdate(BaseModel):
name: str | None = None
artikelnummer: str | None = None
einheit: str | None = None
materialtyp: MaterialTyp | None = None
kategorie_id: int | None = None
hersteller: str | None = None
beschreibung: str | None = None
code: str | None = None
warnzeitraum_tage: int | None = None
aktiv: bool | None = None
class MaterialRead(MaterialCreate):
model_config = ConfigDict(from_attributes=True)
id: int
class MaterialZusammenfuehren(BaseModel):
ziel_material_id: int
class MaterialZusammenfuehrenErgebnis(BaseModel):
erfolgreich: bool
konflikte: list[str]