diff --git a/aleksis/apps/paweljong/forms.py b/aleksis/apps/paweljong/forms.py index 0a24683b1a136fd672bd76a4ff86703123a807f6..c864f82da15981bb728a2a7ee16344ba70a950c5 100644 --- a/aleksis/apps/paweljong/forms.py +++ b/aleksis/apps/paweljong/forms.py @@ -489,3 +489,15 @@ class RegistrationStatesForm(forms.ModelForm): class Meta: model = RegistrationState exclude = [] + + +class PersonGroupFormPerson(forms.Form): + + layout = Layout("username") + + username = forms.CharField( + required=True, + label=_("Person"), + widget=forms.TextInput(attrs={"autofocus": "", "autocomplete": "off"}), + help_text=_("Please enter a username."), + ) diff --git a/aleksis/apps/paweljong/tables.py b/aleksis/apps/paweljong/tables.py index c629a15619e71fe849d6eb734b6c51a3837d10c9..07ae03ac4f7fc5480fbba124366c55038d874bed 100644 --- a/aleksis/apps/paweljong/tables.py +++ b/aleksis/apps/paweljong/tables.py @@ -134,3 +134,27 @@ 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"), + ) + + +class AdditionalFieldsTable(tables.Table): + class Meta: + attrs = {"class": "highlight"} + + title = tables.LinkColumn("edit_additional_field_by_id", args=[A("id")]) diff --git a/aleksis/apps/paweljong/templates/paweljong/event/detail.html b/aleksis/apps/paweljong/templates/paweljong/event/detail.html index 75616218f7f00168e9b295f92b08107e425ed98e..1adf1eb19146dbd5e621ee7b7aadb28936c8a262 100644 --- a/aleksis/apps/paweljong/templates/paweljong/event/detail.html +++ b/aleksis/apps/paweljong/templates/paweljong/event/detail.html @@ -77,11 +77,16 @@ </div> </div> - <h5>{% blocktrans %}Additional fields{% endblocktrans %}</h5> - {% render_table additional_fields_table %} - - <h5>{% blocktrans %}Child groups{% endblocktrans%}</h5> - {% render_table child_groups_table %} + <div class="row"> + <div class="col s3"> + <h5>{% blocktrans %}Additional fields{% endblocktrans %}</h5> + {% render_table additional_fields_table %} + </div> + <div class="col s9"> + <h5>{% blocktrans %}Child groups{% endblocktrans%}</h5> + {% render_table child_groups_table %} + </div> + </div> <h5>{% blocktrans %}Registrations{% endblocktrans %}</h5> {% render_table registrations_table %} 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 0000000000000000000000000000000000000000..5819aa8382735771d5962359afed1bf94d7841c6 --- /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/urls.py b/aleksis/apps/paweljong/urls.py index 647f564fbd05b84904dd99f2e28cce1fef3f47ef..339c71deef0705be3ffe767c2881ee2ac7361f38 100644 --- a/aleksis/apps/paweljong/urls.py +++ b/aleksis/apps/paweljong/urls.py @@ -42,6 +42,11 @@ urlpatterns = [ views.RegisterEventWizardView.as_view(register_forms, condition_dict=condition_dict), name="register_event_by_slug", ), + path( + "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"), 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 74abc60305afb9e4c168e4b0b6960bbf8b9f9ffe..5dae95721111d0cdbfc73b18f07f449b487547fc 100644 --- a/aleksis/apps/paweljong/views.py +++ b/aleksis/apps/paweljong/views.py @@ -24,8 +24,7 @@ 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, Group, Person from aleksis.core.util import messages from aleksis.core.util.core_helpers import get_site_preferences, objectgetter_optional @@ -37,11 +36,14 @@ from .forms import ( EditTermForm, EditVoucherForm, GenerateListForm, + PersonGroupFormPerson, RegistrationNotificationForm, RegistrationStatesForm, ) from .models import Event, EventRegistration, InfoMailing, RegistrationState, Terms, Voucher from .tables import ( + AdditionalFieldsTable, + 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 @@ -914,3 +916,26 @@ class EventDetailView(PermissionRequiredMixin, DetailView): context["additional_fields_table"] = additional_fields_table return context + + +class PersonGroupView(PermissionRequiredMixin, FormView): + + template_name = "paweljong/event/persons_group.html" + permission_required = "paweljong.add_persons_to_group_rule" + form_class = PersonGroupFormPerson + + def form_valid(self, form): + + group = Group.objects.get(id=self.kwargs["pk"]) + + 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!")) + + return super().form_valid(self) + + def get_success_url(self): + return reverse("add_persons_to_group", kwargs={"pk": self.kwargs["pk"]})