Commit cf823f2a authored by Hamza Dely's avatar Hamza Dely

[consos/views] Implémente un NestedRouter pour lister les consos d'une note donnée

parent ea26216b
......@@ -2,9 +2,11 @@
Vues de l'API de l'application « Comptes »
"""
from rest_framework import routers
from django.conf.urls import url, include
from consos.views import NoteViewSet, BoutonViewSet, TransactionViewSet
from rest_framework_nested import routers
from consos.views import NoteViewSet, BoutonViewSet, TransactionViewSet, ConsosViewSet
router = routers.DefaultRouter()
......@@ -12,4 +14,10 @@ router.register(r'notes', NoteViewSet)
router.register(r'boutons', BoutonViewSet)
router.register(r'transactions', TransactionViewSet)
urlpatterns = router.urls
note_router = routers.NestedSimpleRouter(router, r'notes', lookup="note")
note_router.register(r'transactions', ConsosViewSet, base_name="note-transactions")
urlpatterns = [
url(r'^', include(router.urls)),
url(r'^', include(note_router.urls)),
]
......@@ -633,3 +633,37 @@ class TransactionViewSet(viewsets.GenericViewSet):
serializer.is_valid(raise_exception=True)
serializer.save()
return Response({}, status=status.HTTP_200_OK)
class ConsosViewSet(viewsets.GenericViewSet):
"""
Ensemble de vues permettant de voir les transactions liées à un adhérent
"""
queryset = Transaction.objects.all()
serializer_class = TransactionSerializer
def get_queryset(self):
"""
Filtre le QuerySet de façon à n'inclure que les transactions impliquant
la note d'un adhérent donné.
"""
note = self.kwargs['note_pk']
return super().get_queryset().filter(Q(emetteur=note) | Q(destinataire=note))
@requires("comptes.adherent_detail")
def list(self, request, note_pk=None):
"""
Renvoie la liste ordonnée des transacations effectuées sur la note d'un adhérent
"""
note = Note.objects.get(pk=note_pk)
if (note.adherent != request.user
and not request.user.has_perm("comptes.adherent_detail", Acl.BASIQUE)):
return Response(
{
"detail" : "Vous ne pouvez consulter que les transactions "
"liées à vôtre propre note",
},
status=status.HTTP_403_FORBIDDEN,
)
qs = self.get_queryset().order_by('-date')
serializer = self.get_serializer(qs, many=True)
return Response(serializer.data, status=status.HTTP_200_OK)
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment