From a66dc7a9a445abfc5c5aab8132e9802dcb92da0d Mon Sep 17 00:00:00 2001 From: Jonathan Weth <git@jonathanweth.de> Date: Sat, 18 Jul 2020 17:24:51 +0200 Subject: [PATCH] Remove legacy personal notes filters in favor of extra marks --- aleksis/apps/alsijil/forms.py | 16 +--- aleksis/apps/alsijil/menus.py | 6 -- .../0004_delete_personal_notes_filter.py | 14 ++++ aleksis/apps/alsijil/models.py | 23 ------ aleksis/apps/alsijil/tables.py | 15 ---- .../alsijil/personal_note_filter/list.html | 16 ---- .../alsijil/personal_note_filter/manage.html | 34 --------- .../alsijil/print/full_register.html | 23 ------ aleksis/apps/alsijil/urls.py | 20 ----- aleksis/apps/alsijil/views.py | 74 +------------------ 10 files changed, 17 insertions(+), 224 deletions(-) create mode 100644 aleksis/apps/alsijil/migrations/0004_delete_personal_notes_filter.py delete mode 100644 aleksis/apps/alsijil/templates/alsijil/personal_note_filter/list.html delete mode 100644 aleksis/apps/alsijil/templates/alsijil/personal_note_filter/manage.html diff --git a/aleksis/apps/alsijil/forms.py b/aleksis/apps/alsijil/forms.py index f27596eef..975dd5d2a 100644 --- a/aleksis/apps/alsijil/forms.py +++ b/aleksis/apps/alsijil/forms.py @@ -11,13 +11,7 @@ from material import Layout, Row from aleksis.apps.chronos.managers import TimetableType from aleksis.core.models import Group, Person -from .models import ( - ExcuseType, - ExtraMark, - LessonDocumentation, - PersonalNote, - PersonalNoteFilter, -) +from .models import ExcuseType, ExtraMark, LessonDocumentation, PersonalNote class LessonDocumentationForm(forms.ModelForm): @@ -115,14 +109,6 @@ class RegisterAbsenceForm(forms.Form): remarks = forms.CharField(label=_("Remarks"), max_length=30, required=False) -class PersonalNoteFilterForm(forms.ModelForm): - layout = Layout(Row("identifier", "description"), Row("regex")) - - class Meta: - model = PersonalNoteFilter - fields = ["identifier", "description", "regex"] - - class ExtraMarkForm(forms.ModelForm): layout = Layout("short_name", "name") diff --git a/aleksis/apps/alsijil/menus.py b/aleksis/apps/alsijil/menus.py index 081c1ec2a..a3ec5e9cc 100644 --- a/aleksis/apps/alsijil/menus.py +++ b/aleksis/apps/alsijil/menus.py @@ -30,12 +30,6 @@ MENUS = { "icon": "rate_review", "validators": ["menu_generator.validators.is_superuser"], }, - { - "name": _("Personal note filters"), - "url": "list_personal_note_filters", - "icon": "filter_list", - "validators": ["menu_generator.validators.is_superuser"], - }, { "name": _("Excuse types"), "url": "excuse_types", diff --git a/aleksis/apps/alsijil/migrations/0004_delete_personal_notes_filter.py b/aleksis/apps/alsijil/migrations/0004_delete_personal_notes_filter.py new file mode 100644 index 000000000..d04764b80 --- /dev/null +++ b/aleksis/apps/alsijil/migrations/0004_delete_personal_notes_filter.py @@ -0,0 +1,14 @@ +# Generated by Django 3.0.8 on 2020-07-18 15:23 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("alsijil", "0003_extra_mark"), + ] + + operations = [ + migrations.DeleteModel(name="PersonalNoteFilter",), + ] diff --git a/aleksis/apps/alsijil/models.py b/aleksis/apps/alsijil/models.py index 76b3b8a98..8a82caddb 100644 --- a/aleksis/apps/alsijil/models.py +++ b/aleksis/apps/alsijil/models.py @@ -110,29 +110,6 @@ class LessonDocumentation(ExtensibleModel): ] -class PersonalNoteFilter(ExtensibleModel): - """A filter definition that can generate statistics on personal note texts.""" - - identifier = models.CharField( - verbose_name=_("Identifier"), - max_length=30, - validators=[isidentifier], - unique=True, - ) - description = models.CharField( - verbose_name=_("Description"), max_length=60, blank=True, unique=True - ) - - regex = models.CharField( - verbose_name=_("Match expression"), max_length=100, unique=True - ) - - class Meta: - verbose_name = _("Personal note filter") - verbose_name_plural = _("Personal note filters") - ordering = ["identifier"] - - class ExtraMark(ExtensibleModel): """A model for extra marks. diff --git a/aleksis/apps/alsijil/tables.py b/aleksis/apps/alsijil/tables.py index 866da69e0..bd6b47a73 100644 --- a/aleksis/apps/alsijil/tables.py +++ b/aleksis/apps/alsijil/tables.py @@ -4,21 +4,6 @@ import django_tables2 as tables from django_tables2.utils import A -class PersonalNoteFilterTable(tables.Table): - class Meta: - attrs = {"class": "highlight"} - - identifier = tables.Column() - description = tables.Column() - regex = tables.Column() - edit_filter = tables.LinkColumn( - "edit_personal_note_filter", - args=[A("id")], - text=_("Edit"), - attrs={"a": {"class": "btn-flat waves-effect waves-orange"}}, - ) - - class ExtraMarkTable(tables.Table): class Meta: attrs = {"class": "highlight"} diff --git a/aleksis/apps/alsijil/templates/alsijil/personal_note_filter/list.html b/aleksis/apps/alsijil/templates/alsijil/personal_note_filter/list.html deleted file mode 100644 index 3673e60ab..000000000 --- a/aleksis/apps/alsijil/templates/alsijil/personal_note_filter/list.html +++ /dev/null @@ -1,16 +0,0 @@ -{# -*- engine:django -*- #} - -{% extends "core/base.html" %} -{% load i18n %} -{% load render_table from django_tables2 %} - -{% block browser_title %}{% blocktrans %}All personal note filters{% endblocktrans %}{% endblock %} -{% block page_title %}{% blocktrans %}Personal note filters{% endblocktrans %}{% endblock %} - -{% block content %} - <a href="{% url 'create_personal_note_filter' %}" class="waves-effect waves-light green btn"> - <i class="material-icons left">add</i>{% blocktrans %}Add filter{% endblocktrans %} - </a> - - {% render_table personal_note_filters_table %} -{% endblock %} diff --git a/aleksis/apps/alsijil/templates/alsijil/personal_note_filter/manage.html b/aleksis/apps/alsijil/templates/alsijil/personal_note_filter/manage.html deleted file mode 100644 index 427777439..000000000 --- a/aleksis/apps/alsijil/templates/alsijil/personal_note_filter/manage.html +++ /dev/null @@ -1,34 +0,0 @@ -{# -*- engine:django -*- #} -{% extends "core/base.html" %} -{% load material_form i18n static %} - -{% block browser_title %} - {% if personal_note_filter %} - {% trans "Update personal note filter" %} - {% else %} - {% trans "Create personal note filter" %} - {% endif %} -{% endblock %} -{% block page_title %} - {% if personal_note_filter %} - {% trans "Update personal note filter" %} - {% else %} - {% trans "Create personal note filter" %} - {% endif %} -{% endblock %} - - -{% block content %} - <form method="post"> - {% csrf_token %} - {% form form=personal_note_filter_form %}{% endform %} - {% include "core/partials/save_button.html" %} - {% if personal_note_filter %} - <a href="{% url 'delete_personal_note_filter' personal_note_filter.id %}" - class="waves-effect waves-light btn red"> - <i class="material-icons left">delete</i>{% blocktrans %}Delete filter{% endblocktrans %} - </a> - {% endif %} - </form> - -{% endblock %} diff --git a/aleksis/apps/alsijil/templates/alsijil/print/full_register.html b/aleksis/apps/alsijil/templates/alsijil/print/full_register.html index daedc5509..6d0ddbacc 100644 --- a/aleksis/apps/alsijil/templates/alsijil/print/full_register.html +++ b/aleksis/apps/alsijil/templates/alsijil/print/full_register.html @@ -263,29 +263,6 @@ </tr> </table> - {% if personal_note_filters %} - <h5>{% trans 'Statistics on remarks' %}</h5> - <table> - <thead> - <tr> - <th>{% trans 'Description' %}</th> - <th>{% trans 'Count' %}</th> - </tr> - </thead> - - <tbody> - {% for note_filter in personal_note_filters %} - <tr> - <td>{{ note_filter.description }}</td> - {% with "_personal_notes_with_"|add:note_filter.identifier as identifier %} - <td>{{ person|get_dict:identifier }}</td> - {% endwith %} - </tr> - {% endfor %} - </tbody> - </table> - {% endif %} - <h5>{% trans 'Absences and tardiness' %}</h5> <table> <tr> diff --git a/aleksis/apps/alsijil/urls.py b/aleksis/apps/alsijil/urls.py index 12c12bc44..3f6836259 100644 --- a/aleksis/apps/alsijil/urls.py +++ b/aleksis/apps/alsijil/urls.py @@ -21,26 +21,6 @@ urlpatterns = [ "print/group/<int:id_>", views.full_register_group, name="full_register_group" ), path("absence/new", views.register_absence, name="register_absence"), - path( - "filters/list", - views.list_personal_note_filters, - name="list_personal_note_filters", - ), - path( - "filters/create", - views.edit_personal_note_filter, - name="create_personal_note_filter", - ), - path( - "filters/edit/<int:id_>", - views.edit_personal_note_filter, - name="edit_personal_note_filter", - ), - path( - "filters/delete/<int:id_>", - views.delete_personal_note_filter, - name="delete_personal_note_filter", - ), path("extra_marks/", views.ExtraMarkListView.as_view(), name="extra_marks"), path( "extra_marks/create/", diff --git a/aleksis/apps/alsijil/views.py b/aleksis/apps/alsijil/views.py index 1e109d7e5..d97bbc24b 100644 --- a/aleksis/apps/alsijil/views.py +++ b/aleksis/apps/alsijil/views.py @@ -24,13 +24,12 @@ from .forms import ( ExcuseTypeForm, ExtraMarkForm, LessonDocumentationForm, - PersonalNoteFilterForm, PersonalNoteFormSet, RegisterAbsenceForm, SelectForm, ) -from .models import ExcuseType, ExtraMark, LessonDocumentation, PersonalNoteFilter -from .tables import ExcuseTypeTable, ExtraMarkTable, PersonalNoteFilterTable +from .models import ExcuseType, ExtraMark, LessonDocumentation +from .tables import ExcuseTypeTable, ExtraMarkTable def lesson( @@ -392,24 +391,8 @@ def full_register_group(request: HttpRequest, id_: int) -> HttpResponse: } ) - # FIXME Move to manager - personal_note_filters = PersonalNoteFilter.objects.all() - for personal_note_filter in personal_note_filters: - persons = persons.annotate( - **{ - "_personal_notes_with_%s" - % personal_note_filter.identifier: Count( - "personal_notes__remarks", - filter=Q( - personal_notes__remarks__iregex=personal_note_filter.regex - ), - ) - } - ) - context["school_term"] = current_school_term context["persons"] = persons - context["personal_note_filters"] = personal_note_filters context["excuse_types"] = ExcuseType.objects.all() context["extra_marks"] = ExtraMark.objects.all() context["group"] = group @@ -451,59 +434,6 @@ def register_absence(request: HttpRequest) -> HttpResponse: return render(request, "alsijil/absences/register.html", context) -def list_personal_note_filters(request: HttpRequest) -> HttpResponse: - context = {} - - personal_note_filters = PersonalNoteFilter.objects.all() - - # Prepare table - personal_note_filters_table = PersonalNoteFilterTable(personal_note_filters) - RequestConfig(request).configure(personal_note_filters_table) - - context["personal_note_filters_table"] = personal_note_filters_table - - return render(request, "alsijil/personal_note_filter/list.html", context) - - -def edit_personal_note_filter( - request: HttpRequest, id_: Optional["int"] = None -) -> HttpResponse: - context = {} - - if id_: - personal_note_filter = PersonalNoteFilter.objects.get(id=id_) - context["personal_note_filter"] = personal_note_filter - personal_note_filter_form = PersonalNoteFilterForm( - request.POST or None, instance=personal_note_filter - ) - else: - personal_note_filter_form = PersonalNoteFilterForm(request.POST or None) - - if request.method == "POST": - if personal_note_filter_form.is_valid(): - personal_note_filter_form.save(commit=True) - - messages.success(request, _("The filter has been saved")) - return redirect("list_personal_note_filters") - - context["personal_note_filter_form"] = personal_note_filter_form - - return render(request, "alsijil/personal_note_filter/manage.html", context) - - -def delete_personal_note_filter(request: HttpRequest, id_: int) -> HttpResponse: - context = {} - - personal_note_filter = get_object_or_404(PersonalNoteFilter, pk=id_) - - PersonalNoteFilter.objects.filter(pk=id_).delete() - - messages.success(request, _("The filter has been deleted.")) - - context["personal_note_filter"] = personal_note_filter - return redirect("list_personal_note_filters") - - class ExtraMarkListView(SingleTableView, PermissionRequiredMixin): """Table of all extra marks.""" -- GitLab