from flask import Flask, render_template from flask_sqlalchemy import SQLAlchemy from datetime import datetime app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///crm_dashboard.db' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False app.config['SECRET_KEY'] = 'dein_sicherer_geheimer_schlüssel' # Ersetze für Produktionssicherheit db = SQLAlchemy(app) # Datenbankmodelle class User(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(100), nullable=False) class Customer(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(100), nullable=False) email = db.Column(db.String(100), nullable=False) registered_date = db.Column(db.DateTime, default=datetime.utcnow) status = db.Column(db.String(50), nullable=False) class Activity(db.Model): id = db.Column(db.Integer, primary_key=True) description = db.Column(db.String(200), nullable=False) timestamp = db.Column(db.DateTime, default=datetime.utcnow) # Initialisierung der Datenbank und Hinzufügen von Beispieldaten def initialize_database(): with app.app_context(): db.create_all() if not User.query.first(): db.session.add(User(name="Admin User")) db.session.add_all([ Customer(name="Max Mustermann", email="max@example.com", status="Aktiv"), Customer(name="Anna Müller", email="anna@example.com", status="Inaktiv") ]) db.session.add_all([ Activity(description="Max Mustermann hat eine Bestellung abgeschlossen."), Activity(description="Anna Müller hat eine neue Anfrage erstellt.") ]) db.session.commit() # Beispiel-Funktionen zur Berechnung von KPIs def calculate_total_revenue(): return 123456.78 # Beispielwert, hier könnten Datenbankabfragen für reale Werte stehen def get_new_customers_count(): return Customer.query.filter(Customer.registered_date >= datetime.now().replace(day=1)).count() def get_open_tickets_count(): return 15 # Beispielwert, Ticket-System könnte integriert werden def calculate_customer_satisfaction(): return 89.7 # Beispielwert, tatsächliche Berechnungen wären abhängig von Kundendaten @app.route("/") def dashboard(): # Daten aus der Datenbank holen user = User.query.first() # Beispiel-Benutzer latest_customers = Customer.query.order_by(Customer.registered_date.desc()).limit(5).all() recent_activities = Activity.query.order_by(Activity.timestamp.desc()).all() # KPI-Berechnungen total_revenue = calculate_total_revenue() new_customers = get_new_customers_count() open_tickets = get_open_tickets_count() customer_satisfaction = calculate_customer_satisfaction() # Rendern des Templates und Übergabe der Daten return render_template( "dashboard.html", user=user, total_revenue=total_revenue, new_customers=new_customers, open_tickets=open_tickets, customer_satisfaction=customer_satisfaction, latest_customers=latest_customers, recent_activities=recent_activities ) if __name__ == "__main__": initialize_database() # Initialisiert die Datenbank beim ersten Start app.run(debug=False, host="0.0.0.0")