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

Move child groups assignment view to core

parent b2355be0
No related branches found
No related tags found
1 merge request!15Add views for assigning subjects to groups
from django_filters import FilterSet, CharFilter
from material import Layout, Row
class GroupFilter(FilterSet):
name = CharFilter(lookup_expr="icontains")
short_name = CharFilter(lookup_expr="icontains")
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.form.layout = Layout(Row("name", "short_name"))
......@@ -34,8 +34,6 @@ GroupSubjectFormset = forms.modelformset_factory(
)
class ChildGroupsForm(forms.Form):
child_groups = forms.ModelMultipleChoiceField(queryset=Group.objects.all())
if config.UNTIS_IMPORT_MYSQL_USE_COURSE_GROUPS:
......
......@@ -20,14 +20,5 @@ MENUS = {
"aleksis.core.util.core_helpers.has_person",
],
},
{
"name": _("Link child groups to groups (for UNTIS MySQL import)"),
"url": "untis_groups_child_groups",
"validators": [
"menu_generator.validators.is_authenticated",
"menu_generator.validators.is_superuser",
"aleksis.core.util.core_helpers.has_person",
],
},
]
}
{# -*- engine:django -*- #}
{% extends "core/base.html" %}
{% load i18n material_form %}
{% block browser_title %}{% blocktrans %}Assign child groups to groups{% endblocktrans %}{% endblock %}
{% block page_title %}
{% blocktrans %}Assign child groups to groups{% endblocktrans %}
{% endblock %}
{% block content %}
{% if not page %}
<div class="alert info">
<p>
<i class="material-icons left">info</i>
{% blocktrans %}
You can use this to assign child groups to groups. Please use the filters below to select groups you want to
change and click at "Next".
{% endblocktrans %}
</p>
</div>
<form method="get">
{% csrf_token %}
{% form form=filter.form %}{% endform %}
<button type="submit" class="btn green waves-effect waves-light">
<i class="material-icons left">refresh</i>
{% trans "Update selection" %}
</button>
<a href="{% url "untis_groups_child_groups" %}" class="btn red waves-effect waves-light">
<i class="material-icons left">clear</i>
{% trans "Clear all filters" %}
</a>
</form>
<h5>{% trans "Currently selected groups" %}</h5>
{% for group in filter.qs %}
<div class="chip">
{{ group }}
</div>
{% endfor %}
{% if filter.qs %}
<p>
<form method="post">
{% csrf_token %}
<button class="btn btn-primary waves-effect waves-light" type="submit" name="page" value="1">
{% trans "Start assigning child groups for this groups" %}
<i class="material-icons right">arrow_forward</i>
</button>
</form>
</p>
{% else %}
<div class="alert warning">
<p>
<i class="material-icons left">warning</i>
{% blocktrans %}
Please select some groups in order to go on with assigning.
{% endblocktrans %}
</p>
</div>
{% endif %}
{% else %}
<form method="post">
<input type="hidden" name="old_page" value="{{ page.number }}">
<p class="flow-text">
{% trans "Current group:" %} {{ group }}
</p>
<div class="alert warning">
<p>
<i class="material-icons left">warning</i>
{% blocktrans %}
<strong>Please be careful!</strong><br/>
If you click on "Back" or "Next" the current group assignments are not saved.
If you click on save, you will overwrite all existing child group relations for this group with what you
selected on this page.
{% endblocktrans %}
</p>
</div>
<div class="row">
<p class="left">
{% if page.has_previous %}
<button class="btn grey waves-effect waves-light" name="page" value="{{ page.previous_page_number }}">
<i class="material-icons left">arrow_back</i>
{% trans "Back" %}
</button>
{% endif %}
{% if page.has_next %}
<button class="btn grey waves-effect waves-light" type="submit" name="page"
value="{{ page.next_page_number }}">
{% trans "Next" %}
<i class="material-icons right">arrow_forward</i>
</button>
{% endif %}
</p>
<p class="right">
<button class="btn green waves-effect waves-light" type="submit" name="save">
{% trans "Save" %}
<i class="material-icons left">save</i>
</button>
{% if page.has_next %}
<button class="btn green waves-effect waves-light" type="submit" name="save"
value="{{ page.next_page_number }}">
{% trans "Save and next" %}
<i class="material-icons left">save</i>
</button>
{% endif %}
</p>
</div>
{% csrf_token %}
{% include "components/chips.html" with form_field=form.child_groups %}
<p class="left">
{% if page.has_previous %}
<button class="btn grey waves-effect waves-light" name="page" value="{{ page.previous_page_number }}">
<i class="material-icons left">arrow_back</i>
{% trans "Back" %}
</button>
{% endif %}
{% if page.has_next %}
<button class="btn grey waves-effect waves-light" type="submit" name="page"
value="{{ page.next_page_number }}">
{% trans "Next" %}
<i class="material-icons right">arrow_forward</i>
</button>
{% endif %}
</p>
<p class="right">
<button class="btn green waves-effect waves-light" type="submit" name="save">
{% trans "Save" %}
<i class="material-icons left">save</i>
</button>
{% if page.has_next %}
<button class="btn green waves-effect waves-light" type="submit" name="save"
value="{{ page.next_page_number }}">
{% trans "Save and next" %}
<i class="material-icons left">save</i>
</button>
{% endif %}
</p>
</form>
{% endif %}
{% endblock %}
......@@ -5,5 +5,4 @@ from . import views
urlpatterns = [
path("import/xml/", views.xml_import, name="untis_xml_import"),
path("groups_subjects", views.groups_subjects, name="untis_groups_subjects"),
path("groups_child_groups", views.groups_child_groups, name="untis_groups_child_groups"),
]
......@@ -8,8 +8,7 @@ from django.utils.translation import gettext as _
from aleksis.core.decorators import admin_required
from aleksis.core.models import Group
from .filters import GroupFilter
from .forms import UntisUploadForm, GroupSubjectFormset, ChildGroupsForm
from .forms import UntisUploadForm, GroupSubjectFormset
from .util.xml.xml import untis_import_xml
......@@ -63,38 +62,3 @@ def groups_subjects(request: HttpRequest) -> HttpResponse:
return render(request, "untis/groups_subjects.html", context)
@admin_required
def groups_child_groups(request: HttpRequest) -> HttpResponse:
""" Assign child groups to groups (for matching by MySQL importer) """
context = {}
# Apply filter
filter = GroupFilter(request.GET, queryset=Group.objects.all())
context["filter"] = filter
# Paginate
paginator = Paginator(filter.qs, 1)
page_number = request.POST.get("page", request.POST.get("old_page"))
if page_number:
page = paginator.get_page(page_number)
group = page[0]
if "save" in request.POST:
# Save
form = ChildGroupsForm(request.POST)
form.is_valid()
if "child_groups" in form.cleaned_data:
group.child_groups.set(form.cleaned_data["child_groups"])
group.save()
messages.success(request, _("The child groups were successfully saved."))
else:
# Init form
form = ChildGroupsForm(initial={"child_groups": group.child_groups.all()})
context["paginator"] = paginator
context["page"] = page
context["group"] = group
context["form"] = form
return render(request, "untis/groups_child_groups.html", context)
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