Skip to content
Snippets Groups Projects
Commit ee8ff909 authored by Tom Teichler's avatar Tom Teichler :beers:
Browse files

Add form to add persons to group

parent 964f9969
No related branches found
No related tags found
2 merge requests!23Resolve "Event detail page",!21Resolve "Add persons to group by username"
...@@ -489,3 +489,25 @@ class RegistrationStatesForm(forms.ModelForm): ...@@ -489,3 +489,25 @@ class RegistrationStatesForm(forms.ModelForm):
class Meta: class Meta:
model = RegistrationState model = RegistrationState
exclude = [] 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"))
{% 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 %}
...@@ -4,6 +4,8 @@ from aleksis.apps.postbuero.forms import MailAddForm ...@@ -4,6 +4,8 @@ from aleksis.apps.postbuero.forms import MailAddForm
from . import views from . import views
from .forms import ( from .forms import (
PersonGroupFormGroup,
PersonGroupFormPerson,
RegisterEventAccount, RegisterEventAccount,
RegisterEventAdditional, RegisterEventAdditional,
RegisterEventConsent, RegisterEventConsent,
...@@ -35,6 +37,11 @@ account_conditions = { ...@@ -35,6 +37,11 @@ account_conditions = {
"email": views.is_email_needed, "email": views.is_email_needed,
} }
add_persons_to_group_forms = [
("group", PersonGroupFormGroup),
("person", PersonGroupFormPerson),
]
urlpatterns = [ urlpatterns = [
path("event/<slug:slug>/edit", views.EditEventView.as_view(), name="edit_event_by_slug"), path("event/<slug:slug>/edit", views.EditEventView.as_view(), name="edit_event_by_slug"),
path( path(
...@@ -42,6 +49,11 @@ urlpatterns = [ ...@@ -42,6 +49,11 @@ urlpatterns = [
views.RegisterEventWizardView.as_view(register_forms, condition_dict=condition_dict), views.RegisterEventWizardView.as_view(register_forms, condition_dict=condition_dict),
name="register_event_by_slug", 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>", views.EventFullView.as_view(), name="event_by_name"),
path("event/<slug:slug>/detail", views.EventDetailView.as_view(), name="event_detail_by_name"), path("event/<slug:slug>/detail", views.EventDetailView.as_view(), name="event_detail_by_name"),
path( path(
......
...@@ -24,8 +24,8 @@ from templated_email import send_templated_mail ...@@ -24,8 +24,8 @@ from templated_email import send_templated_mail
from aleksis.apps.postbuero.models import MailAddress from aleksis.apps.postbuero.models import MailAddress
from aleksis.core.mixins import AdvancedCreateView, AdvancedDeleteView, AdvancedEditView 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.tables import AdditionalFieldsTable, GroupsTable
from aleksis.core.models import Activity, Person, Group
from aleksis.core.util import messages from aleksis.core.util import messages
from aleksis.core.util.core_helpers import get_site_preferences, objectgetter_optional from aleksis.core.util.core_helpers import get_site_preferences, objectgetter_optional
...@@ -914,3 +914,36 @@ class EventDetailView(PermissionRequiredMixin, DetailView): ...@@ -914,3 +914,36 @@ class EventDetailView(PermissionRequiredMixin, DetailView):
context["additional_fields_table"] = additional_fields_table context["additional_fields_table"] = additional_fields_table
return context 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")
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