fix(akte): Beladung zeigt bei Geräten mit SN falsche Ist-Menge
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:
@@ -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()
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user