Skip to content
Snippets Groups Projects
Verified Commit a66dc7a9 authored by Jonathan Weth's avatar Jonathan Weth :keyboard:
Browse files

Remove legacy personal notes filters in favor of extra marks

parent e24effa5
No related branches found
No related tags found
1 merge request!68Resolve "Add option to configure extra marks for personal notes"
Pipeline #3105 passed
...@@ -11,13 +11,7 @@ from material import Layout, Row ...@@ -11,13 +11,7 @@ from material import Layout, Row
from aleksis.apps.chronos.managers import TimetableType from aleksis.apps.chronos.managers import TimetableType
from aleksis.core.models import Group, Person from aleksis.core.models import Group, Person
from .models import ( from .models import ExcuseType, ExtraMark, LessonDocumentation, PersonalNote
ExcuseType,
ExtraMark,
LessonDocumentation,
PersonalNote,
PersonalNoteFilter,
)
class LessonDocumentationForm(forms.ModelForm): class LessonDocumentationForm(forms.ModelForm):
...@@ -115,14 +109,6 @@ class RegisterAbsenceForm(forms.Form): ...@@ -115,14 +109,6 @@ class RegisterAbsenceForm(forms.Form):
remarks = forms.CharField(label=_("Remarks"), max_length=30, required=False) 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): class ExtraMarkForm(forms.ModelForm):
layout = Layout("short_name", "name") layout = Layout("short_name", "name")
......
...@@ -30,12 +30,6 @@ MENUS = { ...@@ -30,12 +30,6 @@ MENUS = {
"icon": "rate_review", "icon": "rate_review",
"validators": ["menu_generator.validators.is_superuser"], "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"), "name": _("Excuse types"),
"url": "excuse_types", "url": "excuse_types",
......
# 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",),
]
...@@ -110,29 +110,6 @@ class LessonDocumentation(ExtensibleModel): ...@@ -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): class ExtraMark(ExtensibleModel):
"""A model for extra marks. """A model for extra marks.
......
...@@ -4,21 +4,6 @@ import django_tables2 as tables ...@@ -4,21 +4,6 @@ import django_tables2 as tables
from django_tables2.utils import A 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 ExtraMarkTable(tables.Table):
class Meta: class Meta:
attrs = {"class": "highlight"} attrs = {"class": "highlight"}
......
{# -*- 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 %}
{# -*- 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 %}
...@@ -263,29 +263,6 @@ ...@@ -263,29 +263,6 @@
</tr> </tr>
</table> </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> <h5>{% trans 'Absences and tardiness' %}</h5>
<table> <table>
<tr> <tr>
......
...@@ -21,26 +21,6 @@ urlpatterns = [ ...@@ -21,26 +21,6 @@ urlpatterns = [
"print/group/<int:id_>", views.full_register_group, name="full_register_group" "print/group/<int:id_>", views.full_register_group, name="full_register_group"
), ),
path("absence/new", views.register_absence, name="register_absence"), 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/", views.ExtraMarkListView.as_view(), name="extra_marks"),
path( path(
"extra_marks/create/", "extra_marks/create/",
......
...@@ -24,13 +24,12 @@ from .forms import ( ...@@ -24,13 +24,12 @@ from .forms import (
ExcuseTypeForm, ExcuseTypeForm,
ExtraMarkForm, ExtraMarkForm,
LessonDocumentationForm, LessonDocumentationForm,
PersonalNoteFilterForm,
PersonalNoteFormSet, PersonalNoteFormSet,
RegisterAbsenceForm, RegisterAbsenceForm,
SelectForm, SelectForm,
) )
from .models import ExcuseType, ExtraMark, LessonDocumentation, PersonalNoteFilter from .models import ExcuseType, ExtraMark, LessonDocumentation
from .tables import ExcuseTypeTable, ExtraMarkTable, PersonalNoteFilterTable from .tables import ExcuseTypeTable, ExtraMarkTable
def lesson( def lesson(
...@@ -392,24 +391,8 @@ def full_register_group(request: HttpRequest, id_: int) -> HttpResponse: ...@@ -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["school_term"] = current_school_term
context["persons"] = persons context["persons"] = persons
context["personal_note_filters"] = personal_note_filters
context["excuse_types"] = ExcuseType.objects.all() context["excuse_types"] = ExcuseType.objects.all()
context["extra_marks"] = ExtraMark.objects.all() context["extra_marks"] = ExtraMark.objects.all()
context["group"] = group context["group"] = group
...@@ -451,59 +434,6 @@ def register_absence(request: HttpRequest) -> HttpResponse: ...@@ -451,59 +434,6 @@ def register_absence(request: HttpRequest) -> HttpResponse:
return render(request, "alsijil/absences/register.html", context) 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): class ExtraMarkListView(SingleTableView, PermissionRequiredMixin):
"""Table of all extra marks.""" """Table of all extra marks."""
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment