From e0977c4368963a79c1ceb4aac175614aa65e6084 Mon Sep 17 00:00:00 2001 From: Tom Teichler <tom.teichler@teckids.org> Date: Thu, 12 May 2022 22:49:43 +0200 Subject: [PATCH] Rewrite view logic --- aleksis/apps/paweljong/forms.py | 15 ------ aleksis/apps/paweljong/tables.py | 17 +++++++ .../paweljong/event/persons_group.html | 20 ++++++++ .../paweljong/person_group_wizard.html | 36 -------------- aleksis/apps/paweljong/urls.py | 11 +---- aleksis/apps/paweljong/views.py | 48 ++++++++----------- 6 files changed, 59 insertions(+), 88 deletions(-) create mode 100644 aleksis/apps/paweljong/templates/paweljong/event/persons_group.html delete mode 100644 aleksis/apps/paweljong/templates/paweljong/person_group_wizard.html diff --git a/aleksis/apps/paweljong/forms.py b/aleksis/apps/paweljong/forms.py index 0f2bfce..2777d22 100644 --- a/aleksis/apps/paweljong/forms.py +++ b/aleksis/apps/paweljong/forms.py @@ -491,21 +491,6 @@ class RegistrationStatesForm(forms.ModelForm): exclude = [] -class PersonGroupFormGroup(forms.Form): - - layout = Layout("group") - - group = forms.ModelChoiceField( - label=_("Group"), - queryset=Group.objects.all(), - required=True, - widget=ModelSelect2Widget( - search_fields=["name__icontains"], - attrs={"data-minimum-input-length": 0, "class": "browser-default"}, - ), - ) - - class PersonGroupFormPerson(forms.Form): layout = Layout("username") diff --git a/aleksis/apps/paweljong/tables.py b/aleksis/apps/paweljong/tables.py index 0005641..afd3534 100644 --- a/aleksis/apps/paweljong/tables.py +++ b/aleksis/apps/paweljong/tables.py @@ -126,3 +126,20 @@ class RegistrationStatesTable(tables.Table): def render_name(self, value, record): context = dict(state=record) return render_to_string("paweljong/registration_state/chip.html", context) + + +class ChildGroupsTable(tables.Table): + """Table to list groups.""" + + class Meta: + attrs = {"class": "highlight"} + + name = tables.LinkColumn("group_by_id", args=[A("id")]) + short_name = tables.LinkColumn("group_by_id", args=[A("id")]) + + add_persons = tables.LinkColumn( + "add_persons_to_group", + args=[A("id")], + verbose_name=_("Add persons"), + text=_("Add persons"), + ) diff --git a/aleksis/apps/paweljong/templates/paweljong/event/persons_group.html b/aleksis/apps/paweljong/templates/paweljong/event/persons_group.html new file mode 100644 index 0000000..5819aa8 --- /dev/null +++ b/aleksis/apps/paweljong/templates/paweljong/event/persons_group.html @@ -0,0 +1,20 @@ +{% extends "core/base.html" %} +{% load material_form i18n any_js %} + +{% block page_title %}{% blocktrans %}Add person to group{% endblocktrans %}{% endblock %} +{% block browser_title %}{% blocktrans %}Add person to group{% endblocktrans %}{% endblock %} + +{% block extra_head %} + {{ form.media.css }} +{% endblock %} + +{% block content %} + + <form method="post"> + {% csrf_token %} + {% form form=form %}{% form %} + {% include "core/partials/save_button.html" %} + </form> + {{ form.media.js }} + +{% endblock %} diff --git a/aleksis/apps/paweljong/templates/paweljong/person_group_wizard.html b/aleksis/apps/paweljong/templates/paweljong/person_group_wizard.html deleted file mode 100644 index 08d4672..0000000 --- a/aleksis/apps/paweljong/templates/paweljong/person_group_wizard.html +++ /dev/null @@ -1,36 +0,0 @@ -{% extends "core/base.html" %} -{% load material_form i18n %} - -{% block browser_title %}{% trans "Add person to group" %}{% endblock %} -{% block page_title %}{% trans "Add person to group" %}{% endblock %} - -{% block content %} - - <form method="post"> - {% csrf_token %} - {{ wizard.form.media }} - {{ wizard.management_form }} - {% if wizard.form.forms %} - {{ wizard.form.management_form }} - {% for form in wizard.form.forms %} - {% form form=form %}{% endform %} - {% endfor %} - {% else %} - {% form form=wizard.form %}{% endform %} - {% endif %} - - {% if wizard.steps.prev %} - <button type="submit" value="{{ wizard.steps.first }}" class="btn waves-effect waves-light color-primary" name="wizard_goto_step"> - <i class="material-icons left">first_page</i> - {% trans "first step" %} - </button> - <button type="submit" value="{{ wizard.steps.prev }}" class="btn waves-effect waves-light color-secondary" name="wizard_goto_step"> - <i class="material-icons left">arrow_back_ios</i> - {% trans "previous step" %} - </button> - {% endif %} - {% trans "Next" as caption %} - {% include "core/partials/save_button.html" with caption=caption icon="navigate_next" %} - </form> - -{% endblock %} diff --git a/aleksis/apps/paweljong/urls.py b/aleksis/apps/paweljong/urls.py index 0fa603d..339c71d 100644 --- a/aleksis/apps/paweljong/urls.py +++ b/aleksis/apps/paweljong/urls.py @@ -4,8 +4,6 @@ from aleksis.apps.postbuero.forms import MailAddForm from . import views from .forms import ( - PersonGroupFormGroup, - PersonGroupFormPerson, RegisterEventAccount, RegisterEventAdditional, RegisterEventConsent, @@ -37,11 +35,6 @@ account_conditions = { "email": views.is_email_needed, } -add_persons_to_group_forms = [ - ("group", PersonGroupFormGroup), - ("person", PersonGroupFormPerson), -] - urlpatterns = [ path("event/<slug:slug>/edit", views.EditEventView.as_view(), name="edit_event_by_slug"), path( @@ -50,8 +43,8 @@ urlpatterns = [ name="register_event_by_slug", ), path( - "group_persons/add", - views.PersonGroupWizardView.as_view(add_persons_to_group_forms), + "group_persons/<int:pk>/add", + views.PersonGroupView.as_view(), name="add_persons_to_group", ), path("event/<slug:slug>", views.EventFullView.as_view(), name="event_by_name"), diff --git a/aleksis/apps/paweljong/views.py b/aleksis/apps/paweljong/views.py index fb9f3e1..b032c06 100644 --- a/aleksis/apps/paweljong/views.py +++ b/aleksis/apps/paweljong/views.py @@ -24,8 +24,8 @@ from templated_email import send_templated_mail from aleksis.apps.postbuero.models import MailAddress from aleksis.core.mixins import AdvancedCreateView, AdvancedDeleteView, AdvancedEditView -from aleksis.core.tables import AdditionalFieldsTable, GroupsTable -from aleksis.core.models import Activity, Person, Group +from aleksis.core.models import Activity, Group, Person +from aleksis.core.tables import AdditionalFieldsTable from aleksis.core.util import messages from aleksis.core.util.core_helpers import get_site_preferences, objectgetter_optional @@ -37,11 +37,13 @@ from .forms import ( EditTermForm, EditVoucherForm, GenerateListForm, + PersonGroupFormPerson, RegistrationNotificationForm, RegistrationStatesForm, ) from .models import Event, EventRegistration, InfoMailing, RegistrationState, Terms, Voucher from .tables import ( + ChildGroupsTable, EventRegistrationsTable, InfoMailingsTable, ManageEventsTable, @@ -903,7 +905,7 @@ class EventDetailView(PermissionRequiredMixin, DetailView): # Child groups table child_groups = self.object.linked_group.child_groups.all() - child_groups_table = GroupsTable(child_groups) + child_groups_table = ChildGroupsTable(child_groups) RequestConfig(self.request).configure(child_groups_table) context["child_groups_table"] = child_groups_table @@ -916,34 +918,24 @@ class EventDetailView(PermissionRequiredMixin, DetailView): return context -class PersonGroupWizardView(SessionWizardView): - template_name = "paweljong/person_group_wizard.html" - file_storage = settings.DEFAULT_FILE_STORAGE - - def get_form_initial(self, step): +class PersonGroupView(PermissionRequiredMixin, FormView): - initial = self.initial_dict.get(step, {}) + template_name = "paweljong/event/persons_group.html" + permission_required = "paweljong.add_persons_to_group_rule" + form_class = PersonGroupFormPerson - if step == "group": - if self.request.session["person_group_group"]: - group = Group.objects.get(id=self.request.session["person_group_group"]) - initial.update( - { - "group": group, - } - ) - - return self.initial_dict.get(step, initial) + def form_valid(self, form): - def done(self, form_list, **kwargs): + group = Group.objects.get(id=self.kwargs["pk"]) - cleaned_data_group = self.get_cleaned_data_for_step("group") - cleaned_data_person = self.get_cleaned_data_for_step("person") + try: + person = Person.objects.get(user__username=form.cleaned_data["username"]) + group.members.add(person) + messages.success(self.request, _(f"Person {person} added successfully!")) + except Person.DoesNotExist: + messages.error(self.request, _("Person does not exist!")) - # Add person to group - group = cleaned_data_group["group"] - self.request.session["person_group_group"] = group.id - person = Person.objects.get(user__username=cleaned_data_person["username"]) - group.members.add(person) + return super().form_valid(self) - return redirect("add_persons_to_group") + def get_success_url(self): + return reverse("add_persons_to_group", kwargs={"pk": self.kwargs["pk"]}) -- GitLab