Fix: Teilen-Button und Telefonnummern-Links wieder hinzugefügt, Zeilenabstand in Suchergebnissen optimiert
This commit is contained in:
66
app.py
66
app.py
@@ -38,7 +38,7 @@ def init_db():
|
||||
conn = sqlite3.connect(DB_FILE)
|
||||
c = conn.cursor()
|
||||
|
||||
# Erstelle die Tabelle
|
||||
# Erstelle die Kunden-Tabelle
|
||||
c.execute('''
|
||||
CREATE TABLE IF NOT EXISTS customers (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
@@ -55,6 +55,25 @@ def init_db():
|
||||
)
|
||||
''')
|
||||
|
||||
# Erstelle die Tags-Tabelle
|
||||
c.execute('''
|
||||
CREATE TABLE IF NOT EXISTS tags (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
name TEXT UNIQUE NOT NULL
|
||||
)
|
||||
''')
|
||||
|
||||
# Erstelle die Verbindungstabelle für Kunden-Tags
|
||||
c.execute('''
|
||||
CREATE TABLE IF NOT EXISTS customer_tags (
|
||||
customer_id INTEGER,
|
||||
tag_id INTEGER,
|
||||
PRIMARY KEY (customer_id, tag_id),
|
||||
FOREIGN KEY (customer_id) REFERENCES customers (id),
|
||||
FOREIGN KEY (tag_id) REFERENCES tags (id)
|
||||
)
|
||||
''')
|
||||
|
||||
# Erstelle Indizes für alle Suchfelder
|
||||
c.execute('CREATE INDEX IF NOT EXISTS idx_customers_nummer ON customers(nummer)')
|
||||
c.execute('CREATE INDEX IF NOT EXISTS idx_customers_name ON customers(name)')
|
||||
@@ -69,6 +88,10 @@ def init_db():
|
||||
# Erstelle einen zusammengesetzten Index für die häufigste Suchkombination
|
||||
c.execute('CREATE INDEX IF NOT EXISTS idx_customers_name_ort ON customers(name, ort)')
|
||||
|
||||
# Erstelle Standard-Tags, falls sie noch nicht existieren
|
||||
c.execute('INSERT OR IGNORE INTO tags (name) VALUES (?)', ('medisoft',))
|
||||
c.execute('INSERT OR IGNORE INTO tags (name) VALUES (?)', ('mediconsult',))
|
||||
|
||||
conn.commit()
|
||||
conn.close()
|
||||
logger.info('Datenbank initialisiert')
|
||||
@@ -79,6 +102,7 @@ def import_csv():
|
||||
c = conn.cursor()
|
||||
|
||||
# Lösche bestehende Daten
|
||||
c.execute('DELETE FROM customer_tags')
|
||||
c.execute('DELETE FROM customers')
|
||||
|
||||
try:
|
||||
@@ -96,6 +120,10 @@ def import_csv():
|
||||
# Kombiniere Vorname und Nachname
|
||||
df['name'] = df['Vorname'] + ' ' + df['Nachname']
|
||||
|
||||
# Hole die ID des medisoft Tags
|
||||
c.execute('SELECT id FROM tags WHERE name = ?', ('medisoft',))
|
||||
medisoft_tag_id = c.fetchone()[0]
|
||||
|
||||
# Importiere die Daten
|
||||
for _, row in df.iterrows():
|
||||
c.execute('''
|
||||
@@ -113,6 +141,15 @@ def import_csv():
|
||||
f"Fachrichtung: {row['Fachrichtung']}",
|
||||
row['Fachrichtung']
|
||||
))
|
||||
|
||||
# Hole die ID des eingefügten Kunden
|
||||
customer_id = c.lastrowid
|
||||
|
||||
# Füge das medisoft Tag hinzu
|
||||
c.execute('''
|
||||
INSERT INTO customer_tags (customer_id, tag_id)
|
||||
VALUES (?, ?)
|
||||
''', (customer_id, medisoft_tag_id))
|
||||
|
||||
conn.commit()
|
||||
logger.info('CSV-Daten erfolgreich in die Datenbank importiert')
|
||||
@@ -142,7 +179,13 @@ def search_customers(search_params):
|
||||
|
||||
try:
|
||||
# Baue die SQL-Abfrage dynamisch auf
|
||||
query = "SELECT * FROM customers WHERE 1=1"
|
||||
query = """
|
||||
SELECT c.*, GROUP_CONCAT(t.name) as tags
|
||||
FROM customers c
|
||||
LEFT JOIN customer_tags ct ON c.id = ct.customer_id
|
||||
LEFT JOIN tags t ON ct.tag_id = t.id
|
||||
WHERE 1=1
|
||||
"""
|
||||
params = []
|
||||
|
||||
# Allgemeine Suche über alle Felder
|
||||
@@ -156,35 +199,37 @@ def search_customers(search_params):
|
||||
conditions = []
|
||||
for term in terms:
|
||||
term = f"%{term}%"
|
||||
conditions.append("(name LIKE ? OR ort LIKE ? OR nummer LIKE ? OR telefon LIKE ? OR mobil LIKE ? OR email LIKE ? OR bemerkung LIKE ? OR fachrichtung LIKE ?)")
|
||||
conditions.append("(c.name LIKE ? OR c.ort LIKE ? OR c.nummer LIKE ? OR c.telefon LIKE ? OR c.mobil LIKE ? OR c.email LIKE ? OR c.bemerkung LIKE ? OR c.fachrichtung LIKE ?)")
|
||||
params.extend([term] * 8)
|
||||
query += " AND " + " AND ".join(conditions)
|
||||
else:
|
||||
# Bei ODER-Verknüpfung (Standard) muss mindestens ein Begriff in einem Feld vorkommen
|
||||
query += " AND (name LIKE ? OR ort LIKE ? OR nummer LIKE ? OR telefon LIKE ? OR mobil LIKE ? OR email LIKE ? OR bemerkung LIKE ? OR fachrichtung LIKE ?)"
|
||||
query += " AND (c.name LIKE ? OR c.ort LIKE ? OR c.nummer LIKE ? OR c.telefon LIKE ? OR c.mobil LIKE ? OR c.email LIKE ? OR c.bemerkung LIKE ? OR c.fachrichtung LIKE ?)"
|
||||
params.extend([search_term] * 8)
|
||||
|
||||
# Spezifische Suche für einzelne Felder
|
||||
if search_params.get('name'):
|
||||
query += " AND name LIKE ?"
|
||||
query += " AND c.name LIKE ?"
|
||||
params.append(f"%{search_params['name']}%")
|
||||
|
||||
if search_params.get('ort'):
|
||||
query += " AND ort LIKE ?"
|
||||
query += " AND c.ort LIKE ?"
|
||||
params.append(f"%{search_params['ort']}%")
|
||||
|
||||
if search_params.get('nummer'):
|
||||
query += " AND nummer LIKE ?"
|
||||
query += " AND c.nummer LIKE ?"
|
||||
params.append(f"%{search_params['nummer']}%")
|
||||
|
||||
if search_params.get('plz'):
|
||||
query += " AND plz LIKE ?"
|
||||
query += " AND c.plz LIKE ?"
|
||||
params.append(f"%{search_params['plz']}%")
|
||||
|
||||
if search_params.get('fachrichtung'):
|
||||
query += " AND fachrichtung LIKE ?"
|
||||
query += " AND c.fachrichtung LIKE ?"
|
||||
params.append(f"%{search_params['fachrichtung']}%")
|
||||
|
||||
query += " GROUP BY c.id"
|
||||
|
||||
# Führe die Abfrage aus
|
||||
c.execute(query, params)
|
||||
results = c.fetchall()
|
||||
@@ -203,7 +248,8 @@ def search_customers(search_params):
|
||||
'mobil': row[7],
|
||||
'email': row[8],
|
||||
'bemerkung': row[9],
|
||||
'fachrichtung': row[10]
|
||||
'fachrichtung': row[10],
|
||||
'tags': row[11].split(',') if row[11] else []
|
||||
}
|
||||
customers.append(customer)
|
||||
|
||||
|
Reference in New Issue
Block a user