feat: add task deletion for all users
This commit is contained in:
@@ -15,6 +15,7 @@ from ..services.tasks import (
|
|||||||
complete_task,
|
complete_task,
|
||||||
create_quick_task,
|
create_quick_task,
|
||||||
create_task_template_and_instance,
|
create_task_template_and_instance,
|
||||||
|
delete_task_instance,
|
||||||
refresh_task_statuses,
|
refresh_task_statuses,
|
||||||
update_template_and_instance,
|
update_template_and_instance,
|
||||||
)
|
)
|
||||||
@@ -157,6 +158,7 @@ def edit(task_id: int):
|
|||||||
task = TaskInstance.query.get_or_404(task_id)
|
task = TaskInstance.query.get_or_404(task_id)
|
||||||
form = TaskForm(obj=task.task_template)
|
form = TaskForm(obj=task.task_template)
|
||||||
form.assigned_user_id.choices = _user_choices()
|
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":
|
if request.method == "GET":
|
||||||
form.title.data = task.title
|
form.title.data = task.title
|
||||||
@@ -171,9 +173,21 @@ def edit(task_id: int):
|
|||||||
if form.validate_on_submit():
|
if form.validate_on_submit():
|
||||||
update_template_and_instance(task, form)
|
update_template_and_instance(task, form)
|
||||||
flash("Aufgabe und Vorlage wurden aktualisiert.", "success")
|
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"])
|
@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.add(task)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
return task
|
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);
|
color: var(--text);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.button--danger {
|
||||||
|
border-color: rgba(225, 29, 72, 0.3);
|
||||||
|
color: var(--danger);
|
||||||
|
}
|
||||||
|
|
||||||
.button--wide {
|
.button--wide {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,9 @@
|
|||||||
<h2>{% if mode == 'edit' %}Änderungen für {{ task.title }}{% else %}Neue Aufgabe anlegen{% endif %}</h2>
|
<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 method="post" class="form-grid form-grid--two">
|
||||||
{{ form.hidden_tag() }}
|
{{ form.hidden_tag() }}
|
||||||
|
{% if mode == 'edit' %}
|
||||||
|
<input type="hidden" name="next" value="{{ next_url }}">
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
<div class="field field--full">
|
<div class="field field--full">
|
||||||
{{ form.title.label }}
|
{{ form.title.label }}
|
||||||
@@ -57,8 +60,18 @@
|
|||||||
<div class="form-actions field--full">
|
<div class="form-actions field--full">
|
||||||
{{ form.submit(class_='button') }}
|
{{ form.submit(class_='button') }}
|
||||||
<a class="button button--ghost" href="{{ url_for('tasks.all_tasks') }}">Abbrechen</a>
|
<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>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</section>
|
</section>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user