From 278eb7c5d47b15350e979c0b25856b15cf845b53 Mon Sep 17 00:00:00 2001
From: HotSwapp <47397945+HotSwapp@users.noreply.github.com>
Date: Mon, 11 Aug 2025 11:26:16 -0500
Subject: [PATCH] fixed search
---
app/api/search.py | 84 +++++++++++++++++++-------------------
static/js/fetch-wrapper.js | 10 +++++
templates/base.html | 2 +
3 files changed, 53 insertions(+), 43 deletions(-)
diff --git a/app/api/search.py b/app/api/search.py
index c571ebc..2ba372b 100644
--- a/app/api/search.py
+++ b/app/api/search.py
@@ -314,7 +314,7 @@ async def get_search_facets(
).all()
# States
- states = db.query(State.abrev, State.name).filter(
+ states = db.query(State.abbreviation, State.name).filter(
State.active == True
).order_by(State.name).all()
@@ -381,7 +381,7 @@ async def search_files(
async def _search_customers(criteria: AdvancedSearchCriteria, db: Session) -> List[SearchResult]:
"""Search customers with advanced criteria"""
- query = db.query(Rolodex).options(joinedload(Rolodex.phones))
+ query = db.query(Rolodex).options(joinedload(Rolodex.phone_numbers))
if criteria.query:
search_conditions = []
@@ -392,8 +392,7 @@ async def _search_customers(criteria: AdvancedSearchCriteria, db: Session) -> Li
search_conditions.append(
or_(
func.concat(Rolodex.first, ' ', Rolodex.last).contains(search_term),
- Rolodex.memo1.contains(search_term),
- Rolodex.memo2.contains(search_term)
+ Rolodex.memo.contains(search_term)
)
)
else:
@@ -408,8 +407,7 @@ async def _search_customers(criteria: AdvancedSearchCriteria, db: Session) -> Li
Rolodex.first.contains(term),
Rolodex.city.contains(term),
Rolodex.email.contains(term),
- Rolodex.memo1.contains(term),
- Rolodex.memo2.contains(term)
+ Rolodex.memo.contains(term)
)
)
else:
@@ -420,8 +418,7 @@ async def _search_customers(criteria: AdvancedSearchCriteria, db: Session) -> Li
Rolodex.first.ilike(f"%{term}%"),
Rolodex.city.ilike(f"%{term}%"),
Rolodex.email.ilike(f"%{term}%"),
- Rolodex.memo1.ilike(f"%{term}%"),
- Rolodex.memo2.ilike(f"%{term}%")
+ Rolodex.memo.ilike(f"%{term}%")
)
)
@@ -460,7 +457,7 @@ async def _search_customers(criteria: AdvancedSearchCriteria, db: Session) -> Li
highlight = _create_customer_highlight(customer, criteria.query or "")
# Get phone numbers
- phone_numbers = [p.phone for p in customer.phones] if customer.phones else []
+ phone_numbers = [p.phone for p in customer.phone_numbers] if customer.phone_numbers else []
results.append(SearchResult(
type="customer",
@@ -499,8 +496,7 @@ async def _search_files(criteria: AdvancedSearchCriteria, db: Session) -> List[S
File.id.contains(term),
File.regarding.contains(term),
File.file_type.contains(term),
- File.memo1.contains(term),
- File.memo2.contains(term)
+ File.memo.contains(term)
)
)
else:
@@ -510,8 +506,7 @@ async def _search_files(criteria: AdvancedSearchCriteria, db: Session) -> List[S
File.id.ilike(f"%{term}%"),
File.regarding.ilike(f"%{term}%"),
File.file_type.ilike(f"%{term}%"),
- File.memo1.ilike(f"%{term}%"),
- File.memo2.ilike(f"%{term}%")
+ File.memo.ilike(f"%{term}%")
)
)
@@ -702,10 +697,10 @@ async def _search_qdros(criteria: AdvancedSearchCriteria, db: Session) -> List[S
search_conditions.append(
or_(
QDRO.file_no.contains(term),
- QDRO.title.contains(term),
- QDRO.participant_name.contains(term),
- QDRO.spouse_name.contains(term),
- QDRO.plan_name.contains(term),
+ QDRO.form_name.contains(term),
+ QDRO.pet.contains(term),
+ QDRO.res.contains(term),
+ QDRO.case_number.contains(term),
QDRO.notes.contains(term)
)
)
@@ -713,10 +708,10 @@ async def _search_qdros(criteria: AdvancedSearchCriteria, db: Session) -> List[S
search_conditions.append(
or_(
QDRO.file_no.ilike(f"%{term}%"),
- QDRO.title.ilike(f"%{term}%"),
- QDRO.participant_name.ilike(f"%{term}%"),
- QDRO.spouse_name.ilike(f"%{term}%"),
- QDRO.plan_name.ilike(f"%{term}%"),
+ QDRO.form_name.ilike(f"%{term}%"),
+ QDRO.pet.ilike(f"%{term}%"),
+ QDRO.res.ilike(f"%{term}%"),
+ QDRO.case_number.ilike(f"%{term}%"),
QDRO.notes.ilike(f"%{term}%")
)
)
@@ -734,16 +729,16 @@ async def _search_qdros(criteria: AdvancedSearchCriteria, db: Session) -> List[S
results.append(SearchResult(
type="qdro",
id=qdro.id,
- title=qdro.title or f"QDRO v{qdro.version}",
- description=f"File: {qdro.file_no} | Status: {qdro.status} | Participant: {qdro.participant_name or 'N/A'}",
+ title=qdro.form_name or f"QDRO v{qdro.version}",
+ description=f"File: {qdro.file_no} | Status: {qdro.status} | Case: {qdro.case_number or 'N/A'}",
url=f"/documents?qdro_id={qdro.id}",
metadata={
"file_no": qdro.file_no,
"version": qdro.version,
"status": qdro.status,
- "participant": qdro.participant_name,
- "spouse": qdro.spouse_name,
- "plan": qdro.plan_name
+ "petitioner": qdro.pet,
+ "respondent": qdro.res,
+ "case_number": qdro.case_number
},
relevance_score=relevance,
highlight=highlight,
@@ -818,7 +813,7 @@ async def _search_templates(criteria: AdvancedSearchCriteria, db: Session) -> Li
async def _search_phones(criteria: AdvancedSearchCriteria, db: Session) -> List[SearchResult]:
"""Search phone numbers"""
- query = db.query(Phone).options(joinedload(Phone.person))
+ query = db.query(Phone).options(joinedload(Phone.rolodex_entry))
if criteria.query:
# Clean phone number for search (remove non-digits)
@@ -837,17 +832,17 @@ async def _search_phones(criteria: AdvancedSearchCriteria, db: Session) -> List[
results = []
for phone in phones:
owner_name = ""
- if phone.person:
- owner_name = f"{phone.person.first or ''} {phone.person.last}".strip()
+ if phone.rolodex_entry:
+ owner_name = f"{phone.rolodex_entry.first or ''} {phone.rolodex_entry.last}".strip()
results.append(SearchResult(
type="phone",
id=f"{phone.id}_{phone.phone}",
title=phone.phone,
description=f"Owner: {owner_name} | Location: {phone.location or 'Unknown'}",
- url=f"/customers?id={phone.id}",
+ url=f"/customers?id={phone.rolodex_id}",
metadata={
- "owner_id": phone.id,
+ "owner_id": phone.rolodex_id,
"owner_name": owner_name,
"location": phone.location
},
@@ -1019,21 +1014,21 @@ def _calculate_qdro_relevance(qdro: QDRO, query: str) -> float:
score = 0.0
query_lower = query.lower()
- # Title exact match
- if qdro.title and query_lower == qdro.title.lower():
+ # Form name exact match
+ if qdro.form_name and query_lower == qdro.form_name.lower():
score += 10.0
- elif qdro.title and query_lower in qdro.title.lower():
+ elif qdro.form_name and query_lower in qdro.form_name.lower():
score += 5.0
- # Participant names
- if qdro.participant_name and query_lower in qdro.participant_name.lower():
+ # Party names
+ if qdro.pet and query_lower in qdro.pet.lower():
score += 6.0
- if qdro.spouse_name and query_lower in qdro.spouse_name.lower():
+ if qdro.res and query_lower in qdro.res.lower():
score += 6.0
- # Plan name
- if qdro.plan_name and query_lower in qdro.plan_name.lower():
+ # Case number
+ if qdro.case_number and query_lower in qdro.case_number.lower():
score += 4.0
return max(score, 0.1)
@@ -1111,10 +1106,13 @@ def _create_qdro_highlight(qdro: QDRO, query: str) -> str:
if not query:
return ""
- if qdro.title and query.lower() in qdro.title.lower():
- return f"Title: {qdro.title}"
+ if qdro.form_name and query.lower() in qdro.form_name.lower():
+ return f"Form: {qdro.form_name}"
- if qdro.participant_name and query.lower() in qdro.participant_name.lower():
- return f"Participant: {qdro.participant_name}"
+ if qdro.pet and query.lower() in qdro.pet.lower():
+ return f"Petitioner: {qdro.pet}"
+
+ if qdro.case_number and query.lower() in qdro.case_number.lower():
+ return f"Case: {qdro.case_number}"
return ""
\ No newline at end of file
diff --git a/static/js/fetch-wrapper.js b/static/js/fetch-wrapper.js
index c2d4d36..94346c0 100644
--- a/static/js/fetch-wrapper.js
+++ b/static/js/fetch-wrapper.js
@@ -42,6 +42,16 @@
headers.set(CORRELATION_HEADER, outgoingCid);
}
+ // Inject Authorization header if JWT token is available and not already provided
+ try {
+ const storedToken = (window.app && window.app.token) || (typeof localStorage !== 'undefined' && localStorage.getItem('auth_token'));
+ if (storedToken && !headers.has('Authorization')) {
+ headers.set('Authorization', `Bearer ${storedToken}`);
+ }
+ } catch (_) {
+ // Ignore storage access errors (e.g., privacy mode)
+ }
+
const requestInit = { ...options, headers };
const response = await originalFetch(resource, requestInit);
diff --git a/templates/base.html b/templates/base.html
index 8a42e3d..ca6843e 100644
--- a/templates/base.html
+++ b/templates/base.html
@@ -362,6 +362,8 @@
+
+