Release v1.2.11: Filterung von intern-Einträgen und verbesserte SQL-Abfrage
This commit is contained in:
@@ -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
|
||||||
|
169
app.py
169
app.py
@@ -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:
|
|
||||||
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:
|
if ort:
|
||||||
sql += ' AND ' + ' AND '.join(conditions)
|
query += " AND ort LIKE ?"
|
||||||
|
params.append(f"%{ort}%")
|
||||||
|
|
||||||
# Füge Tag-Filter hinzu, wenn nicht 'all' ausgewählt ist
|
if nummer:
|
||||||
if tag != 'all':
|
query += " AND nummer LIKE ?"
|
||||||
sql += ' AND c.tag = ?'
|
params.append(f"%{nummer}%")
|
||||||
params.append(tag)
|
|
||||||
|
|
||||||
sql += ' ORDER BY c.name'
|
if plz:
|
||||||
|
query += " AND plz LIKE ?"
|
||||||
|
params.append(f"%{plz}%")
|
||||||
|
|
||||||
c.execute(sql, params)
|
if fachrichtung:
|
||||||
results = c.fetchall()
|
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:
|
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):
|
||||||
|
Reference in New Issue
Block a user