wohnungen: drive list info from LLM JSON, tidy header

- Each row's info line now uses the enrichment JSON (rooms, size_sqm,
  rent_total/rent_cold, wbs_required/wbs_type). When enrichment is still
  running we show "Infos werden abgerufen…", on failure "Fehler beim
  Abrufen der Infos"; the scraper fields are no longer rendered in the list
- Move the admin backfill button to the header row as a compact
  "Anreichern (N)" that only appears when there's pending/failed work,
  so it's findable right next to "X gefunden"
- Countdown wobble: new .countdown class forces tabular-nums + 4.2em
  min-width, so neighbours stop shifting every second
- Dot spacing: pull "·" out into its own .sep span so flex gap applies
  on both sides symmetrically

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
EiSiMo 2026-04-21 14:57:11 +02:00
parent eb66284172
commit e0ac869425
4 changed files with 65 additions and 19 deletions

View file

@ -403,9 +403,16 @@ def _wohnungen_context(user) -> dict:
}, filters):
continue
last = db.last_application_for_flat(uid, f["id"])
flats_view.append({"row": f, "last": last})
enrichment_data = None
if f["enrichment_json"]:
try:
enrichment_data = json.loads(f["enrichment_json"])
except Exception:
enrichment_data = None
flats_view.append({"row": f, "last": last, "enrichment": enrichment_data})
rejected_view = db.rejected_flats(uid)
enrichment_counts = db.enrichment_counts()
allowed, reason = _manual_apply_allowed()
alert_label, alert_chip = _alert_status(notif_row)
@ -441,6 +448,7 @@ def _wohnungen_context(user) -> dict:
return {
"flats": flats_view,
"rejected_flats": rejected_view,
"enrichment_counts": enrichment_counts,
"map_points": map_points,
"has_filters": _has_filters(filters_row),
"alert_label": alert_label,