diff --git a/apps/wei/tables.py b/apps/wei/tables.py index 5e3536c2..f1d31813 100644 --- a/apps/wei/tables.py +++ b/apps/wei/tables.py @@ -136,8 +136,8 @@ class WEIRegistrationTable(tables.Table): class WEIMembershipTable(tables.Table): user = tables.LinkColumn( - 'wei:wei_update_registration', - args=[A('registration__pk')], + 'wei:wei_update_membership', + args=[A('pk')], ) year = tables.Column( diff --git a/apps/wei/templates/wei/weimembership_form.html b/apps/wei/templates/wei/weimembership_form.html index 6d5c0b37..512f6f8d 100644 --- a/apps/wei/templates/wei/weimembership_form.html +++ b/apps/wei/templates/wei/weimembership_form.html @@ -213,7 +213,6 @@ SPDX-License-Identifier: GPL-3.0-or-later $("input[name='bus']:checked").each(function (ignored) { buses.push($(this).parent().text().trim()); }); - console.log(buses); $("input[name='team']").each(function () { let label = $(this).parent(); $(this).parent().addClass('d-none'); diff --git a/apps/wei/templates/wei/weimembership_update.html b/apps/wei/templates/wei/weimembership_update.html new file mode 100644 index 00000000..527ac08d --- /dev/null +++ b/apps/wei/templates/wei/weimembership_update.html @@ -0,0 +1,46 @@ +{% extends "base.html" %} +{% comment %} +Copyright (C) 2018-2025 by BDE ENS Paris-Saclay +SPDX-License-Identifier: GPL-3.0-or-later +{% endcomment %} +{% load i18n crispy_forms_tags %} + +{% block content %} +
+

+ {{ title }} +

+
+
+ {% csrf_token %} + {{ form | crispy }} + +
+
+
+{% endblock %} + +{% block extrajavascript %} + +{% endblock %} \ No newline at end of file diff --git a/apps/wei/urls.py b/apps/wei/urls.py index 5f9283c0..437a7d2a 100644 --- a/apps/wei/urls.py +++ b/apps/wei/urls.py @@ -7,7 +7,7 @@ from .views import CurrentWEIDetailView, WEI1AListView, WEIListView, WEICreateVi WEIRegistrationsView, WEIMembershipsView, MemberListRenderView, BusInformationUpdateView, \ BusCreateView, BusManageView, BusUpdateView, BusTeamCreateView, BusTeamManageView, BusTeamUpdateView, \ WEIAttributeBus1AView, WEIAttributeBus1ANextView, WEIRegister1AView, WEIRegister2AView, WEIUpdateRegistrationView, \ - WEIDeleteRegistrationView, WEIValidateRegistrationView, WEISurveyView, WEISurveyEndView, WEIClosedView + WEIDeleteRegistrationView, WEIValidateRegistrationView, WEISurveyView, WEISurveyEndView, WEIClosedView, WEIUpdateMembershipView app_name = 'wei' urlpatterns = [ @@ -43,4 +43,6 @@ urlpatterns = [ path('bus-1A//', WEIAttributeBus1AView.as_view(), name="wei_bus_1A"), path('bus-1A/next//', WEIAttributeBus1ANextView.as_view(), name="wei_bus_1A_next"), path('update-bus-info//', BusInformationUpdateView.as_view(), name="update_bus_info"), + + path('edit_membership//', WEIUpdateMembershipView.as_view(), name="wei_update_membership"), ] diff --git a/apps/wei/views.py b/apps/wei/views.py index d236af8b..bd1f1f5f 100644 --- a/apps/wei/views.py +++ b/apps/wei/views.py @@ -1181,6 +1181,49 @@ class WEIValidateRegistrationView(ProtectQuerysetMixin, ProtectedCreateView): return reverse_lazy("wei:wei_registrations", kwargs={"pk": self.object.club.pk}) +class WEIUpdateMembershipView(ProtectQuerysetMixin, LoginRequiredMixin, UpdateView): + """ + Update a membership for the WEI + """ + model = WEIMembership + context_object_name = "membership" + template_name = "wei/weimembership_update.html" + extra_context = {"title": _("Update WEI Membership")} + + def dispatch(self, request, *args, **kwargs): + wei = self.get_object().registration.wei + today = date.today() + # We can't update a registration once the WEI is started and before the membership start date + if today >= wei.date_start or today < wei.membership_start: + return redirect(reverse_lazy('wei:wei_closed', args=(wei.pk,))) + # Store the validate parameter in the view's state + return super().dispatch(request, *args, **kwargs) + + def get_form(self): + form = WEIMembershipForm( + self.request.POST or None, + self.request.FILES or None, + instance=self.object, + wei=self.object.registration.wei, + ) + + form.fields["roles"].initial = self.object.roles.all() + form.fields["bus"].initial = self.object.bus + form.fields["team"].initial = self.object.team + + del form.fields["credit_type"] + del form.fields["credit_amount"] + del form.fields["first_name"] + del form.fields["last_name"] + del form.fields["bank"] + + return form + + def get_success_url(self): + print("get_success_url") + return reverse_lazy("wei:wei_detail", kwargs={"pk": self.object.registration.wei.pk}) + + class WEISurveyView(LoginRequiredMixin, BaseFormView, DetailView): """ Display the survey for the WEI for first year members.