feat(wartung): MAINT-005 Ersatzteile/Kosten je Wartungsauftrag
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
This commit is contained in:
@@ -10,6 +10,7 @@ from app.models.wartung import (
|
||||
IntervallTyp,
|
||||
Wartungsauftrag,
|
||||
WartungsauftragStatus,
|
||||
WartungsauftragTeil,
|
||||
Wartungsintervall,
|
||||
Wartungsplan,
|
||||
WartungsplanPosition,
|
||||
@@ -135,6 +136,27 @@ async def liste_wartungsauftraege(
|
||||
return list(result.scalars().all())
|
||||
|
||||
|
||||
async def erstelle_wartungsauftrag_teil(
|
||||
db: AsyncSession, *, auftrag_id, bezeichnung: str, menge: Decimal, kosten: Decimal
|
||||
) -> WartungsauftragTeil:
|
||||
teil = WartungsauftragTeil(auftrag_id=auftrag_id, bezeichnung=bezeichnung, menge=menge, kosten=kosten)
|
||||
db.add(teil)
|
||||
await db.flush()
|
||||
return teil
|
||||
|
||||
|
||||
async def liste_wartungsauftrag_teile(db: AsyncSession, *, auftrag_id) -> list[WartungsauftragTeil]:
|
||||
result = await db.execute(
|
||||
select(WartungsauftragTeil).where(WartungsauftragTeil.auftrag_id == auftrag_id)
|
||||
)
|
||||
return list(result.scalars().all())
|
||||
|
||||
|
||||
async def entferne_wartungsauftrag_teil(db: AsyncSession, *, teil: WartungsauftragTeil) -> None:
|
||||
await db.delete(teil)
|
||||
await db.flush()
|
||||
|
||||
|
||||
async def faellige_wartungen_fuer_objekt(db: AsyncSession, objekt: Objekt) -> list[dict]:
|
||||
"""MAINT-002: kombiniert Zeit-/km-/Betriebsstunden-Intervalle je Position -
|
||||
fällig, sobald das erste Kriterium erreicht ist. Nie durchgeführt gilt
|
||||
|
||||
Reference in New Issue
Block a user