From 6cfc2e0162eb5c39ab3655e5618cd8d7335c2a33 Mon Sep 17 00:00:00 2001 From: elpatron Date: Mon, 17 Mar 2025 22:49:27 +0100 Subject: [PATCH] =?UTF-8?q?Version=201.0.6:=20Kombinierte=20Suche=20=C3=BC?= =?UTF-8?q?ber=20mehrere=20Felder?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 5 +++++ README.md | 13 +++++++++++ app.py | 61 ++++++++++++++++++++++++++-------------------------- 3 files changed, 49 insertions(+), 30 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e836f53..1d43825 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,11 @@ Alle wichtigen Änderungen an diesem Projekt werden in dieser Datei dokumentiert Das Format basiert auf [Keep a Changelog](https://keepachangelog.com/de/1.0.0/), und dieses Projekt adhäriert zu [Semantic Versioning](https://semver.org/lang/de/). +## [1.0.6] - 2024-03-17 +### Geändert +- Verbesserte Suchfunktion: Kombinierte Suche über mehrere Felder möglich +- Dokumentation: Beispiele für kombinierte Suche hinzugefügt + ## [1.0.5] - 2024-03-17 ### Geändert - Verbesserte Suchfunktion: Ergebnisliste wird gelöscht, wenn alle Suchfelder leer sind diff --git a/README.md b/README.md index 92857fc..034262e 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ Eine webbasierte Kundensuche für medisoftware mit erweiterten Suchfunktionen. - Fachrichtung - Telefon - Allgemeine Suche über alle Felder +- Kombinierte Suche über mehrere Felder - Hervorhebung der Suchbegriffe in den Ergebnissen - Direkte Links zu: - medisoftware Kundenkartei (Kundennummer) @@ -81,6 +82,18 @@ curl "http://localhost:5001/search?telefon=030" curl "http://localhost:5001/search?q=Suchbegriff" ``` +### Kombinierte Suche +```bash +# Suche nach Fachrichtung und Ort +curl "http://localhost:5001/search?fachrichtung=Zahnarzt&ort=Berlin" + +# Suche nach Name und Telefon +curl "http://localhost:5001/search?name=Mustermann&telefon=030" + +# Suche nach mehreren Kriterien +curl "http://localhost:5001/search?fachrichtung=Zahnarzt&ort=Berlin&name=Schmidt" +``` + ## Version Aktuelle Version: [1.0.5](CHANGELOG.md#105---2024-03-17) \ No newline at end of file diff --git a/app.py b/app.py index 9df9ba8..870189e 100644 --- a/app.py +++ b/app.py @@ -13,7 +13,7 @@ logging.basicConfig(level=logging.DEBUG) logger = logging.getLogger(__name__) # Version der Anwendung -VERSION = "1.0.2" +VERSION = "1.0.6" # Pfad zur CSV-Datei CSV_FILE = "data/customers.csv" @@ -68,10 +68,12 @@ def search(): 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 = ( + # Initialisiere die Maske für die Filterung + mask = pd.Series(True, index=df.index) + + # Wenn eine allgemeine Suche angegeben ist + if query: + query_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) | @@ -79,32 +81,31 @@ def search(): df['Fachrichtung'].str.contains(query, case=False, na=False) | df['Tel'].astype(str).str.contains(query, case=False, na=False) ) - else: - # Spezifische Suche - mask = pd.Series(True, index=df.index) - - 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 ort: - ort_mask = df['Ort'].str.contains(ort, case=False, na=False) - mask &= ort_mask - - if kundennummer: - kundennummer_mask = df['Nummer'].astype(str).str.contains(kundennummer, case=False, na=False) - mask &= kundennummer_mask - - if fachrichtung: - fachrichtung_mask = df['Fachrichtung'].str.contains(fachrichtung, case=False, na=False) - mask &= fachrichtung_mask + mask &= query_mask + + # Spezifische Suchkriterien anwenden + 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 ort: + ort_mask = df['Ort'].str.contains(ort, case=False, na=False) + mask &= ort_mask + + if kundennummer: + kundennummer_mask = df['Nummer'].astype(str).str.contains(kundennummer, case=False, na=False) + mask &= kundennummer_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 + 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")