From 13d911291ac51efc5be666454693d6181c37c8e3 Mon Sep 17 00:00:00 2001
From: Jonathan Weth <git@jonathanweth.de>
Date: Mon, 25 Jan 2021 21:24:55 +0100
Subject: [PATCH] Rename class role to group role

---
 aleksis/apps/alsijil/forms.py                 | 13 +++-
 aleksis/apps/alsijil/menus.py                 |  6 +-
 ...009_class_roles.py => 0009_group_roles.py} | 53 +++++++++++---
 aleksis/apps/alsijil/models.py                | 27 ++++---
 aleksis/apps/alsijil/preferences.py           |  6 +-
 aleksis/apps/alsijil/rules.py                 | 30 ++++----
 aleksis/apps/alsijil/tables.py                | 10 +--
 .../{class_role => group_role}/create.html    |  4 +-
 .../{class_role => group_role}/edit.html      |  4 +-
 .../{class_role => group_role}/list.html      | 12 ++--
 .../{class_role => group_role}/warning.html   |  0
 aleksis/apps/alsijil/urls.py                  | 12 ++--
 aleksis/apps/alsijil/views.py                 | 72 ++++++++++---------
 13 files changed, 147 insertions(+), 102 deletions(-)
 rename aleksis/apps/alsijil/migrations/{0009_class_roles.py => 0009_group_roles.py} (94%)
 rename aleksis/apps/alsijil/templates/alsijil/{class_role => group_role}/create.html (71%)
 rename aleksis/apps/alsijil/templates/alsijil/{class_role => group_role}/edit.html (71%)
 rename aleksis/apps/alsijil/templates/alsijil/{class_role => group_role}/list.html (56%)
 rename aleksis/apps/alsijil/templates/alsijil/{class_role => group_role}/warning.html (100%)

diff --git a/aleksis/apps/alsijil/forms.py b/aleksis/apps/alsijil/forms.py
index 5d0c16129..348b51bf8 100644
--- a/aleksis/apps/alsijil/forms.py
+++ b/aleksis/apps/alsijil/forms.py
@@ -15,7 +15,14 @@ from aleksis.apps.chronos.models import TimePeriod
 from aleksis.core.models import Group, Person
 from aleksis.core.util.predicates import check_global_permission
 
-from .models import ClassRole, ExcuseType, ExtraMark, LessonDocumentation, PersonalNote
+from .models import (
+    GroupRole,
+    GroupRoleAssignment,
+    ExcuseType,
+    ExtraMark,
+    LessonDocumentation,
+    PersonalNote,
+)
 
 
 class LessonDocumentationForm(forms.ModelForm):
@@ -164,9 +171,9 @@ class ExcuseTypeForm(forms.ModelForm):
         fields = ["short_name", "name"]
 
 
-class ClassRoleForm(forms.ModelForm):
+class GroupRoleForm(forms.ModelForm):
     layout = Layout("name", "icon", "colour")
 
     class Meta:
-        model = ClassRole
+        model = GroupRole
         fields = ["name", "icon", "colour"]
diff --git a/aleksis/apps/alsijil/menus.py b/aleksis/apps/alsijil/menus.py
index 6267dc8bc..a5b5b687a 100644
--- a/aleksis/apps/alsijil/menus.py
+++ b/aleksis/apps/alsijil/menus.py
@@ -90,13 +90,13 @@ MENUS = {
                     ],
                 },
                 {
-                    "name": _("Manage class roles"),
-                    "url": "class_roles",
+                    "name": _("Manage group roles"),
+                    "url": "group_roles",
                     "icon": "assignment_ind",
                     "validators": [
                         (
                             "aleksis.core.util.predicates.permission_validator",
-                            "alsijil.view_classroles",
+                            "alsijil.view_grouproles",
                         ),
                     ],
                 },
diff --git a/aleksis/apps/alsijil/migrations/0009_class_roles.py b/aleksis/apps/alsijil/migrations/0009_group_roles.py
similarity index 94%
rename from aleksis/apps/alsijil/migrations/0009_class_roles.py
rename to aleksis/apps/alsijil/migrations/0009_group_roles.py
index 8e2e11326..ee48b033e 100644
--- a/aleksis/apps/alsijil/migrations/0009_class_roles.py
+++ b/aleksis/apps/alsijil/migrations/0009_group_roles.py
@@ -1,4 +1,4 @@
-# Generated by Django 3.1.5 on 2021-01-21 20:25
+# Generated by Django 3.1.5 on 2021-01-25 20:18
 
 import django.contrib.sites.managers
 from django.db import migrations, models
@@ -15,7 +15,7 @@ class Migration(migrations.Migration):
 
     operations = [
         migrations.CreateModel(
-            name='ClassRole',
+            name='GroupRole',
             fields=[
                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                 ('extended_data', models.JSONField(default=dict, editable=False)),
@@ -25,28 +25,61 @@ class Migration(migrations.Migration):
                 ('site', models.ForeignKey(default=1, editable=False, on_delete=django.db.models.deletion.CASCADE, to='sites.site')),
             ],
             options={
-                'verbose_name': 'Class role',
-                'verbose_name_plural': 'Class roles',
+                'verbose_name': 'Group role',
+                'verbose_name_plural': 'Group roles',
             },
             managers=[
                 ('objects', django.contrib.sites.managers.CurrentSiteManager()),
             ],
         ),
+        migrations.AlterModelOptions(
+            name='lessondocumentation',
+            options={'ordering': ['year', 'week', 'lesson_period__period__weekday', 'lesson_period__period__period'], 'verbose_name': 'Lesson documentation', 'verbose_name_plural': 'Lesson documentations'},
+        ),
+        migrations.AlterModelOptions(
+            name='personalnote',
+            options={'ordering': ['year', 'week', 'lesson_period__period__weekday', 'lesson_period__period__period', 'person__last_name', 'person__first_name'], 'verbose_name': 'Personal note', 'verbose_name_plural': 'Personal notes'},
+        ),
+        migrations.AlterModelManagers(
+            name='personalnote',
+            managers=[
+            ],
+        ),
+        migrations.AlterField(
+            model_name='excusetype',
+            name='extended_data',
+            field=models.JSONField(default=dict, editable=False),
+        ),
+        migrations.AlterField(
+            model_name='extramark',
+            name='extended_data',
+            field=models.JSONField(default=dict, editable=False),
+        ),
+        migrations.AlterField(
+            model_name='lessondocumentation',
+            name='extended_data',
+            field=models.JSONField(default=dict, editable=False),
+        ),
+        migrations.AlterField(
+            model_name='personalnote',
+            name='extended_data',
+            field=models.JSONField(default=dict, editable=False),
+        ),
         migrations.CreateModel(
-            name='ClassRoleAssignment',
+            name='GroupRoleAssignment',
             fields=[
                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                 ('extended_data', models.JSONField(default=dict, editable=False)),
                 ('date_start', models.DateField(verbose_name='Start date')),
                 ('date_end', models.DateField(blank=True, help_text='Can be left empty if end date is not clear yet', null=True, verbose_name='End date')),
-                ('person', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='class_roles', to='core.person', verbose_name='Assigned person')),
-                ('role', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='assignments', to='alsijil.classrole', verbose_name='Class role')),
-                ('group', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='class_roles', to='core.group', verbose_name='Group')),
+                ('groups', models.ManyToManyField(related_name='group_roles', to='core.Group', verbose_name='Groups')),
+                ('person', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='group_roles', to='core.person', verbose_name='Assigned person')),
+                ('role', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='assignments', to='alsijil.grouprole', verbose_name='Group role')),
                 ('site', models.ForeignKey(default=1, editable=False, on_delete=django.db.models.deletion.CASCADE, to='sites.site')),
             ],
             options={
-                'verbose_name': 'Class role assignment',
-                'verbose_name_plural': 'Class role assignments',
+                'verbose_name': 'Group role assignment',
+                'verbose_name_plural': 'Group role assignments',
             },
             managers=[
                 ('objects', django.contrib.sites.managers.CurrentSiteManager()),
diff --git a/aleksis/apps/alsijil/models.py b/aleksis/apps/alsijil/models.py
index ada2135be..440e12c57 100644
--- a/aleksis/apps/alsijil/models.py
+++ b/aleksis/apps/alsijil/models.py
@@ -233,7 +233,7 @@ class ExtraMark(ExtensibleModel):
         verbose_name_plural = _("Extra marks")
 
 
-class ClassRole(ExtensibleModel):
+class GroupRole(ExtensibleModel):
     name = models.CharField(max_length=255, verbose_name=_("Name"))
     icon = models.CharField(max_length=50, blank=True, choices=ICONS, verbose_name=_("Icon"))
     colour = models.CharField(max_length=50, blank=True, choices=COLOURS, verbose_name=_("Colour"))
@@ -242,30 +242,27 @@ class ClassRole(ExtensibleModel):
         return self.name
 
     class Meta:
-        verbose_name = _("Class role")
-        verbose_name_plural = _("Class roles")
+        verbose_name = _("Group role")
+        verbose_name_plural = _("Group roles")
 
 
-class ClassRoleAssignment(ExtensibleModel):
+class GroupRoleAssignment(ExtensibleModel):
     role = models.ForeignKey(
-        ClassRole,
+        GroupRole,
         on_delete=models.CASCADE,
         related_name="assignments",
-        verbose_name=_("Class role"),
+        verbose_name=_("Group role"),
     )
     person = models.ForeignKey(
         "core.Person",
         on_delete=models.CASCADE,
-        related_name="class_roles",
+        related_name="group_roles",
         verbose_name=_("Assigned person"),
     )
-    group = models.ForeignKey(
+    groups = models.ManyToManyField(
         "core.Group",
-        on_delete=models.CASCADE,
-        related_name="class_roles",
-        verbose_name=_("Group"),
-        blank=True,
-        null=True,
+        related_name="group_roles",
+        verbose_name=_("Groups"),
     )
     date_start = models.DateField(verbose_name=_("Start date"))
     date_end = models.DateField(
@@ -280,8 +277,8 @@ class ClassRoleAssignment(ExtensibleModel):
         return f"{self.role}: {self.person}, {date_format(self.date_start)}–{date_end}"
 
     class Meta:
-        verbose_name = _("Class role assignment")
-        verbose_name_plural = _("Class role assignments")
+        verbose_name = _("Group role assignment")
+        verbose_name_plural = _("Group role assignments")
 
 
 class AlsijilGlobalPermissions(ExtensibleModel):
diff --git a/aleksis/apps/alsijil/preferences.py b/aleksis/apps/alsijil/preferences.py
index 055d5c997..0e9706da1 100644
--- a/aleksis/apps/alsijil/preferences.py
+++ b/aleksis/apps/alsijil/preferences.py
@@ -69,8 +69,8 @@ class AllowEntriesInHolidays(BooleanPreference):
 
 
 @site_preferences_registry.register
-class ActivateClassRoles(BooleanPreference):
+class ActivateGroupRoles(BooleanPreference):
     section = alsijil
-    name = "activate_class_roles"
+    name = "activate_group_roles"
     default = True
-    verbose_name = _("Activate support for creating and assigning class roles")
+    verbose_name = _("Activate support for creating and assigning group roles")
diff --git a/aleksis/apps/alsijil/rules.py b/aleksis/apps/alsijil/rules.py
index 0d74385a3..0273c2c74 100644
--- a/aleksis/apps/alsijil/rules.py
+++ b/aleksis/apps/alsijil/rules.py
@@ -220,24 +220,24 @@ delete_extramark_predicate = view_extramarks_predicate & has_global_perm("alsiji
 add_perm("alsijil.delete_extramark", delete_extramark_predicate)
 
 
-# View class role list
-view_class_roles_predicate = (
+# View group role list
+view_group_roles_predicate = (
     has_person
-    & is_site_preference_set("alsijil", "activate_class_roles")
-    & has_global_perm("alsijil.view_classrole")
+    & is_site_preference_set("alsijil", "activate_group_roles")
+    & has_global_perm("alsijil.view_grouprole")
 )
-add_perm("alsijil.view_classroles", view_class_roles_predicate)
+add_perm("alsijil.view_grouproles", view_group_roles_predicate)
 
-# Add class role
-add_class_role_predicate = view_class_roles_predicate & has_global_perm("alsijil.add_classrole")
-add_perm("alsijil.add_classrole", add_class_role_predicate)
+# Add group role
+add_group_role_predicate = view_group_roles_predicate & has_global_perm("alsijil.add_grouprole")
+add_perm("alsijil.add_grouprole", add_group_role_predicate)
 
-# Edit class role
-edit_class_role_predicate = view_class_roles_predicate & has_global_perm("alsijil.change_classrole")
-add_perm("alsijil.edit_classrole", edit_class_role_predicate)
+# Edit group role
+edit_group_role_predicate = view_group_roles_predicate & has_global_perm("alsijil.change_grouprole")
+add_perm("alsijil.edit_grouprole", edit_group_role_predicate)
 
-# Delete class role
-delete_class_role_predicate = view_class_roles_predicate & has_global_perm(
-    "alsijil.delete_classrole"
+# Delete group role
+delete_group_role_predicate = view_group_roles_predicate & has_global_perm(
+    "alsijil.delete_grouprole"
 )
-add_perm("alsijil.delete_classrole", delete_class_role_predicate)
+add_perm("alsijil.delete_grouprole", delete_group_role_predicate)
diff --git a/aleksis/apps/alsijil/tables.py b/aleksis/apps/alsijil/tables.py
index 93d17ee0f..85c819119 100644
--- a/aleksis/apps/alsijil/tables.py
+++ b/aleksis/apps/alsijil/tables.py
@@ -51,19 +51,19 @@ class ExcuseTypeTable(tables.Table):
             self.columns.hide("delete")
 
 
-class ClassRoleTable(tables.Table):
+class GroupRoleTable(tables.Table):
     class Meta:
         attrs = {"class": "highlight"}
 
     name = tables.LinkColumn("edit_excuse_type", args=[A("id")])
     edit = tables.LinkColumn(
-        "edit_class_role",
+        "edit_group_role",
         args=[A("id")],
         text=_("Edit"),
         attrs={"a": {"class": "btn-flat waves-effect waves-orange orange-text"}},
     )
     delete = tables.LinkColumn(
-        "delete_class_role",
+        "delete_group_role",
         args=[A("id")],
         text=_("Delete"),
         attrs={"a": {"class": "btn-flat waves-effect waves-red red-text"}},
@@ -76,7 +76,7 @@ class ClassRoleTable(tables.Table):
         return render_to_string("components/materialize-chips.html", context)
 
     def before_render(self, request):
-        if not request.user.has_perm("alsijil.edit_classrole"):
+        if not request.user.has_perm("alsijil.edit_grouprole"):
             self.columns.hide("edit")
-        if not request.user.has_perm("alsijil.delete_classrole"):
+        if not request.user.has_perm("alsijil.delete_grouprole"):
             self.columns.hide("delete")
diff --git a/aleksis/apps/alsijil/templates/alsijil/class_role/create.html b/aleksis/apps/alsijil/templates/alsijil/group_role/create.html
similarity index 71%
rename from aleksis/apps/alsijil/templates/alsijil/class_role/create.html
rename to aleksis/apps/alsijil/templates/alsijil/group_role/create.html
index 096d34ed9..5f83f575f 100644
--- a/aleksis/apps/alsijil/templates/alsijil/class_role/create.html
+++ b/aleksis/apps/alsijil/templates/alsijil/group_role/create.html
@@ -3,8 +3,8 @@
 {% extends "core/base.html" %}
 {% load material_form i18n %}
 
-{% block browser_title %}{% blocktrans %}Create class role{% endblocktrans %}{% endblock %}
-{% block page_title %}{% blocktrans %}Create class role{% endblocktrans %}{% endblock %}
+{% block browser_title %}{% blocktrans %}Create group role{% endblocktrans %}{% endblock %}
+{% block page_title %}{% blocktrans %}Create group role{% endblocktrans %}{% endblock %}
 
 {% block content %}
   <form method="post">
diff --git a/aleksis/apps/alsijil/templates/alsijil/class_role/edit.html b/aleksis/apps/alsijil/templates/alsijil/group_role/edit.html
similarity index 71%
rename from aleksis/apps/alsijil/templates/alsijil/class_role/edit.html
rename to aleksis/apps/alsijil/templates/alsijil/group_role/edit.html
index b01aa3dc9..6e2a12fb3 100644
--- a/aleksis/apps/alsijil/templates/alsijil/class_role/edit.html
+++ b/aleksis/apps/alsijil/templates/alsijil/group_role/edit.html
@@ -3,8 +3,8 @@
 {% extends "core/base.html" %}
 {% load material_form i18n %}
 
-{% block browser_title %}{% blocktrans %}Edit class role{% endblocktrans %}{% endblock %}
-{% block page_title %}{% blocktrans %}Edit class role{% endblocktrans %}{% endblock %}
+{% block browser_title %}{% blocktrans %}Edit group role{% endblocktrans %}{% endblock %}
+{% block page_title %}{% blocktrans %}Edit group role{% endblocktrans %}{% endblock %}
 
 {% block content %}
 
diff --git a/aleksis/apps/alsijil/templates/alsijil/class_role/list.html b/aleksis/apps/alsijil/templates/alsijil/group_role/list.html
similarity index 56%
rename from aleksis/apps/alsijil/templates/alsijil/class_role/list.html
rename to aleksis/apps/alsijil/templates/alsijil/group_role/list.html
index 146b65013..f3e4a487e 100644
--- a/aleksis/apps/alsijil/templates/alsijil/class_role/list.html
+++ b/aleksis/apps/alsijil/templates/alsijil/group_role/list.html
@@ -5,15 +5,15 @@
 {% load i18n rules %}
 {% load render_table from django_tables2 %}
 
-{% block browser_title %}{% blocktrans %}Class roles{% endblocktrans %}{% endblock %}
-{% block page_title %}{% blocktrans %}Class roles{% endblocktrans %}{% endblock %}
+{% block browser_title %}{% blocktrans %}Group roles{% endblocktrans %}{% endblock %}
+{% block page_title %}{% blocktrans %}Group roles{% endblocktrans %}{% endblock %}
 
 {% block content %}
-  {% has_perm "alsijil.add_classrole" user as add_class_role %}
-  {% if add_class_role %}
-    <a class="btn green waves-effect waves-light" href="{% url 'create_class_role' %}">
+  {% has_perm "alsijil.add_grouprole" user as add_group_role %}
+  {% if add_group_role %}
+    <a class="btn green waves-effect waves-light" href="{% url 'create_group_role' %}">
       <i class="material-icons left">add</i>
-      {% trans "Create class role" %}
+      {% trans "Create group role" %}
     </a>
   {% endif %}
 
diff --git a/aleksis/apps/alsijil/templates/alsijil/class_role/warning.html b/aleksis/apps/alsijil/templates/alsijil/group_role/warning.html
similarity index 100%
rename from aleksis/apps/alsijil/templates/alsijil/class_role/warning.html
rename to aleksis/apps/alsijil/templates/alsijil/group_role/warning.html
diff --git a/aleksis/apps/alsijil/urls.py b/aleksis/apps/alsijil/urls.py
index 752f5b8e9..cb9b45dac 100644
--- a/aleksis/apps/alsijil/urls.py
+++ b/aleksis/apps/alsijil/urls.py
@@ -49,12 +49,12 @@ urlpatterns = [
         views.ExcuseTypeDeleteView.as_view(),
         name="delete_excuse_type",
     ),
-    path("class_roles/", views.ClassRoleListView.as_view(), name="class_roles"),
-    path("class_roles/create/", views.ClassRoleCreateView.as_view(), name="create_class_role"),
-    path("class_roles/<int:pk>/edit/", views.ClassRoleEditView.as_view(), name="edit_class_role",),
+    path("group_roles/", views.GroupRoleListView.as_view(), name="group_roles"),
+    path("group_roles/create/", views.GroupRoleCreateView.as_view(), name="create_group_role"),
+    path("group_roles/<int:pk>/edit/", views.GroupRoleEditView.as_view(), name="edit_group_role",),
     path(
-        "class_roles/<int:pk>/delete/",
-        views.ClassRoleDeleteView.as_view(),
-        name="delete_class_role",
+        "group_roles/<int:pk>/delete/",
+        views.GroupRoleDeleteView.as_view(),
+        name="delete_group_role",
     ),
 ]
diff --git a/aleksis/apps/alsijil/views.py b/aleksis/apps/alsijil/views.py
index 8803a8851..dac92a9f9 100644
--- a/aleksis/apps/alsijil/views.py
+++ b/aleksis/apps/alsijil/views.py
@@ -1,5 +1,5 @@
 from datetime import date, datetime, timedelta
-from typing import Optional
+from typing import Any, Dict, Optional
 
 from django.core.exceptions import PermissionDenied
 from django.db.models import Count, Exists, OuterRef, Prefetch, Q, Subquery, Sum
@@ -27,7 +27,8 @@ from aleksis.core.util import messages
 from aleksis.core.util.core_helpers import get_site_preferences, objectgetter_optional
 
 from .forms import (
-    ClassRoleForm,
+    AssignGroupRoleForm,
+    GroupRoleForm,
     ExcuseTypeForm,
     ExtraMarkForm,
     LessonDocumentationForm,
@@ -35,8 +36,15 @@ from .forms import (
     RegisterAbsenceForm,
     SelectForm,
 )
-from .models import ClassRole, ExcuseType, ExtraMark, LessonDocumentation, PersonalNote
-from .tables import ClassRoleTable, ExcuseTypeTable, ExtraMarkTable
+from .models import (
+    GroupRole,
+    GroupRoleAssignment,
+    ExcuseType,
+    ExtraMark,
+    LessonDocumentation,
+    PersonalNote,
+)
+from .tables import GroupRoleTable, ExcuseTypeTable, ExtraMarkTable
 from .util.alsijil_helpers import get_lesson_period_by_pk, get_timetable_instance_by_pk
 
 
@@ -852,45 +860,45 @@ class ExcuseTypeDeleteView(PermissionRequiredMixin, RevisionMixin, AdvancedDelet
     success_message = _("The excuse type has been deleted.")
 
 
-class ClassRoleListView(PermissionRequiredMixin, SingleTableView):
-    """Table of all class roles."""
+class GroupRoleListView(PermissionRequiredMixin, SingleTableView):
+    """Table of all group roles."""
 
-    model = ClassRole
-    table_class = ClassRoleTable
-    permission_required = "alsijil.view_classroles"
-    template_name = "alsijil/class_role/list.html"
+    model = GroupRole
+    table_class = GroupRoleTable
+    permission_required = "alsijil.view_grouproles"
+    template_name = "alsijil/group_role/list.html"
 
 
 @method_decorator(never_cache, name="dispatch")
-class ClassRoleCreateView(PermissionRequiredMixin, AdvancedCreateView):
-    """Create view for class roles."""
+class GroupRoleCreateView(PermissionRequiredMixin, AdvancedCreateView):
+    """Create view for group roles."""
 
-    model = ClassRole
-    form_class = ClassRoleForm
-    permission_required = "alsijil.add_classrole"
-    template_name = "alsijil/class_role/create.html"
-    success_url = reverse_lazy("class_roles")
-    success_message = _("The class role has been created.")
+    model = GroupRole
+    form_class = GroupRoleForm
+    permission_required = "alsijil.add_grouprole"
+    template_name = "alsijil/group_role/create.html"
+    success_url = reverse_lazy("group_roles")
+    success_message = _("The group role has been created.")
 
 
 @method_decorator(never_cache, name="dispatch")
-class ClassRoleEditView(PermissionRequiredMixin, AdvancedEditView):
-    """Edit view for class roles."""
+class GroupRoleEditView(PermissionRequiredMixin, AdvancedEditView):
+    """Edit view for group roles."""
 
-    model = ClassRole
-    form_class = ClassRoleForm
-    permission_required = "alsijil.edit_classrole"
-    template_name = "alsijil/class_role/edit.html"
-    success_url = reverse_lazy("class_roles")
-    success_message = _("The class role has been saved.")
+    model = GroupRole
+    form_class = GroupRoleForm
+    permission_required = "alsijil.edit_grouprole"
+    template_name = "alsijil/group_role/edit.html"
+    success_url = reverse_lazy("group_roles")
+    success_message = _("The group role has been saved.")
 
 
 @method_decorator(never_cache, "dispatch")
-class ClassRoleDeleteView(PermissionRequiredMixin, RevisionMixin, AdvancedDeleteView):
-    """Delete view for class roles."""
+class GroupRoleDeleteView(PermissionRequiredMixin, RevisionMixin, AdvancedDeleteView):
+    """Delete view for group roles."""
 
-    model = ClassRole
-    permission_required = "alsijil.delete_classrole"
+    model = GroupRole
+    permission_required = "alsijil.delete_grouprole"
     template_name = "core/pages/delete.html"
-    success_url = reverse_lazy("class_roles")
-    success_message = _("The class role has been deleted.")
+    success_url = reverse_lazy("group_roles")
+    success_message = _("The group role has been deleted.")
-- 
GitLab