88 lines
3.2 KiB
Python
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')
|