fixed search
This commit is contained in:
@@ -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 ""
|
||||
Reference in New Issue
Block a user