from flask import Flask, request, jsonify, send_from_directory from datetime import date import sqlite3 import os APP_DIR = os.path.dirname(os.path.abspath(__file__)) DB_PATH = os.environ.get("DB_PATH", os.path.join(APP_DIR, "fahrtenbuch.db")) app = Flask(__name__) def db(): conn = sqlite3.connect(DB_PATH) conn.row_factory = sqlite3.Row return conn def init_db(): conn = db() conn.execute(""" CREATE TABLE IF NOT EXISTS fahrten ( id INTEGER PRIMARY KEY AUTOINCREMENT, benutzer TEXT NOT NULL, datum TEXT, enddatum TEXT, kilometer REAL, zweckVermerk TEXT, belegName TEXT, abgerechnet INTEGER DEFAULT 0, eingereichtAm TEXT ) """) # Migration: Spalte nachrüsten, falls die DB schon vor dieser Änderung existierte spalten = [r[1] for r in conn.execute("PRAGMA table_info(fahrten)").fetchall()] if "eingereichtAm" not in spalten: conn.execute("ALTER TABLE fahrten ADD COLUMN eingereichtAm TEXT") conn.commit() conn.close() init_db() @app.route("/") def index(): return send_from_directory(APP_DIR, "index.html") @app.route("/api/fahrten/") def fahrten_laden(benutzer): conn = db() rows = conn.execute( "SELECT * FROM fahrten WHERE benutzer=? AND abgerechnet=0 ORDER BY datum DESC, id DESC", (benutzer,) ).fetchall() conn.close() return jsonify([dict(r) for r in rows]) @app.route("/api/fahrten//archiv") def archiv_laden(benutzer): conn = db() rows = conn.execute( "SELECT * FROM fahrten WHERE benutzer=? AND abgerechnet=1 ORDER BY datum DESC, id DESC", (benutzer,) ).fetchall() conn.close() return jsonify([dict(r) for r in rows]) @app.route("/api/fahrten/", methods=["POST"]) def fahrt_speichern(benutzer): data = request.get_json() or {} conn = db() conn.execute(""" INSERT INTO fahrten (benutzer, datum, enddatum, kilometer, zweckVermerk, belegName, abgerechnet) VALUES (?, ?, ?, ?, ?, ?, 0) """, ( benutzer, data.get("datum", ""), data.get("enddatum", ""), data.get("kilometer", 0), data.get("zweckVermerk", ""), data.get("belegName", "") )) conn.commit() conn.close() return jsonify({"ok": True}) @app.route("/api/fahrten//", methods=["PUT"]) def fahrt_aktualisieren(benutzer, fahrt_id): data = request.get_json() or {} conn = db() conn.execute(""" UPDATE fahrten SET datum=?, enddatum=?, kilometer=?, zweckVermerk=?, belegName=? WHERE benutzer=? AND id=? AND abgerechnet=0 """, ( data.get("datum", ""), data.get("enddatum", ""), data.get("kilometer", 0), data.get("zweckVermerk", ""), data.get("belegName", ""), benutzer, fahrt_id )) conn.commit() conn.close() return jsonify({"ok": True}) @app.route("/api/fahrten//", methods=["DELETE"]) def fahrt_loeschen(benutzer, fahrt_id): conn = db() conn.execute( "DELETE FROM fahrten WHERE benutzer=? AND id=?", (benutzer, fahrt_id) ) conn.commit() conn.close() return jsonify({"ok": True}) @app.route("/api/fahrten//abrechnen", methods=["POST"]) def abrechnen(benutzer): heute = date.today().isoformat() conn = db() conn.execute( "UPDATE fahrten SET abgerechnet=1, eingereichtAm=? WHERE benutzer=? AND abgerechnet=0", (heute, benutzer) ) conn.commit() conn.close() return jsonify({"ok": True}) if __name__ == "__main__": app.run(host="0.0.0.0", port=8210)