diff --git a/app.py b/app.py index ad7e947..5d5ad56 100644 --- a/app.py +++ b/app.py @@ -138,23 +138,28 @@ def import_csv(): def search_customers(): try: - q = 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') - + 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') + conn = get_db_connection() c = conn.cursor() - + # Basis-SQL-Query - query = ''' - SELECT DISTINCT - c.id, - c.name, + sql = ''' + SELECT c.nummer, + c.name, c.strasse, c.plz, c.ort, @@ -167,77 +172,96 @@ def search_customers(): WHERE 1=1 ''' params = [] - - # Suchbedingungen - conditions = [] - if q: - search_terms = q.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 ? - OR c.tag LIKE ?) - ''') - params.extend([f'%{term}%'] * 10) - 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 ? - OR c.tag LIKE ?) - ''') - params.extend([f'%{term}%'] * 10) - 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: - query += ' AND ' + ' AND '.join(conditions) - - c.execute(query, 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() - - # Formatiere die Ergebnisse + formatted_results = [] for row in results: customer = { - 'id': row[0], + 'nummer': row[0], 'name': row[1], - 'nummer': row[2], - 'strasse': row[3], - 'plz': row[4], - 'ort': row[5], - 'telefon': row[6], - 'mobil': row[7], - 'email': row[8], - 'fachrichtung': row[9], - 'tag': row[10] + 'strasse': row[2], + 'plz': row[3], + 'ort': row[4], + 'telefon': row[5], + 'mobil': row[6], + 'email': row[7], + 'fachrichtung': row[8], + 'tag': row[9] # Tag-Feld hinzugefügt } formatted_results.append(customer) - + conn.close() return jsonify(formatted_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 clean_dataframe(df): @@ -329,12 +353,7 @@ def search_customers(): 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 + c.tag FROM customers c WHERE 1=1 ''' @@ -420,7 +439,7 @@ def search_customers(): 'mobil': row[6], 'email': row[7], 'fachrichtung': row[8], - 'tag': row[10] # Verwende den formatierten Tag + 'tag': row[9] # Tag-Feld hinzugefügt } formatted_results.append(customer) diff --git a/templates/index.html b/templates/index.html index d2a9a57..071a286 100644 --- a/templates/index.html +++ b/templates/index.html @@ -256,9 +256,12 @@
${customer.name}
- +
+ ${customer.tag.toUpperCase()} + +

Nummer: ${customer.nummer}

@@ -267,6 +270,7 @@

Mobil: ${createPhoneLink(customer.mobil)}

E-Mail: ${createEmailLink(customer.email)}

Fachrichtung: ${customer.fachrichtung}

+

Tag: ${customer.tag}

${customer.tags && customer.tags.length > 0 ? `

Tags: ${customer.tags.map(tag => `${tag}`).join('')}