Feat: expands project reservation system.

-Reservation list view
-expandable project cards
This commit is contained in:
2026-03-15 05:25:23 +00:00
parent e4d1f0d684
commit 0e3f512203
3 changed files with 71 additions and 48 deletions

View File

@@ -224,8 +224,9 @@ async def get_reservation(
unit_ids = [a.unit_id for a in assignments]
units = db.query(RosterUnit).filter(RosterUnit.id.in_(unit_ids)).all() if unit_ids else []
units_by_id = {u.id: u for u in units}
# Build power_type lookup from assignments
# Build power_type and notes lookup from assignments
power_type_map = {a.unit_id: a.power_type for a in assignments}
notes_map = {a.unit_id: a.notes for a in assignments}
return {
"id": reservation.id,
@@ -245,7 +246,8 @@ async def get_reservation(
"id": uid,
"last_calibrated": units_by_id[uid].last_calibrated.isoformat() if uid in units_by_id and units_by_id[uid].last_calibrated else None,
"deployed": units_by_id[uid].deployed if uid in units_by_id else False,
"power_type": power_type_map.get(uid)
"power_type": power_type_map.get(uid),
"notes": notes_map.get(uid)
}
for uid in unit_ids
]
@@ -343,6 +345,7 @@ async def assign_units_to_reservation(
unit_ids = data.get("unit_ids", [])
# Optional per-unit power types: {"BE17354": "ac", "BE9441": "solar"}
power_types = data.get("power_types", {})
location_notes = data.get("location_notes", {})
# Verify units exist (allow empty list to clear all assignments)
if unit_ids:
@@ -384,7 +387,8 @@ async def assign_units_to_reservation(
reservation_id=reservation_id,
unit_id=unit_id,
assignment_source="filled" if reservation.assignment_type == "quantity" else "specific",
power_type=power_types.get(unit_id)
power_type=power_types.get(unit_id),
notes=location_notes.get(unit_id)
)
db.add(assignment)
@@ -538,6 +542,7 @@ async def get_reservations_list(
{
"id": a.unit_id,
"power_type": a.power_type,
"notes": a.notes,
"deployed": units_by_id[a.unit_id].deployed if a.unit_id in units_by_id else False,
"last_calibrated": units_by_id[a.unit_id].last_calibrated if a.unit_id in units_by_id else None,
}