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/),
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
### Geändert
- Version wird jetzt aus der VERSION-Variable in app.py im Footer angezeigt
- Verbesserte Zeilenabstände in den Suchergebnissen
- Verbesserte Darstellung der Adress-Links mit Location- und Route-Icons
- Korrektur des Docker-Port-Mappings für bessere Erreichbarkeit
## [v1.2.9] - 2024-03-19
### Geändert

169
app.py
View File

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