fix: preserve checked state when regenerating tripitems

This commit is contained in:
Felix Zett 2025-09-19 22:37:38 +02:00
parent 475dbe03c4
commit ece5a3cc85

View file

@ -85,20 +85,14 @@ def generate_trip_items(
selected_tag_ids: List[UUID_t],
marked_tag_ids: List[UUID_t],
) -> Tuple[List[UUID_t], List[UUID_t]]:
"""Regeneriert TripItems für einen Trip. Löscht alte, legt neue an.
Gibt (created_ids, deleted_checked_ids) zurück."""
# Sammle bestehende checked Items, falls sie verschwinden
deleted_checked: List[UUID_t] = []
# Lösche alle existierenden TripItems und merke checked, die wegfallen
# Map (item_id, tag_id) -> checked
previous_checked = {}
for ti in list(trip.trip_items):
if ti.checked:
deleted_checked.append(ti.id)
previous_checked[(ti.item_id, ti.tag_id)] = ti.checked
db.delete(ti)
db.flush()
items = items_for_trip(db, trip.user_id, trip, selected_tag_ids)
created_ids: List[UUID_t] = []
marked_set = set(marked_tag_ids)
@ -109,11 +103,12 @@ def generate_trip_items(
for tag_id in per_tags:
calc = render_name(it.name, trip.start_date, trip.end_date)
checked = previous_checked.get((it.id, tag_id), False)
ti = models.TripItem(
trip_id=trip.id,
item_id=it.id,
name_calculated=calc,
checked=False,
checked=checked,
tag_id=tag_id,
)
db.add(ti)
@ -121,4 +116,4 @@ def generate_trip_items(
created_ids.append(ti.id)
db.flush()
return created_ids, deleted_checked
return created_ids, []