diff --git a/apps/family/api/urls.py b/apps/family/api/urls.py index e94776d7..35cf1409 100644 --- a/apps/family/api/urls.py +++ b/apps/family/api/urls.py @@ -1,6 +1,7 @@ # Copyright (C) 2018-2025 by BDE ENS Paris-Saclay # SPDX-License-Identifier: GPL-3.0-or-later from django.urls import path + from .views import FamilyViewSet, FamilyMembershipViewSet, ChallengeViewSet, AchievementViewSet, BatchAchievementsAPIView @@ -13,6 +14,7 @@ def register_family_urls(router, path): router.register(path + '/challenge', ChallengeViewSet) router.register(path + '/achievement', AchievementViewSet) + urlpatterns = [ path('achievements/batch/', BatchAchievementsAPIView.as_view(), name='batch_achievements') -] \ No newline at end of file +] diff --git a/apps/family/api/views.py b/apps/family/api/views.py index d568c1c6..50ac0496 100644 --- a/apps/family/api/views.py +++ b/apps/family/api/views.py @@ -8,10 +8,6 @@ from rest_framework.views import APIView from rest_framework.permissions import IsAuthenticated from rest_framework.response import Response from rest_framework import status -from django.views.decorators.csrf import csrf_exempt -from django.views.decorators.http import require_POST -from django.http import JsonResponse -import json from .serializers import FamilySerializer, FamilyMembershipSerializer, ChallengeSerializer, AchievementSerializer from ..models import Family, FamilyMembership, Challenge, Achievement @@ -71,6 +67,7 @@ class AchievementViewSet(ReadProtectedModelViewSet): class BatchAchievementsAPIView(APIView): permission_classes = [IsAuthenticated] + def post(self, request, format=None): print("POST de la view spéciale") family_ids = request.data.get('families', []) @@ -88,4 +85,4 @@ class BatchAchievementsAPIView(APIView): family.update_score() Family.update_ranking() - return Response({'status': 'ok'}, status=status.HTTP_201_CREATED) \ No newline at end of file + return Response({'status': 'ok'}, status=status.HTTP_201_CREATED) diff --git a/apps/family/tables.py b/apps/family/tables.py index f7eb2a16..871dfd35 100644 --- a/apps/family/tables.py +++ b/apps/family/tables.py @@ -3,6 +3,8 @@ import django_tables2 as tables from django.urls import reverse +from django.utils.translation import gettext_lazy as _ +from django_tables2 import A from .models import Family, Challenge, FamilyMembership, Achievement @@ -63,11 +65,28 @@ class AchievementTable(tables.Table): """ List recent achievements. """ + delete = tables.LinkColumn( + 'family:achievement_delete', + args=[A('id')], + verbose_name=_("Delete"), + text=_("Delete"), + orderable=False, + attrs={ + 'th': { + 'id': 'delete-membership-header' + }, + 'a': { + 'class': 'btn btn-danger', + 'data-type': 'delete-membership' + } + }, + ) + class Meta: attrs = { 'class': 'table table-condensed table-striped table-hover' } model = Achievement - fields = ('family', 'challenge', 'obtained_at', ) + fields = ('family', 'challenge', 'challenge__points', 'obtained_at', ) template_name = 'django_tables2/bootstrap4.html' - orderable = False + order_by = ('-obtained_at',) diff --git a/apps/family/templates/family/achievement_confirm_delete.html b/apps/family/templates/family/achievement_confirm_delete.html new file mode 100644 index 00000000..893e0afb --- /dev/null +++ b/apps/family/templates/family/achievement_confirm_delete.html @@ -0,0 +1,27 @@ +{% extends "base.html" %} +{% comment %} +SPDX-License-Identifier: GPL-3.0-or-later +{% endcomment %} +{% load i18n crispy_forms_tags %} + +{% block content %} +
+ {% trans "Recent achievements history" %} +
+ + {% trans "Return to management page" %} + ++