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/),
|
||||
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
|
||||
|
179
app.py
179
app.py
@@ -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'
|
||||
@@ -257,7 +257,7 @@ def search_customers():
|
||||
if tag != 'all':
|
||||
sql += ' AND c.tag = ?'
|
||||
params.append(tag)
|
||||
|
||||
|
||||
sql += ' ORDER BY c.name'
|
||||
|
||||
c.execute(sql, params)
|
||||
@@ -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')
|
||||
|
||||
conn = get_db_connection()
|
||||
c = conn.cursor()
|
||||
# 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')
|
||||
|
||||
# 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) + ')')
|
||||
|
||||
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 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])
|
||||
|
||||
# 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'
|
||||
if name:
|
||||
query += " AND name LIKE ?"
|
||||
params.append(f"%{name}%")
|
||||
|
||||
c.execute(sql, params)
|
||||
results = c.fetchall()
|
||||
if ort:
|
||||
query += " AND ort LIKE ?"
|
||||
params.append(f"%{ort}%")
|
||||
|
||||
formatted_results = []
|
||||
if nummer:
|
||||
query += " AND nummer LIKE ?"
|
||||
params.append(f"%{nummer}%")
|
||||
|
||||
if plz:
|
||||
query += " AND plz LIKE ?"
|
||||
params.append(f"%{plz}%")
|
||||
|
||||
if fachrichtung:
|
||||
query += " AND fachrichtung LIKE ?"
|
||||
params.append(f"%{fachrichtung}%")
|
||||
|
||||
# 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):
|
||||
|
Reference in New Issue
Block a user