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 %}
+
+{% 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.