From ee8ff909a6f5c7cb285b010ac19c3b1c772ca613 Mon Sep 17 00:00:00 2001 From: Tom Teichler <tom.teichler@teckids.org> Date: Thu, 12 May 2022 22:26:43 +0200 Subject: [PATCH] Add form to add persons to group --- aleksis/apps/paweljong/forms.py | 22 ++++++++++++ .../paweljong/person_group_wizard.html | 36 +++++++++++++++++++ aleksis/apps/paweljong/urls.py | 12 +++++++ aleksis/apps/paweljong/views.py | 35 +++++++++++++++++- 4 files changed, 104 insertions(+), 1 deletion(-) create 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 0a24683..86583af 100644 --- a/aleksis/apps/paweljong/forms.py +++ b/aleksis/apps/paweljong/forms.py @@ -489,3 +489,25 @@ class RegistrationStatesForm(forms.ModelForm): class Meta: model = RegistrationState 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") + + username = forms.CharField(required=True, label=_("Person")) diff --git a/aleksis/apps/paweljong/templates/paweljong/person_group_wizard.html b/aleksis/apps/paweljong/templates/paweljong/person_group_wizard.html new file mode 100644 index 0000000..08d4672 --- /dev/null +++ b/aleksis/apps/paweljong/templates/paweljong/person_group_wizard.html @@ -0,0 +1,36 @@ +{% 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 647f564..0fa603d 100644 --- a/aleksis/apps/paweljong/urls.py +++ b/aleksis/apps/paweljong/urls.py @@ -4,6 +4,8 @@ from aleksis.apps.postbuero.forms import MailAddForm from . import views from .forms import ( + PersonGroupFormGroup, + PersonGroupFormPerson, RegisterEventAccount, RegisterEventAdditional, RegisterEventConsent, @@ -35,6 +37,11 @@ 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( @@ -42,6 +49,11 @@ urlpatterns = [ views.RegisterEventWizardView.as_view(register_forms, condition_dict=condition_dict), name="register_event_by_slug", ), + path( + "group_persons/add", + views.PersonGroupWizardView.as_view(add_persons_to_group_forms), + name="add_persons_to_group", + ), path("event/<slug:slug>", views.EventFullView.as_view(), name="event_by_name"), path("event/<slug:slug>/detail", views.EventDetailView.as_view(), name="event_detail_by_name"), path( diff --git a/aleksis/apps/paweljong/views.py b/aleksis/apps/paweljong/views.py index 74abc60..fb9f3e1 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.models import Activity, Person from aleksis.core.tables import AdditionalFieldsTable, GroupsTable +from aleksis.core.models import Activity, Person, Group from aleksis.core.util import messages from aleksis.core.util.core_helpers import get_site_preferences, objectgetter_optional @@ -914,3 +914,36 @@ class EventDetailView(PermissionRequiredMixin, DetailView): context["additional_fields_table"] = additional_fields_table return context + + +class PersonGroupWizardView(SessionWizardView): + template_name = "paweljong/person_group_wizard.html" + file_storage = settings.DEFAULT_FILE_STORAGE + + def get_form_initial(self, step): + + initial = self.initial_dict.get(step, {}) + + 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 done(self, form_list, **kwargs): + + cleaned_data_group = self.get_cleaned_data_for_step("group") + cleaned_data_person = self.get_cleaned_data_for_step("person") + + # 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 redirect("add_persons_to_group") -- GitLab