diff --git a/app.py b/app.py index 33fb89e..ad7e947 100644 --- a/app.py +++ b/app.py @@ -297,22 +297,138 @@ def index(): logger.info(f"Erlaubte IP-Bereiche: {allowed_ip_ranges}") return render_template('index.html', allowed_ip_ranges=allowed_ip_ranges) -@app.route('/search') -def search(): +@app.route('/search', methods=['GET', 'POST']) +def search_customers(): try: - # Führe die Suche durch und hole die Ergebnisse - results = search_customers() - - # Wenn results ein Response-Objekt ist, geben wir es direkt zurück - if isinstance(results, tuple): - return results + if request.method == 'POST': + data = request.get_json() + query = data.get('query', '') + tag = data.get('tag', 'medisoft') + else: + query = request.args.get('q', '') + name = request.args.get('name', '') + ort = request.args.get('ort', '') + nummer = request.args.get('nummer', '') + plz = request.args.get('plz', '') + fachrichtung = request.args.get('fachrichtung', '') + operator = request.args.get('operator', 'or') + tag = request.args.get('tag', 'medisoft') - # Protokolliere die Anzahl der gefundenen Ergebnisse - logger.info(f'Suchergebnisse gefunden: {len(results.get_json())}') + conn = get_db_connection() + c = conn.cursor() + + # Basis-SQL-Query + sql = ''' + SELECT + c.nummer, + c.name, + c.strasse, + c.plz, + c.ort, + c.telefon, + c.mobil, + c.email, + c.fachrichtung, + c.tag, + CASE + WHEN c.tag = 'medisoft' THEN 'MEDISOFT' + WHEN c.tag = 'mediconsult' THEN 'MEDICONSULT' + ELSE c.tag + END as formatted_tag + FROM customers c + WHERE 1=1 + ''' + params = [] + + if request.method == 'POST': + if query: + sql += ''' AND ( + c.name LIKE ? OR + c.nummer LIKE ? OR + c.strasse LIKE ? OR + c.plz LIKE ? OR + c.ort LIKE ? OR + c.telefon LIKE ? OR + c.mobil LIKE ? OR + c.email LIKE ? OR + c.fachrichtung LIKE ? + )''' + search_pattern = f'%{query}%' + params.extend([search_pattern] * 9) + else: + # Suchbedingungen für GET-Request + conditions = [] + if query: + search_terms = query.split() + if operator == 'and': + for term in search_terms: + conditions.append(''' + (c.name LIKE ? OR c.nummer LIKE ? OR c.strasse LIKE ? + OR c.plz LIKE ? OR c.ort LIKE ? OR c.telefon LIKE ? + OR c.mobil LIKE ? OR c.email LIKE ? OR c.fachrichtung LIKE ?) + ''') + params.extend([f'%{term}%'] * 9) + else: + term_conditions = [] + for term in search_terms: + term_conditions.append(''' + (c.name LIKE ? OR c.nummer LIKE ? OR c.strasse LIKE ? + OR c.plz LIKE ? OR c.ort LIKE ? OR c.telefon LIKE ? + OR c.mobil LIKE ? OR c.email LIKE ? OR c.fachrichtung LIKE ?) + ''') + params.extend([f'%{term}%'] * 9) + conditions.append('(' + ' OR '.join(term_conditions) + ')') + + if name: + conditions.append('c.name LIKE ?') + params.append(f'%{name}%') + if ort: + conditions.append('c.ort LIKE ?') + params.append(f'%{ort}%') + if nummer: + conditions.append('c.nummer LIKE ?') + params.append(f'%{nummer}%') + if plz: + conditions.append('c.plz LIKE ?') + params.append(f'%{plz}%') + if fachrichtung: + conditions.append('c.fachrichtung LIKE ?') + params.append(f'%{fachrichtung}%') + + if conditions: + sql += ' AND ' + ' AND '.join(conditions) + + # Füge Tag-Filter hinzu, wenn nicht 'all' ausgewählt ist + if tag != 'all': + sql += ' AND c.tag = ?' + params.append(tag) + + sql += ' ORDER BY c.name' + + c.execute(sql, params) + results = c.fetchall() + + formatted_results = [] + for row in results: + customer = { + 'nummer': row[0], + 'name': row[1], + 'strasse': row[2], + 'plz': row[3], + 'ort': row[4], + 'telefon': row[5], + 'mobil': row[6], + 'email': row[7], + 'fachrichtung': row[8], + 'tag': row[10] # Verwende den formatierten Tag + } + formatted_results.append(customer) + + conn.close() + return jsonify(formatted_results) - return results except Exception as e: - logger.error(f'Fehler bei der Suche: {str(e)}') + print(f"Fehler bei der Suche: {str(e)}") return jsonify({'error': str(e)}), 500 def init_app(app): diff --git a/templates/index.html b/templates/index.html index 60cd6a1..9732de9 100644 --- a/templates/index.html +++ b/templates/index.html @@ -76,6 +76,16 @@ + +