86 lines
3.3 KiB
Python
86 lines
3.3 KiB
Python
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")
|