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