Release v1.2.11: Filterung von intern-Einträgen und verbesserte SQL-Abfrage

This commit is contained in:
2025-03-19 19:08:34 +01:00
parent 7b88e62de0
commit 292fc63cfe
2 changed files with 79 additions and 109 deletions

View File

@@ -5,10 +5,15 @@ 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/), 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/). und dieses Projekt adhäriert zu [Semantic Versioning](https://semver.org/lang/de/).
## [v1.2.11] - 2024-03-19
### Geändert
- Einträge mit der Fachrichtung "intern" werden aus den Suchergebnissen gefiltert
- Verbesserte SQL-Abfrage für die Suchergebnisse
## [v1.2.10] - 2024-03-19 ## [v1.2.10] - 2024-03-19
### Geändert ### Geändert
- Version wird jetzt aus der VERSION-Variable in app.py im Footer angezeigt - Verbesserte Darstellung der Adress-Links mit Location- und Route-Icons
- Verbesserte Zeilenabstände in den Suchergebnissen - Korrektur des Docker-Port-Mappings für bessere Erreichbarkeit
## [v1.2.9] - 2024-03-19 ## [v1.2.9] - 2024-03-19
### Geändert ### Geändert

163
app.py
View File

@@ -18,7 +18,7 @@ logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
# Version der Anwendung # Version der Anwendung
VERSION = "1.2.10" VERSION = "1.2.11"
# Pfad zur Datenbank # Pfad zur Datenbank
DB_FILE = 'data/customers.db' DB_FILE = 'data/customers.db'
@@ -349,117 +349,82 @@ def index():
return render_template('index.html', allowed_ip_ranges=allowed_ip_ranges, version=VERSION) return render_template('index.html', allowed_ip_ranges=allowed_ip_ranges, version=VERSION)
@app.route('/search', methods=['GET', 'POST']) @app.route('/search', methods=['GET', 'POST'])
def search_customers(): def search():
if not session.get('logged_in'):
return jsonify({'error': 'Nicht eingeloggt'}), 401
try: try:
if request.method == 'POST': # Hole die Suchparameter
data = request.get_json() q = request.args.get('q', '').strip()
query = data.get('query', '') name = request.args.get('name', '').strip()
tag = data.get('tag', 'medisoft') ort = request.args.get('ort', '').strip()
else: nummer = request.args.get('nummer', '').strip()
query = request.args.get('q', '') plz = request.args.get('plz', '').strip()
name = request.args.get('name', '') fachrichtung = request.args.get('fachrichtung', '').strip()
ort = request.args.get('ort', '') selected_tag = request.args.get('tag', 'medisoft')
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() # Baue die SQL-Abfrage
c = conn.cursor() query = '''
# Basis-SQL-Query
sql = '''
SELECT SELECT
c.nummer, nummer,
c.name, name,
c.strasse, strasse,
c.plz, plz,
c.ort, ort,
c.telefon, telefon,
c.mobil, mobil,
c.email, email,
c.fachrichtung, fachrichtung,
c.tag, tag,
c.handy, handy,
c.tele_firma, tele_firma,
c.kontakt1, kontakt1,
c.kontakt2, kontakt2,
c.kontakt3 kontakt3
FROM customers c FROM customers
WHERE 1=1 WHERE 1=1
''' '''
params = [] params = []
if request.method == 'POST': # Füge die Suchbedingungen hinzu
if query: if q:
sql += ''' AND ( query += " AND (name LIKE ? OR ort LIKE ? OR nummer LIKE ? OR strasse LIKE ? OR fachrichtung LIKE ?)"
c.name LIKE ? OR search_term = f"%{q}%"
c.nummer LIKE ? OR params.extend([search_term, search_term, search_term, search_term, search_term])
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: if name:
conditions.append('c.name LIKE ?') query += " AND name LIKE ?"
params.append(f'%{name}%') params.append(f"%{name}%")
if ort: if ort:
conditions.append('c.ort LIKE ?') query += " AND ort LIKE ?"
params.append(f'%{ort}%') params.append(f"%{ort}%")
if nummer: if nummer:
conditions.append('c.nummer LIKE ?') query += " AND nummer LIKE ?"
params.append(f'%{nummer}%') params.append(f"%{nummer}%")
if plz: if plz:
conditions.append('c.plz LIKE ?') query += " AND plz LIKE ?"
params.append(f'%{plz}%') params.append(f"%{plz}%")
if fachrichtung: if fachrichtung:
conditions.append('c.fachrichtung LIKE ?') query += " AND fachrichtung LIKE ?"
params.append(f'%{fachrichtung}%') params.append(f"%{fachrichtung}%")
if conditions: # Filter nach Tag
sql += ' AND ' + ' AND '.join(conditions) if selected_tag != 'all':
query += " AND tag = ?"
params.append(selected_tag)
# Füge Tag-Filter hinzu, wenn nicht 'all' ausgewählt ist # Führe die Abfrage aus
if tag != 'all': conn = get_db_connection()
sql += ' AND c.tag = ?' cursor = conn.cursor()
params.append(tag) cursor.execute(query, params)
results = cursor.fetchall()
sql += ' ORDER BY c.name' # Formatiere die Ergebnisse
customers = []
c.execute(sql, params)
results = c.fetchall()
formatted_results = []
for row in results: for row in results:
customer = { customer = {
'nummer': row[0], 'nummer': row[0],
@@ -478,13 +443,13 @@ def search_customers():
'kontakt2': row[13], 'kontakt2': row[13],
'kontakt3': row[14] 'kontakt3': row[14]
} }
formatted_results.append(customer) customers.append(customer)
conn.close() conn.close()
return jsonify(formatted_results) return jsonify(customers)
except Exception as e: except Exception as e:
print(f"Fehler bei der Suche: {str(e)}") logger.error(f"Fehler bei der Suche: {str(e)}")
return jsonify({'error': str(e)}), 500 return jsonify({'error': str(e)}), 500
def init_app(app): def init_app(app):