Neue Tabelle wartungsauftrag_teil (Migration 0033), CRUD-Endpunkte
/wartungsauftraege/{id}/teile, UI-Panel in WartungSection.tsx mit
Summenanzeige. Backlog Epic 22 (UI-Redesign Runde 2, Kacheln UI2-001..005)
als geplant ergänzt, Umsetzung folgt separat.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
117 lines
2.9 KiB
Python
117 lines
2.9 KiB
Python
import uuid
|
|
from datetime import date, datetime
|
|
from decimal import Decimal
|
|
|
|
from pydantic import BaseModel, ConfigDict
|
|
|
|
from app.models.wartung import IntervallTyp, WartungsauftragStatus
|
|
|
|
|
|
class WartungsintervallCreate(BaseModel):
|
|
typ: IntervallTyp
|
|
wert: int
|
|
|
|
|
|
class WartungsintervallRead(BaseModel):
|
|
model_config = ConfigDict(from_attributes=True)
|
|
id: int
|
|
wartungsplan_position_id: int
|
|
typ: IntervallTyp
|
|
wert: int
|
|
|
|
|
|
class WartungsplanPositionCreate(BaseModel):
|
|
wartungsart: str
|
|
beschreibung: str | None = None
|
|
intervalle: list[WartungsintervallCreate] = []
|
|
|
|
|
|
class WartungsplanPositionRead(BaseModel):
|
|
model_config = ConfigDict(from_attributes=True)
|
|
id: int
|
|
wartungsplan_id: int
|
|
wartungsart: str
|
|
beschreibung: str | None
|
|
intervalle: list[WartungsintervallRead] = []
|
|
|
|
|
|
class WartungsplanCreate(BaseModel):
|
|
objekttyp_id: int
|
|
name: str
|
|
positionen: list[WartungsplanPositionCreate] = []
|
|
|
|
|
|
class WartungsplanRead(BaseModel):
|
|
model_config = ConfigDict(from_attributes=True)
|
|
id: int
|
|
objekttyp_id: int
|
|
name: str
|
|
positionen: list[WartungsplanPositionRead] = []
|
|
|
|
|
|
class WartungsauftragCreate(BaseModel):
|
|
objekt_id: int
|
|
geraet_instanz_id: uuid.UUID | None = None
|
|
wartungsplan_position_id: int | None = None
|
|
wartungsart: str
|
|
beschreibung: str | None = None
|
|
werkstatt_intern: bool = True
|
|
werkstatt_name: str | None = None
|
|
faelligkeit_am: date | None = None
|
|
|
|
|
|
class WartungsauftragErledigen(BaseModel):
|
|
erledigt_am: date | None = None
|
|
kosten: Decimal | None = None
|
|
kilometerstand_bei_erledigung: int | None = None
|
|
betriebsstunden_bei_erledigung: Decimal | None = None
|
|
|
|
|
|
class WartungsauftragStatusUpdate(BaseModel):
|
|
status: WartungsauftragStatus
|
|
|
|
|
|
class WartungsauftragRead(BaseModel):
|
|
model_config = ConfigDict(from_attributes=True)
|
|
id: uuid.UUID
|
|
objekt_id: int
|
|
geraet_instanz_id: uuid.UUID | None
|
|
wartungsplan_position_id: int | None
|
|
wartungsart: str
|
|
beschreibung: str | None
|
|
status: WartungsauftragStatus
|
|
werkstatt_intern: bool
|
|
werkstatt_name: str | None
|
|
faelligkeit_am: date | None
|
|
erstellt_am: datetime
|
|
erledigt_am: datetime | None
|
|
durchgefuehrt_von: int | None
|
|
kosten: Decimal | None
|
|
kilometerstand_bei_erledigung: int | None
|
|
betriebsstunden_bei_erledigung: Decimal | None
|
|
|
|
|
|
class WartungsauftragTeilCreate(BaseModel):
|
|
bezeichnung: str
|
|
menge: Decimal = Decimal(1)
|
|
kosten: Decimal
|
|
|
|
|
|
class WartungsauftragTeilRead(BaseModel):
|
|
model_config = ConfigDict(from_attributes=True)
|
|
id: uuid.UUID
|
|
auftrag_id: uuid.UUID
|
|
bezeichnung: str
|
|
menge: Decimal
|
|
kosten: Decimal
|
|
|
|
|
|
class FaelligeWartungRead(BaseModel):
|
|
wartungsplan_position_id: int
|
|
wartungsart: str
|
|
objekt_id: int
|
|
faellig: bool
|
|
faellig_am: date | None
|
|
faellig_bei_km: int | None
|
|
faellig_bei_betriebsstunden: Decimal | None
|