Files
saldo/app/months/routes.py
T
2026-04-21 21:17:36 +02:00

50 lines
1.7 KiB
Python

from __future__ import annotations
from flask import Blueprint, current_app, flash, redirect, render_template, request, url_for
from flask_login import login_required
from app.extensions import db
from app.models import Month
months_bp = Blueprint("months", __name__, url_prefix="/months")
@months_bp.route("/")
@login_required
def index():
months = Month.query.order_by(Month.year.desc(), Month.month.desc()).all()
return render_template("months/index.html", months=months)
@months_bp.route("/create", methods=["POST"])
@login_required
def create():
label = request.form.get("label", "")
month = current_app.extensions["saldo.month_service"].get_or_create_by_label(label)
flash(f"Monat {month.label} ist bereit.", "success")
return redirect(url_for("planning.detail", label=month.label))
@months_bp.route("/<label>/copy", methods=["POST"])
@login_required
def copy(label: str):
source_month = Month.query.filter_by(label=label).first_or_404()
target_label = request.form.get("target_label", "")
year, month_num = [int(part) for part in target_label.split("-")]
current_app.extensions["saldo.month_service"].copy_month(
source_month, year, month_num, auto_created=False
)
db.session.commit()
flash(f"{target_label} wurde aus {label} kopiert.", "success")
return redirect(url_for("months.index"))
@months_bp.route("/<label>/toggle-lock", methods=["POST"])
@login_required
def toggle_lock(label: str):
month = Month.query.filter_by(label=label).first_or_404()
month.is_locked = not month.is_locked
db.session.commit()
flash(f"Monat {label} wurde {'gesperrt' if month.is_locked else 'entsperrt'}.", "info")
return redirect(url_for("months.index"))