Files
2024-11-08 23:04:20 +01:00

88 lines
3.2 KiB
Python

from flask import Flask, render_template, request, redirect, url_for, flash
from flask_sqlalchemy import SQLAlchemy
from datetime import datetime
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///zeiterfassung.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['SECRET_KEY'] = 'supersecretkey' # Für Produktion ändern
db = SQLAlchemy(app)
# Datenbankmodelle
class Mitarbeiter(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(100), nullable=False)
class Projekt(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(100), nullable=False)
class Zeiterfassung(db.Model):
id = db.Column(db.Integer, primary_key=True)
mitarbeiter_name = db.Column(db.String(100), nullable=False)
projekttyp = db.Column(db.String(50), nullable=False)
projekt = db.Column(db.String(100))
datum = db.Column(db.DateTime, default=datetime.utcnow)
arbeitszeit = db.Column(db.Float)
strasse = db.Column(db.String(200))
beschreibung = db.Column(db.Text)
# Initialisierungslogik für die Datenbank
def initialize_database():
with app.app_context():
db.create_all()
if not Mitarbeiter.query.first():
db.session.add_all([Mitarbeiter(name="Max Mustermann"), Mitarbeiter(name="Anna Müller")])
db.session.add_all([Projekt(name="Projekt A"), Projekt(name="Projekt B")])
db.session.commit()
@app.route("/")
def dashboard():
mitarbeiter_list = Mitarbeiter.query.all()
projekt_list = Projekt.query.all()
zeiterfassung_list = Zeiterfassung.query.order_by(Zeiterfassung.datum.desc()).all()
return render_template("dashboard.html",
mitarbeiter_list=mitarbeiter_list,
projekt_list=projekt_list,
zeiterfassung_list=zeiterfassung_list)
@app.route("/eintragen", methods=["POST"])
def eintragen():
mitarbeiter_name = request.form.get("mitarbeiter_name")
projekttyp = request.form.get("projekttyp")
projekt = request.form.get("projekt")
arbeitszeit = request.form.get("arbeitszeit", type=float)
strasse = request.form.get("strasse")
beschreibung = request.form.get("beschreibung")
if not mitarbeiter_name or not projekttyp:
flash("Mitarbeiter und Projekttyp sind Pflichtfelder!", "danger")
return redirect(url_for("dashboard"))
eintrag = Zeiterfassung(
mitarbeiter_name=mitarbeiter_name,
projekttyp=projekttyp,
projekt=projekt,
arbeitszeit=arbeitszeit,
strasse=strasse,
beschreibung=beschreibung
)
db.session.add(eintrag)
db.session.commit()
flash("Zeiterfassung erfolgreich hinzugefügt!", "success")
return redirect(url_for("dashboard"))
@app.route("/wochenbericht")
def wochenbericht():
return "Wochenbericht herunterladen"
@app.route("/wochenbericht_send", methods=["POST"])
def wochenbericht_send():
flash("Wochenbericht wurde per E-Mail gesendet!", "success")
return redirect(url_for("dashboard"))
if __name__ == "__main__":
initialize_database() # Initialisiert die Datenbank vor dem Start
app.run(debug=False, host='0.0.0.0')