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

Rewrite view logic

parent d3bfbb95
No related branches found
No related tags found
2 merge requests!23Resolve "Event detail page",!21Resolve "Add persons to group by username"
Pipeline #69124 passed with warnings
......@@ -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")
......
......@@ -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"),
)
{% 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 %}
{% 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,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"),
......
......@@ -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"]})
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