Initialisierung Start
This commit is contained in:
87
Zeiterfassung/app.py
Normal file
87
Zeiterfassung/app.py
Normal file
@@ -0,0 +1,87 @@
|
||||
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')
|
||||
Reference in New Issue
Block a user