Files
dev-manufaktur/CRM/app.py
2024-11-08 23:04:20 +01:00

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")