From f8f3641811619b117656f51a6e8615ca05c2ac58 Mon Sep 17 00:00:00 2001 From: Florian Heinz Date: Wed, 15 Apr 2026 12:37:57 +0200 Subject: [PATCH] feat: add task deletion for all users --- app/routes/tasks.py | 18 ++++++++++++++++-- app/services/tasks.py | 14 ++++++++++++++ app/static/css/style.css | 5 +++++ app/templates/tasks/task_form.html | 15 ++++++++++++++- 4 files changed, 49 insertions(+), 3 deletions(-) diff --git a/app/routes/tasks.py b/app/routes/tasks.py index f9a7485..9e68a9f 100644 --- a/app/routes/tasks.py +++ b/app/routes/tasks.py @@ -15,6 +15,7 @@ from ..services.tasks import ( complete_task, create_quick_task, create_task_template_and_instance, + delete_task_instance, refresh_task_statuses, update_template_and_instance, ) @@ -157,6 +158,7 @@ def edit(task_id: int): task = TaskInstance.query.get_or_404(task_id) form = TaskForm(obj=task.task_template) form.assigned_user_id.choices = _user_choices() + next_url = request.args.get("next") or request.form.get("next") or request.referrer or url_for("tasks.all_tasks") if request.method == "GET": form.title.data = task.title @@ -171,9 +173,21 @@ def edit(task_id: int): if form.validate_on_submit(): update_template_and_instance(task, form) flash("Aufgabe und Vorlage wurden aktualisiert.", "success") - return redirect(url_for("tasks.all_tasks")) + return redirect(next_url) - return render_template("tasks/task_form.html", form=form, mode="edit", task=task) + return render_template("tasks/task_form.html", form=form, mode="edit", task=task, next_url=next_url) + + +@bp.route("/tasks//delete", methods=["POST"]) +@login_required +def delete(task_id: int): + task = TaskInstance.query.get_or_404(task_id) + title = task.title + next_url = request.form.get("next") or url_for("tasks.all_tasks") + + delete_task_instance(task) + flash(f"Aufgabe „{title}“ wurde gelöscht.", "success") + return redirect(next_url) @bp.route("/tasks//complete", methods=["POST"]) diff --git a/app/services/tasks.py b/app/services/tasks.py index 756ad7c..bd8f7f3 100644 --- a/app/services/tasks.py +++ b/app/services/tasks.py @@ -157,3 +157,17 @@ def create_quick_task(title: str, effort: str, creator: User, description: str = db.session.add(task) db.session.commit() return task + + +def delete_task_instance(task: TaskInstance) -> None: + template = task.task_template + db.session.delete(task) + db.session.flush() + + remaining_instance = db.session.scalar( + select(TaskInstance.id).where(TaskInstance.task_template_id == template.id).limit(1) + ) + if remaining_instance is None: + db.session.delete(template) + + db.session.commit() diff --git a/app/static/css/style.css b/app/static/css/style.css index 5634aab..37d4ca4 100644 --- a/app/static/css/style.css +++ b/app/static/css/style.css @@ -578,6 +578,11 @@ p { color: var(--text); } +.button--danger { + border-color: rgba(225, 29, 72, 0.3); + color: var(--danger); +} + .button--wide { width: 100%; } diff --git a/app/templates/tasks/task_form.html b/app/templates/tasks/task_form.html index d1194de..019a62f 100644 --- a/app/templates/tasks/task_form.html +++ b/app/templates/tasks/task_form.html @@ -7,6 +7,9 @@

{% if mode == 'edit' %}Änderungen für {{ task.title }}{% else %}Neue Aufgabe anlegen{% endif %}

{{ form.hidden_tag() }} + {% if mode == 'edit' %} + + {% endif %}
{{ form.title.label }} @@ -57,8 +60,18 @@
{{ form.submit(class_='button') }} Abbrechen + {% if mode == 'edit' %} + + {% endif %}
{% endblock %} -