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