import uuid from datetime import date, datetime from decimal import Decimal from pydantic import BaseModel, ConfigDict from app.models.objekt import ObjektStatus from app.models.objektposition import ObjektpositionStatus class ObjektCreate(BaseModel): code: str name: str objekttyp_id: int vorlage_id: int standort_id: int fahrzeug_id: int | None = None class ObjektRead(BaseModel): model_config = ConfigDict(from_attributes=True) id: int code: str name: str objekttyp_id: int vorlage_id: int | None standort_id: int status: ObjektStatus fahrzeug_id: int | None letzte_kontrolle_am: datetime | None = None class ObjektUpdate(BaseModel): fahrzeug_id: int | None = None status: ObjektStatus | None = None class FahrzeugdetailsUpsert(BaseModel): kennzeichen: str | None = None funkrufname: str | None = None baujahr: int | None = None kilometerstand: int | None = None betriebsstunden: Decimal | None = None naechste_hu: date | None = None naechste_uvv: date | None = None class FahrzeugdetailsRead(BaseModel): model_config = ConfigDict(from_attributes=True) objekt_id: int kennzeichen: str | None funkrufname: str | None baujahr: int | None kilometerstand: int | None betriebsstunden: Decimal | None naechste_hu: date | None naechste_uvv: date | None class ObjektDuplizierenRequest(BaseModel): neuer_code: str neuer_name: str neuer_standort_id: int class ObjektpositionRead(BaseModel): model_config = ConfigDict(from_attributes=True) id: uuid.UUID objekt_id: int material_id: int sollmenge_override: Decimal | None sollmenge_effektiv: Decimal ist_status: ObjektpositionStatus istmenge: Decimal seriennummer: str | None ablaufdatum: date | None chargennummer: str | None code: str | None pruefintervall_monate: int | None class ObjektpositionUpdate(BaseModel): sollmenge_override: Decimal | None = None ist_status: ObjektpositionStatus | None = None istmenge: Decimal | None = None seriennummer: str | None = None ablaufdatum: date | None = None chargennummer: str | None = None code: str | None = None pruefintervall_monate: int | None = None class ObjektpositionCreate(BaseModel): """Prompt 10 Punkt 2: zusätzliches, nicht in der Vorlage enthaltenes Material. sollmenge_override ist hier Pflicht, da keine Vorlagenposition existiert, aus der sich die Sollmenge dynamisch ableiten ließe.""" material_id: int sollmenge_override: Decimal