diff --git a/aleksis/apps/alsijil/models.py b/aleksis/apps/alsijil/models.py index 721648bc4f52ddb4728de84f21319635ee9a014f..da7fea85bb193101fac482145d01717f462d4fba 100644 --- a/aleksis/apps/alsijil/models.py +++ b/aleksis/apps/alsijil/models.py @@ -1,6 +1,8 @@ from django.db import models +from django.utils.formats import date_format from django.utils.translation import gettext_lazy as _ +import reversion from calendarweek import CalendarWeek from aleksis.apps.chronos.mixins import WeekRelatedMixin @@ -82,6 +84,25 @@ class PersonalNote(ExtensibleModel, WeekRelatedMixin): self.excuse_type = None super().save(*args, **kwargs) + def reset(self): + """Reset all saved data to default values. + + This will create revisions internally. + """ + with reversion.create_revision(): + self.save() + with reversion.create_revision(): + self.absent = False + self.late = 0 + self.excused = False + self.excuse_type = None + self.remarks = "" + self.extra_marks.clear() + self.save() + + def __str__(self): + return f"{date_format(self.date)}, {self.lesson_period}, {self.person}" + class Meta: verbose_name = _("Personal note") verbose_name_plural = _("Personal notes") diff --git a/aleksis/apps/alsijil/templates/alsijil/class_register/person.html b/aleksis/apps/alsijil/templates/alsijil/class_register/person.html index 5a442b81c4fbb2956034bb26dc1f7c98ccbab4f8..dd907383585e258879539a07508a5e9c0aae7b81 100644 --- a/aleksis/apps/alsijil/templates/alsijil/class_register/person.html +++ b/aleksis/apps/alsijil/templates/alsijil/class_register/person.html @@ -27,6 +27,10 @@ {% trans "Mark as" %} <input type="hidden" value="{{ note.pk }}" name="personal_note"> {% include "alsijil/partials/mark_as_buttons.html" %} + <a class="btn-flat red-text" title="{% trans "Delete note" %}" + href="{% url "delete_personal_note" note.pk %}"> + <i class="material-icons center">cancel</i> + </a> </form> <i class="material-icons left red-text">warning</i> <p class="no-margin"> @@ -40,6 +44,10 @@ {% trans "Mark as" %} <input type="hidden" value="{{ note.pk }}" name="personal_note"> {% include "alsijil/partials/mark_as_buttons.html" %} + <a class="btn-flat red-text" title="{% trans "Delete note" %}" + href="{% url "delete_personal_note" note.pk %}"> + <i class="material-icons center">cancel</i> + </a> </form> </li> {% empty %} @@ -152,6 +160,10 @@ {% trans "Mark as" %} <input type="hidden" value="{{ note.pk }}" name="personal_note"> {% include "alsijil/partials/mark_as_buttons.html" %} + <a class="btn-flat red-text" title="{% trans "Delete note" %}" + href="{% url "delete_personal_note" note.pk %}"> + <i class="material-icons center">cancel</i> + </a> </form> {% endif %} @@ -190,6 +202,10 @@ {% trans "Mark as" %} <input type="hidden" value="{{ note.pk }}" name="personal_note"> {% include "alsijil/partials/mark_as_buttons.html" %} + <a class="btn-flat red-text" title="{% trans "Delete note" %}" + href="{% url "delete_personal_note" note.pk %}"> + <i class="material-icons center">cancel</i> + </a> </form> {% endif %} </div> diff --git a/aleksis/apps/alsijil/urls.py b/aleksis/apps/alsijil/urls.py index 0482571bd3cd9cf7c7da4a15b4cd7fc3e0a58c36..76e12ea7b0987cffc1830e7f5f997641e07fc57c 100644 --- a/aleksis/apps/alsijil/urls.py +++ b/aleksis/apps/alsijil/urls.py @@ -29,6 +29,11 @@ urlpatterns = [ path("persons/", views.my_students, name="my_students"), path("persons/<int:id_>/", views.overview_person, name="overview_person"), path("me/", views.overview_person, name="overview_me"), + path( + "notes/<int:id_>/delete/", + views.delete_personal_note, + name="delete_personal_note", + ), path("absence/new", views.register_absence, name="register_absence"), path("extra_marks/", views.ExtraMarkListView.as_view(), name="extra_marks"), path( diff --git a/aleksis/apps/alsijil/views.py b/aleksis/apps/alsijil/views.py index f9840a124ee64626238b77031039837b96525554..c467ee72bfe23d93962fc3739b2b1b24f1bb25d3 100644 --- a/aleksis/apps/alsijil/views.py +++ b/aleksis/apps/alsijil/views.py @@ -638,6 +638,20 @@ def register_absence(request: HttpRequest) -> HttpResponse: return render(request, "alsijil/absences/register.html", context) +def delete_personal_note(request: HttpRequest, id_: int) -> HttpResponse: + context = {} + + personal_note = get_object_or_404(PersonalNote, pk=id_) + + context["object"] = personal_note + + if request.method == "POST": + personal_note.reset() + return redirect("overview_person", personal_note.person.pk) + else: + return render(request, "core/pages/delete.html", context) + + class ExtraMarkListView(SingleTableView, PermissionRequiredMixin): """Table of all extra marks."""