fix(akte): Beladung zeigt bei Geräten mit SN falsche Ist-Menge
CI / backend-tests (push) Failing after 2m2s
CI / frontend-build (push) Successful in 18s

Objektposition.istmenge bleibt bei materialtyp='geraet_sn' auf 0 -
die tatsächliche Ist-Menge ergibt sich aus der Anzahl einsatzbereiter
geraet_instanz-Zeilen (Karte 14). Die neue Beladung-Karte in der Akte
zeigte den rohen istmenge-Wert, also immer 0 statt z.B. 1 Defibrillator
oder 2 Sauerstoffflaschen.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
This commit is contained in:
2026-09-06 23:31:18 +02:00
co-authored by Claude Sonnet 5
parent a12dfb305e
commit 300b30e0b1
2 changed files with 77 additions and 3 deletions
+14 -3
View File
@@ -4,12 +4,12 @@ from sqlalchemy.ext.asyncio import AsyncSession
from app.models.auth import Benutzer
from app.models.dokument import Dokument
from app.models.fahrzeugdetails import Fahrzeugdetails
from app.models.geraet_instanz import GeraetInstanz
from app.models.geraet_instanz import GeraetInstanz, GeraetStatus
from app.models.historie import Historie
from app.models.mangel import Mangel
from app.models.objekt import Objekt
from app.models.objektposition import Objektposition
from app.models.stammdaten import Material, Objekttyp, Standort
from app.models.stammdaten import Material, MaterialTyp, Objekttyp, Standort
from app.models.vorlage import Vorlagenposition
from app.models.zustaendigkeit import Kontrollverantwortung, Zustaendigkeit
from app.schemas.akte import AkteRead, BeladungsPosition, ZustaendigerBenutzer
@@ -98,6 +98,13 @@ async def akte_fuer_objekt(db: AsyncSession, objekt_id: int) -> AkteRead | None:
)
fach_by_material_id = {vp.material_id: vp.fach for vp in vorlagenpositionen_result.scalars().all()}
einsatzbereite_geraete_je_position: dict = {}
for geraet in geraete:
if geraet.status == GeraetStatus.einsatzbereit:
einsatzbereite_geraete_je_position[geraet.objektposition_id] = (
einsatzbereite_geraete_je_position.get(geraet.objektposition_id, 0) + 1
)
beladung_result = await db.execute(
select(Objektposition, Material)
.join(Material, Objektposition.material_id == Material.id)
@@ -111,7 +118,11 @@ async def akte_fuer_objekt(db: AsyncSession, objekt_id: int) -> AkteRead | None:
einheit=material.einheit,
fach=fach_by_material_id.get(material.id),
sollmenge=sollmenge_effektiv(position),
istmenge=position.istmenge,
istmenge=(
einsatzbereite_geraete_je_position.get(position.id, 0)
if material.materialtyp == MaterialTyp.geraet_sn
else position.istmenge
),
)
for position, material in beladung_result.all()
]