Suchfeld für Telefonnummer hinzugefügt

This commit is contained in:
2025-03-17 20:54:15 +01:00
parent 8fb10a35e8
commit 0285f0a520
2 changed files with 53 additions and 45 deletions

81
app.py
View File

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

View File

@@ -168,6 +168,11 @@
placeholder="Fachrichtung..."> placeholder="Fachrichtung...">
<i class="fa-solid fa-xmark reset-icon" id="fachrichtungReset"></i> <i class="fa-solid fa-xmark reset-icon" id="fachrichtungReset"></i>
</div> </div>
<div class="search-field">
<input type="text" id="telefonInput" class="form-control"
placeholder="Telefon...">
<i class="fa-solid fa-xmark reset-icon" id="telefonReset"></i>
</div>
</div> </div>
<div class="result-counts"> <div class="result-counts">
@@ -264,10 +269,11 @@
const ort = document.getElementById('ortInput').value; const ort = document.getElementById('ortInput').value;
const kundennummer = document.getElementById('kundennummerInput').value; const kundennummer = document.getElementById('kundennummerInput').value;
const fachrichtung = document.getElementById('fachrichtungInput').value; const fachrichtung = document.getElementById('fachrichtungInput').value;
const telefon = document.getElementById('telefonInput').value;
const query = document.getElementById('searchInput').value; const query = document.getElementById('searchInput').value;
// Prüfe, ob mindestens ein Suchfeld ausgefüllt ist // Prüfe, ob mindestens ein Suchfeld ausgefüllt ist
if (!name && !ort && !kundennummer && !fachrichtung && !query) { if (!name && !ort && !kundennummer && !fachrichtung && !telefon && !query) {
document.getElementById('results').innerHTML = ''; document.getElementById('results').innerHTML = '';
lastResults = []; lastResults = [];
updateResultCounts(); updateResultCounts();
@@ -284,6 +290,7 @@
if (ort) params.append('ort', ort); if (ort) params.append('ort', ort);
if (kundennummer) params.append('kundennummer', kundennummer); if (kundennummer) params.append('kundennummer', kundennummer);
if (fachrichtung) params.append('fachrichtung', fachrichtung); if (fachrichtung) params.append('fachrichtung', fachrichtung);
if (telefon) params.append('telefon', telefon);
if (query) params.append('q', query); if (query) params.append('q', query);
fetch(`/search?${params.toString()}`) fetch(`/search?${params.toString()}`)
@@ -352,6 +359,7 @@
document.getElementById('ortInput'), document.getElementById('ortInput'),
document.getElementById('kundennummerInput'), document.getElementById('kundennummerInput'),
document.getElementById('fachrichtungInput'), document.getElementById('fachrichtungInput'),
document.getElementById('telefonInput'),
document.getElementById('searchInput') document.getElementById('searchInput')
]; ];
@@ -360,6 +368,7 @@
document.getElementById('ortReset'), document.getElementById('ortReset'),
document.getElementById('kundennummerReset'), document.getElementById('kundennummerReset'),
document.getElementById('fachrichtungReset'), document.getElementById('fachrichtungReset'),
document.getElementById('telefonReset'),
document.getElementById('searchReset') document.getElementById('searchReset')
]; ];
@@ -386,15 +395,17 @@
const ort = urlParams.get('ort'); const ort = urlParams.get('ort');
const kundennummer = urlParams.get('kundennummer'); const kundennummer = urlParams.get('kundennummer');
const fachrichtung = urlParams.get('fachrichtung'); const fachrichtung = urlParams.get('fachrichtung');
const telefon = urlParams.get('telefon');
const query = urlParams.get('q'); const query = urlParams.get('q');
if (name) document.getElementById('nameInput').value = name; if (name) document.getElementById('nameInput').value = name;
if (ort) document.getElementById('ortInput').value = ort; if (ort) document.getElementById('ortInput').value = ort;
if (kundennummer) document.getElementById('kundennummerInput').value = kundennummer; if (kundennummer) document.getElementById('kundennummerInput').value = kundennummer;
if (fachrichtung) document.getElementById('fachrichtungInput').value = fachrichtung; if (fachrichtung) document.getElementById('fachrichtungInput').value = fachrichtung;
if (telefon) document.getElementById('telefonInput').value = telefon;
if (query) document.getElementById('searchInput').value = query; if (query) document.getElementById('searchInput').value = query;
if (name || ort || kundennummer || fachrichtung || query) { if (name || ort || kundennummer || fachrichtung || telefon || query) {
searchCustomers(); searchCustomers();
} }
}); });