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
This commit is contained in:
@@ -12,7 +12,7 @@ from app.models.auth import KnotenTyp, RolleTyp, Systemknoten
|
||||
from app.models.fahrzeugdetails import Fahrzeugdetails
|
||||
from app.models.objekt import Objekt
|
||||
from app.models.objektposition import Objektposition
|
||||
from app.models.stammdaten import Material, Objekttyp
|
||||
from app.models.stammdaten import Material, Nummernschema, Objekttyp
|
||||
from app.models.vorlage import Beladungsvorlage
|
||||
from app.services import historie as historie_service
|
||||
from app.services.label import generiere_code128_label_pdf, generiere_qr_label_pdf
|
||||
@@ -105,11 +105,32 @@ async def hole_objekt_per_code(
|
||||
|
||||
@router.get("/objekte/naechster-code")
|
||||
async def naechster_objekt_code(
|
||||
praefix: str, db: AsyncSession = Depends(get_db), _=Depends(get_current_user)
|
||||
praefix: str | None = None,
|
||||
objekttyp_id: int | None = None,
|
||||
db: AsyncSession = Depends(get_db),
|
||||
_=Depends(get_current_user),
|
||||
) -> dict[str, str]:
|
||||
"""Code-Vorschlag beim Anlegen/Duplizieren (Konzept-Ergänzung Karte 10/Prompt 09).
|
||||
Vorschlag ist überschreibbar, Eindeutigkeit erzwingt weiterhin objekt.code UNIQUE."""
|
||||
return {"code": await naechster_freier_code(db, Objekt.code, praefix)}
|
||||
Vorschlag ist überschreibbar, Eindeutigkeit erzwingt weiterhin objekt.code UNIQUE.
|
||||
|
||||
IDENT-003: `objekttyp_id` statt `praefix` nutzt das konfigurierte
|
||||
Nummernschema (Präfix + Mindest-Stellenzahl) - kein manuelles Eintippen/
|
||||
Merken des richtigen Präfix je Objekttyp mehr nötig. `praefix` bleibt für
|
||||
Objekttypen ohne konfiguriertes Schema nutzbar (Rückwärtskompatibilität)."""
|
||||
stellenzahl = 5
|
||||
if objekttyp_id is not None:
|
||||
result = await db.execute(select(Nummernschema).where(Nummernschema.objekttyp_id == objekttyp_id))
|
||||
schema = result.scalar_one_or_none()
|
||||
if schema is None:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_404_NOT_FOUND,
|
||||
detail="Kein Nummernschema für diesen Objekttyp konfiguriert - Präfix manuell angeben",
|
||||
)
|
||||
praefix = schema.praefix
|
||||
stellenzahl = schema.stellenzahl
|
||||
if not praefix:
|
||||
raise HTTPException(status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, detail="Präfix oder Objekttyp angeben")
|
||||
return {"code": await naechster_freier_code(db, Objekt.code, praefix, stellenzahl)}
|
||||
|
||||
|
||||
@router.get("/objektpositionen/naechster-code")
|
||||
|
||||
Reference in New Issue
Block a user