feat: release 0.7.0 celebration flow
This commit is contained in:
@@ -3,6 +3,7 @@ from __future__ import annotations
|
||||
import calendar
|
||||
from collections import defaultdict
|
||||
from datetime import date, timedelta
|
||||
from urllib.parse import parse_qsl, urlencode, urlsplit, urlunsplit
|
||||
|
||||
from flask import Blueprint, flash, redirect, render_template, request, url_for
|
||||
from flask_login import current_user, login_required
|
||||
@@ -99,6 +100,19 @@ def _archive_day_label(day: date, today: date) -> str:
|
||||
return day.strftime("%d.%m.%Y")
|
||||
|
||||
|
||||
def _redirect_with_celebration(target_url: str, points: int | None = None):
|
||||
if not points or points <= 0:
|
||||
return redirect(target_url)
|
||||
|
||||
parts = urlsplit(target_url)
|
||||
query = dict(parse_qsl(parts.query, keep_blank_values=True))
|
||||
query["celebrate_points"] = str(points)
|
||||
redirect_url = urlunsplit(
|
||||
(parts.scheme, parts.netloc, parts.path, urlencode(query), parts.fragment)
|
||||
)
|
||||
return redirect(redirect_url)
|
||||
|
||||
|
||||
@bp.route("/my-tasks")
|
||||
@login_required
|
||||
def my_tasks():
|
||||
@@ -253,6 +267,7 @@ def create():
|
||||
def quick_create():
|
||||
config = get_quick_task_config()
|
||||
created_titles: list[str] = []
|
||||
total_points = 0
|
||||
|
||||
selected_ids = request.form.getlist("quick_win_ids")
|
||||
if selected_ids:
|
||||
@@ -261,6 +276,7 @@ def quick_create():
|
||||
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)
|
||||
total_points += task.points_awarded
|
||||
|
||||
if request.form.get("include_custom") == "1":
|
||||
form = QuickTaskForm(prefix="quick")
|
||||
@@ -281,6 +297,7 @@ def quick_create():
|
||||
task = create_quick_task(custom_title, form.effort.data, current_user, description="Quick-Win")
|
||||
complete_task(task, current_user.id)
|
||||
created_titles.append(task.title)
|
||||
total_points += task.points_awarded
|
||||
|
||||
if not created_titles:
|
||||
flash("Bitte wähle mindestens einen Quick-Win aus.", "error")
|
||||
@@ -290,7 +307,10 @@ def quick_create():
|
||||
flash(f"Quick-Win „{created_titles[0]}“ wurde als erledigt gespeichert.", "success")
|
||||
else:
|
||||
flash(f"{len(created_titles)} Quick-Wins wurden als erledigt gespeichert.", "success")
|
||||
return redirect(request.referrer or url_for("tasks.my_tasks"))
|
||||
return _redirect_with_celebration(
|
||||
request.referrer or url_for("tasks.my_tasks"),
|
||||
total_points,
|
||||
)
|
||||
|
||||
|
||||
@bp.route("/tasks/<int:task_id>/edit", methods=["GET", "POST"])
|
||||
@@ -353,9 +373,13 @@ def complete(task_id: int):
|
||||
if selected_user_id in allowed_ids:
|
||||
completed_by_id = selected_user_id
|
||||
|
||||
awarded_points = task.points_awarded
|
||||
complete_task(task, completed_by_id)
|
||||
flash("Punkte verbucht. Gute Arbeit.", "success")
|
||||
return redirect(request.referrer or url_for("tasks.my_tasks"))
|
||||
return _redirect_with_celebration(
|
||||
request.referrer or url_for("tasks.my_tasks"),
|
||||
awarded_points,
|
||||
)
|
||||
|
||||
|
||||
@bp.route("/calendar")
|
||||
|
||||
Reference in New Issue
Block a user