diff --git a/app.py b/app.py index 72983f3..58ccc64 100644 --- a/app.py +++ b/app.py @@ -42,54 +42,51 @@ def index(): @app.route('/search') def search(): try: - # Spezifische Suchparameter - name = request.args.get('name', '').lower() - ort = request.args.get('ort', '').lower() - kundennummer = request.args.get('kundennummer', '').lower() - fachrichtung = request.args.get('fachrichtung', '').lower() - - # Allgemeine Suche (für die alte Funktionalität) - query = request.args.get('q', '').lower() - - logger.info(f"Suche nach - Name: {name}, Ort: {ort}, Kundennummer: {kundennummer}, Fachrichtung: {fachrichtung}, Query: {query}") - - df = load_data() - if df is None: - return jsonify({"error": "Datenbank konnte nicht geladen werden"}), 500 - - # Basis-Mask (immer True) - mask = pd.Series(True, index=df.index) - - # Spezifische Suchkriterien anwenden - if name: - name_mask = ( - df['Vorname'].str.lower().str.contains(name, na=False) | - df['Nachname'].str.lower().str.contains(name, na=False) + # Suchparameter aus der URL holen + name = request.args.get('name', '').strip() + ort = request.args.get('ort', '').strip() + kundennummer = request.args.get('kundennummer', '').strip() + fachrichtung = request.args.get('fachrichtung', '').strip() + telefon = request.args.get('telefon', '').strip() + query = request.args.get('q', '').strip() + + # Wenn keine spezifischen Suchkriterien angegeben sind, aber eine allgemeine Suche + if not any([name, ort, kundennummer, fachrichtung, telefon]) and query: + # Suche in allen relevanten Feldern + mask = ( + df['Vorname'].str.contains(query, case=False, na=False) | + df['Nachname'].str.contains(query, case=False, na=False) | + df['Ort'].str.contains(query, case=False, na=False) | + df['Nummer'].astype(str).str.contains(query, case=False, na=False) | + df['Fachrichtung'].str.contains(query, case=False, na=False) | + df['Tel'].astype(str).str.contains(query, case=False, na=False) ) - mask &= name_mask + else: + # Spezifische Suche + mask = pd.Series(True, index=df.index) - if ort: - ort_mask = df['Ort'].str.lower().str.contains(ort, na=False) - mask &= ort_mask + if name: + name_mask = ( + df['Vorname'].str.contains(name, case=False, na=False) | + df['Nachname'].str.contains(name, case=False, na=False) + ) + mask &= name_mask - if kundennummer: - kunden_mask = df['Nummer'].astype(str).str.contains(kundennummer, na=False) - mask &= kunden_mask + if ort: + ort_mask = df['Ort'].str.contains(ort, case=False, na=False) + mask &= ort_mask - if fachrichtung: - fach_mask = df['Fachrichtung'].str.lower().str.contains(fachrichtung, na=False) - mask &= fach_mask + if kundennummer: + kundennummer_mask = df['Nummer'].astype(str).str.contains(kundennummer, case=False, na=False) + mask &= kundennummer_mask - # Wenn eine allgemeine Suche vorhanden ist, diese zusätzlich anwenden - if query: - query_mask = ( - df['Vorname'].str.lower().str.contains(query, na=False) | - df['Nachname'].str.lower().str.contains(query, na=False) | - df['Fachrichtung'].str.lower().str.contains(query, na=False) | - df['Ort'].str.lower().str.contains(query, na=False) | - df['Nummer'].astype(str).str.contains(query, na=False) - ) - mask &= query_mask + if fachrichtung: + fachrichtung_mask = df['Fachrichtung'].str.contains(fachrichtung, case=False, na=False) + mask &= fachrichtung_mask + + if telefon: + telefon_mask = df['Tel'].astype(str).str.contains(telefon, case=False, na=False) + mask &= telefon_mask results = df[mask].to_dict('records') logger.info(f"{len(results)} Ergebnisse gefunden") diff --git a/templates/index.html b/templates/index.html index 7dbfc26..04fea3c 100644 --- a/templates/index.html +++ b/templates/index.html @@ -168,6 +168,11 @@ placeholder="Fachrichtung..."> +