feat: refine quick wins workflow and calendar layout
This commit is contained in:
@@ -232,6 +232,42 @@ def delete_quick_win(quick_win_id: int):
|
||||
return redirect(url_for("settings.quick_wins"))
|
||||
|
||||
|
||||
@bp.route("/quick-wins/<int:quick_win_id>/update", methods=["POST"])
|
||||
@login_required
|
||||
def update_quick_win(quick_win_id: int):
|
||||
quick_win = QuickWin.query.get_or_404(quick_win_id)
|
||||
quick_task_config = get_quick_task_config()
|
||||
|
||||
title = (request.form.get("title") or "").strip()
|
||||
effort = request.form.get("effort") or ""
|
||||
|
||||
if len(title) < 2:
|
||||
flash("Quick-Wins brauchen einen Titel mit mindestens 2 Zeichen.", "error")
|
||||
return redirect(url_for("settings.quick_wins"))
|
||||
|
||||
if len(title) > 160:
|
||||
flash("Quick-Win-Titel dürfen maximal 160 Zeichen lang sein.", "error")
|
||||
return redirect(url_for("settings.quick_wins"))
|
||||
|
||||
if effort not in quick_task_config:
|
||||
flash("Bitte wähle einen gültigen Aufwand.", "error")
|
||||
return redirect(url_for("settings.quick_wins"))
|
||||
|
||||
duplicate = (
|
||||
QuickWin.query.filter(QuickWin.id != quick_win.id, QuickWin.title == title, QuickWin.active.is_(True))
|
||||
.first()
|
||||
)
|
||||
if duplicate:
|
||||
flash("Diesen Quick-Win gibt es bereits.", "error")
|
||||
return redirect(url_for("settings.quick_wins"))
|
||||
|
||||
quick_win.title = title
|
||||
quick_win.effort = effort
|
||||
db.session.commit()
|
||||
flash(f"Quick-Win „{quick_win.title}“ wurde aktualisiert.", "success")
|
||||
return redirect(url_for("settings.quick_wins"))
|
||||
|
||||
|
||||
@bp.route("/users/<int:user_id>/toggle-admin", methods=["POST"])
|
||||
@login_required
|
||||
def toggle_admin(user_id: int):
|
||||
|
||||
@@ -110,33 +110,44 @@ def create():
|
||||
@login_required
|
||||
def quick_create():
|
||||
config = get_quick_task_config()
|
||||
quick_action = request.form.get("quick_action", "save")
|
||||
quick_mode = request.form.get("quick_mode", "preset")
|
||||
created_titles: list[str] = []
|
||||
|
||||
if quick_mode == "preset":
|
||||
quick_win = QuickWin.query.filter_by(id=request.form.get("quick_win_id", type=int), active=True).first()
|
||||
if not quick_win:
|
||||
flash("Dieser Quick-Win ist nicht mehr verfügbar.", "error")
|
||||
return redirect(request.referrer or url_for("tasks.my_tasks"))
|
||||
title = quick_win.title
|
||||
effort = quick_win.effort
|
||||
else:
|
||||
selected_ids = request.form.getlist("quick_win_ids")
|
||||
if selected_ids:
|
||||
quick_wins = QuickWin.query.filter(QuickWin.id.in_(selected_ids), QuickWin.active.is_(True)).order_by(QuickWin.id.asc()).all()
|
||||
for quick_win in quick_wins:
|
||||
task = create_quick_task(quick_win.title, quick_win.effort, current_user, description="Quick-Win")
|
||||
complete_task(task, current_user.id)
|
||||
created_titles.append(task.title)
|
||||
|
||||
if request.form.get("include_custom") == "1":
|
||||
form = QuickTaskForm(prefix="quick")
|
||||
form.effort.choices = [(key, values["label"]) for key, values in config.items()]
|
||||
if not form.validate_on_submit():
|
||||
custom_title = (form.title.data or "").strip()
|
||||
extra_errors: list[str] = []
|
||||
if not custom_title:
|
||||
extra_errors.append("Bitte gib für „Sonstiges“ einen Titel ein.")
|
||||
if not form.effort.data or form.effort.data not in config:
|
||||
extra_errors.append("Bitte wähle für „Sonstiges“ einen Aufwand aus.")
|
||||
if not form.validate_on_submit() or extra_errors:
|
||||
for field_errors in form.errors.values():
|
||||
for error in field_errors:
|
||||
flash(error, "error")
|
||||
for error in extra_errors:
|
||||
flash(error, "error")
|
||||
return redirect(request.referrer or url_for("tasks.my_tasks"))
|
||||
title = form.title.data
|
||||
effort = form.effort.data
|
||||
|
||||
task = create_quick_task(title, effort, current_user, description="Quick-Win")
|
||||
if quick_action == "complete":
|
||||
task = create_quick_task(custom_title, form.effort.data, current_user, description="Quick-Win")
|
||||
complete_task(task, current_user.id)
|
||||
flash(f"Quick-Win „{task.title}“ wurde direkt als erledigt gespeichert.", "success")
|
||||
created_titles.append(task.title)
|
||||
|
||||
if not created_titles:
|
||||
flash("Bitte wähle mindestens einen Quick-Win aus.", "error")
|
||||
return redirect(request.referrer or url_for("tasks.my_tasks"))
|
||||
|
||||
if len(created_titles) == 1:
|
||||
flash(f"Quick-Win „{created_titles[0]}“ wurde als erledigt gespeichert.", "success")
|
||||
else:
|
||||
flash(f"Quick-Win „{task.title}“ wurde für dich angelegt.", "success")
|
||||
flash(f"{len(created_titles)} Quick-Wins wurden als erledigt gespeichert.", "success")
|
||||
return redirect(request.referrer or url_for("tasks.my_tasks"))
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user