diff --git a/backend/members/urls.py b/backend/members/urls.py index d53996c..837375c 100644 --- a/backend/members/urls.py +++ b/backend/members/urls.py @@ -6,7 +6,7 @@ app_name = "members" urlpatterns = [ path("", MemberListView.as_view(), name="list"), path("add/", MemberAddView.as_view(), name="add"), - # path("/edit/", MemberEditView.as_view(), name="edit"), + path("/edit/", MemberEditView.as_view(), name="edit"), path("/delete/", MemberDeleteView.as_view(), name="delete"), # path("load/", MemberLoadView.as_view(), name="load"), ] diff --git a/backend/members/views.py b/backend/members/views.py index 97cd8e2..6fa6d69 100644 --- a/backend/members/views.py +++ b/backend/members/views.py @@ -5,15 +5,17 @@ from django.contrib.messages.views import SuccessMessageMixin from django.http import HttpResponse, HttpResponseRedirect from django.urls import reverse_lazy from django.utils.translation import gettext_lazy as _ -from django.views.generic import DeleteView, UpdateView, CreateView +from django.views.generic import CreateView, DeleteView, UpdateView from django_filters.views import FilterView from rules.contrib.views import PermissionRequiredMixin from members.filters import MemberFilter -from members.models import Member from members.forms import MemberForm +from members.models import Member from ..mixins import HTMXViewMixin + + class MemberListView(HTMXViewMixin, PermissionRequiredMixin, FilterView): filterset_class = MemberFilter paginate_by = 50 @@ -25,15 +27,15 @@ class MemberListView(HTMXViewMixin, PermissionRequiredMixin, FilterView): def handle_no_permission(self) -> HttpResponseRedirect: messages.error(self.request, self.get_permission_denied_message()) return HttpResponseRedirect(reverse_lazy("backend:index")) - + def get_filterset_kwargs(self, filterset_class) -> dict[str, Any]: kwargs = super().get_filterset_kwargs(filterset_class) - + filter_values = {} if kwargs["data"] is None else kwargs["data"].dict() - + if not filter_values: filter_values.update({"user__is_active": "true"}) - + kwargs["data"] = filter_values return kwargs @@ -47,11 +49,11 @@ class MemberAddView(HTMXViewMixin, PermissionRequiredMixin, SuccessMessageMixin, success_url = reverse_lazy("backend:members:list") partial_name = "members/member_form.html#content" menu_highlight = "members" - + def handle_no_permission(self) -> HttpResponseRedirect: messages.error(self.request, self.get_permission_denied_message()) return HttpResponseRedirect(reverse_lazy("backend:index")) - + def get_success_message(self, cleaned_data): return self.success_message % dict(cleaned_data, name=self.object.user.get_full_name()) @@ -65,14 +67,22 @@ class MemberEditView(HTMXViewMixin, PermissionRequiredMixin, SuccessMessageMixin success_url = reverse_lazy("backend:members:list") partial_name = "members/member_form.html#content" menu_highlight = "members" - + def handle_no_permission(self) -> HttpResponseRedirect: messages.error(self.request, self.get_permission_denied_message()) return HttpResponseRedirect(reverse_lazy("backend:index")) - + def get_success_message(self, cleaned_data): return self.success_message % dict(cleaned_data, name=self.object.user.get_full_name()) + def get_initial(self): + initial = super().get_initial() + user = self.get_object().user + + initial.update({"first_name": user.first_name, "last_name": user.last_name, "email": user.email, "admin": user.is_superuser}) + + return initial + class MemberDeleteView(HTMXViewMixin, PermissionRequiredMixin, SuccessMessageMixin, DeleteView): model = Member @@ -82,21 +92,21 @@ class MemberDeleteView(HTMXViewMixin, PermissionRequiredMixin, SuccessMessageMix success_url = reverse_lazy("backend:members:list") partial_name = "members/member_confirm_delete.html#content" menu_highlight = "members" - + def handle_no_permission(self) -> HttpResponseRedirect: messages.error(self.request, self.get_permission_denied_message()) return HttpResponseRedirect(reverse_lazy("backend:index")) - + def get_success_message(self, cleaned_data): return self.success_message % dict(cleaned_data, name=self.object.user.get_full_name()) - + def post(self, request, *args, **kwargs): self.object = self.get_object() - + # Soft delete user self.object.user.is_active = False self.object.user.save() - + # Do not delete the member object messages.success(self.request, self.get_success_message({"name": self.object.user.get_full_name()})) return HttpResponseRedirect(self.get_success_url()) diff --git a/templates/members/member_filter.html b/templates/members/member_filter.html index ac06bd9..2a001fa 100644 --- a/templates/members/member_filter.html +++ b/templates/members/member_filter.html @@ -14,7 +14,7 @@

{% translate "Members" %}

- +
{% translate "Filter" %}{% if filter.is_bound %}active{% endif %}
@@ -89,7 +89,7 @@ {% for member in object_list %} - +
{% avatar first_name=member.user.first_name last_name=member.user.last_name %} @@ -105,7 +105,7 @@ {% endif %} {% if not member.user.is_active %} -
{% translate "Inactive"%}
+
{% translate "Inactive" %}
{% endif %}
@@ -129,7 +129,7 @@
- + {% translate "Details" %} @@ -151,13 +151,23 @@ {% else %}
{% for member in object_list %} - +
{% avatar first_name=member.user.first_name last_name=member.user.last_name width="sm" %}
-
{{ member.user.get_full_name }} {% if member.license %}#{{ member.license }}{% endif %}
+
+ {{ member.user.get_full_name }} + {% if member.license %} + #{{ member.license }} + {% endif %} + {% if member.user.is_superuser %} +
+ +
+ {% endif %} +
{{ member.birthday|date:"d M Y"|default:"" }}
diff --git a/templates/members/member_form.html b/templates/members/member_form.html index 8f6de77..1e749e4 100644 --- a/templates/members/member_form.html +++ b/templates/members/member_form.html @@ -18,14 +18,6 @@
{% if member %}
{{ member.user.get_full_name }}
- - {% if member.user.is_superuser %} -
-
- -
-
- {% endif %} {% else %}
{% translate "Create new member" %}
{% endif %} @@ -44,29 +36,28 @@ {% if member %}
-
- {% if member.phone_number %} - - - {{ member.phone }} - - {% endif %} - - {% if member.emergency_phone_number %} - - - {{ member.emergency_phone_number }} - - {% endif %} -
- - {% if config.TF_ENABLE_TEAMS %} - - {% translate "View team memberships" %} + {% if member.phone_number %} + + + {{ member.phone_number }} {% endif %} - + + {% if config.TF_ENABLE_TEAMS %} + + {% translate "View team memberships" %} + + {% endif %} + +