Spaces:
Sleeping
Sleeping
| import sqlite3 | |
| import pandas as pd | |
| from datetime import date, timedelta | |
| from src.database.queries import get_conn | |
| def search_properties( | |
| min_price: float = None, | |
| max_price: float = None, | |
| bhk: int = None, | |
| property_type: str = None, | |
| location: str = None, | |
| furnishing: str = None, | |
| min_area: int = None, | |
| parking: bool = None, | |
| ) -> list[dict]: | |
| conn = get_conn() | |
| query = "SELECT * FROM properties WHERE available = 'Yes'" | |
| params = [] | |
| if min_price is not None: | |
| query += " AND price_inr >= ?" | |
| params.append(min_price) | |
| if max_price is not None: | |
| query += " AND price_inr <= ?" | |
| params.append(max_price) | |
| if bhk is not None: | |
| query += " AND bhk = ?" | |
| params.append(bhk) | |
| if property_type: | |
| query += " AND LOWER(property_type) = ?" | |
| params.append(property_type.lower()) | |
| if location: | |
| query += " AND LOWER(location) LIKE ?" | |
| params.append(f"%{location.lower()}%") | |
| if furnishing: | |
| query += " AND LOWER(furnishing) = ?" | |
| params.append(furnishing.lower()) | |
| if min_area is not None: | |
| query += " AND area_sqft >= ?" | |
| params.append(min_area) | |
| if parking: | |
| query += " AND parking >= 1" | |
| query += " ORDER BY price_inr ASC LIMIT 10" | |
| df = pd.read_sql_query(query, conn, params=params) | |
| conn.close() | |
| return df.to_dict(orient="records") | |
| def get_leases_expiring(days: int = 30) -> list[dict]: | |
| conn = get_conn() | |
| today = date.today().isoformat() | |
| future = (date.today() + timedelta(days=days)).isoformat() | |
| query = """ | |
| SELECT p.property_id, p.title, p.bhk, p.location, p.price_inr, p.registration_no, | |
| l.lease_status, l.lease_end, l.monthly_rent, | |
| l.tenant_name, l.followup_person, l.followup_contact, l.notes | |
| FROM properties p | |
| JOIN leases l ON p.property_id = l.property_id | |
| WHERE l.lease_end BETWEEN ? AND ? | |
| ORDER BY l.lease_end ASC | |
| """ | |
| df = pd.read_sql_query(query, conn, params=[today, future]) | |
| conn.close() | |
| return df.to_dict(orient="records") | |
| def get_leases_vacant_or_pending() -> list[dict]: | |
| conn = get_conn() | |
| query = """ | |
| SELECT p.property_id, p.title, p.bhk, p.location, p.price_inr, p.registration_no, | |
| l.lease_status, l.lease_end, l.monthly_rent, | |
| l.tenant_name, l.followup_person, l.followup_contact, l.notes | |
| FROM properties p | |
| JOIN leases l ON p.property_id = l.property_id | |
| WHERE l.lease_status IN ('PENDING', 'EXPIRED') | |
| ORDER BY l.lease_end ASC | |
| """ | |
| df = pd.read_sql_query(query, conn) | |
| conn.close() | |
| return df.to_dict(orient="records") | |
| def get_all_properties() -> list[dict]: | |
| conn = get_conn() | |
| df = pd.read_sql_query("SELECT * FROM properties ORDER BY price_inr ASC", conn) | |
| conn.close() | |
| return df.to_dict(orient="records") | |