This commit is contained in:
HotSwapp
2025-08-18 20:20:04 -05:00
parent 89b2bc0aa2
commit bac8cc4bd5
114 changed files with 30258 additions and 1341 deletions

View File

@@ -4,7 +4,15 @@ from sqlalchemy import or_, and_, func, asc, desc
from app.models.rolodex import Rolodex
def apply_customer_filters(base_query, search: Optional[str], group: Optional[str], state: Optional[str], groups: Optional[List[str]], states: Optional[List[str]]):
def apply_customer_filters(
base_query,
search: Optional[str],
group: Optional[str],
state: Optional[str],
groups: Optional[List[str]],
states: Optional[List[str]],
name_prefix: Optional[str] = None,
):
"""Apply shared search and group/state filters to the provided base_query.
This helper is used by both list and export endpoints to keep logic in sync.
@@ -53,6 +61,16 @@ def apply_customer_filters(base_query, search: Optional[str], group: Optional[st
if effective_states:
base_query = base_query.filter(Rolodex.abrev.in_(effective_states))
# Optional: prefix filter on name (matches first OR last starting with the prefix, case-insensitive)
p = (name_prefix or "").strip().lower()
if p:
base_query = base_query.filter(
or_(
func.lower(Rolodex.last).like(f"{p}%"),
func.lower(Rolodex.first).like(f"{p}%"),
)
)
return base_query