From 3836729f928018bb1625c11d2fbe514c3d88c7de Mon Sep 17 00:00:00 2001 From: Khalim Conn-Kowlessar Date: Tue, 7 Jul 2026 11:32:53 +0000 Subject: [PATCH] =?UTF-8?q?No=20filters=20resolves=20the=20whole=20portfol?= =?UTF-8?q?io=20minus=20deletions=20=F0=9F=9F=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5 --- backend/app/modelling/property_filters.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/backend/app/modelling/property_filters.py b/backend/app/modelling/property_filters.py index 819ba3420..8c5a26e8f 100644 --- a/backend/app/modelling/property_filters.py +++ b/backend/app/modelling/property_filters.py @@ -10,7 +10,9 @@ from dataclasses import dataclass from typing import Optional from pydantic import BaseModel, ConfigDict -from sqlmodel import Session +from sqlmodel import Session, col, select + +from infrastructure.postgres.property_table import PropertyRow class PropertyGroupFilters(BaseModel): @@ -41,4 +43,16 @@ def resolve_filtered_property_ids( portfolio's rows with ``marked_for_deletion = false``; property_type / built_form resolve override → lodged EPC → predicted EPC → legacy columns → "Unknown".""" - raise NotImplementedError + rows = session.exec( + select(PropertyRow) + .where(PropertyRow.portfolio_id == portfolio_id) + # IS NOT TRUE rather than == False: the FE schema defaults the flag, + # but a NULL must never silently exclude a property. + .where(col(PropertyRow.marked_for_deletion).isnot(True)) + .order_by(col(PropertyRow.id)) + ).all() + return [ + FilteredProperty(property_id=row.id, postcode=row.postcode) + for row in rows + if row.id is not None + ]