feat: add task deletion for all users
This commit is contained in:
@@ -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/<int:task_id>/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/<int:task_id>/complete", methods=["POST"])
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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%;
|
||||
}
|
||||
|
||||
@@ -7,6 +7,9 @@
|
||||
<h2>{% if mode == 'edit' %}Änderungen für {{ task.title }}{% else %}Neue Aufgabe anlegen{% endif %}</h2>
|
||||
<form method="post" class="form-grid form-grid--two">
|
||||
{{ form.hidden_tag() }}
|
||||
{% if mode == 'edit' %}
|
||||
<input type="hidden" name="next" value="{{ next_url }}">
|
||||
{% endif %}
|
||||
|
||||
<div class="field field--full">
|
||||
{{ form.title.label }}
|
||||
@@ -57,8 +60,18 @@
|
||||
<div class="form-actions field--full">
|
||||
{{ form.submit(class_='button') }}
|
||||
<a class="button button--ghost" href="{{ url_for('tasks.all_tasks') }}">Abbrechen</a>
|
||||
{% if mode == 'edit' %}
|
||||
<button
|
||||
type="submit"
|
||||
class="button button--ghost button--danger"
|
||||
formmethod="post"
|
||||
formaction="{{ url_for('tasks.delete', task_id=task.id) }}"
|
||||
onclick="return confirm('Diese Aufgabe wirklich löschen?');"
|
||||
>
|
||||
Aufgabe löschen
|
||||
</button>
|
||||
{% endif %}
|
||||
</div>
|
||||
</form>
|
||||
</section>
|
||||
{% endblock %}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user