fixed search

This commit is contained in:
HotSwapp
2025-08-11 11:26:16 -05:00
parent 85ce0f82ec
commit 278eb7c5d4
3 changed files with 53 additions and 43 deletions

View File

@@ -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 ""