From 10b9015bce09ae297785f79fba186c94be43fc24 Mon Sep 17 00:00:00 2001 From: Khalim Conn-Kowlessar Date: Tue, 7 Jul 2026 11:34:07 +0000 Subject: [PATCH] =?UTF-8?q?Postcode=20filter=20matches=20the=20canonical?= =?UTF-8?q?=20postcode=20exactly=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 | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/backend/app/modelling/property_filters.py b/backend/app/modelling/property_filters.py index 8c5a26e8f..4f45c6325 100644 --- a/backend/app/modelling/property_filters.py +++ b/backend/app/modelling/property_filters.py @@ -43,14 +43,17 @@ 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".""" - rows = session.exec( + statement = ( 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() + ) + if filters.postcodes is not None: + statement = statement.where(col(PropertyRow.postcode).in_(filters.postcodes)) + rows = session.exec(statement).all() return [ FilteredProperty(property_id=row.id, postcode=row.postcode) for row in rows