mirror of
https://gitlab.crans.org/mediatek/med.git
synced 2025-02-06 08:53:01 +00:00
156 lines
5.1 KiB
Python
156 lines
5.1 KiB
Python
# -*- mode: python; coding: utf-8 -*-
|
|
# Copyright (C) 2017-2019 by BDE ENS Paris-Saclay
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
from django.contrib import messages
|
|
from django.contrib.auth.decorators import login_required, permission_required
|
|
from django.contrib.auth.mixins import LoginRequiredMixin
|
|
from django_filters.rest_framework import DjangoFilterBackend
|
|
from django.db import transaction
|
|
from django.shortcuts import redirect, render
|
|
from django.utils import timezone
|
|
from django.utils.translation import gettext_lazy as _
|
|
from django.views.generic import TemplateView
|
|
from rest_framework import viewsets
|
|
from rest_framework.filters import SearchFilter
|
|
from reversion import revisions as reversion
|
|
|
|
from .models import Auteur, BD, CD, Emprunt, FutureMedia, Jeu, Manga, Revue, Roman, Vinyle
|
|
from .serializers import AuteurSerializer, BDSerializer, CDSerializer, EmpruntSerializer, FutureMediaSerializer, \
|
|
JeuSerializer, MangaSerializer, RevueSerializer, RomanSerializer, VinyleSerializer
|
|
|
|
|
|
@login_required
|
|
@permission_required('media.change_emprunt')
|
|
def retour_emprunt(request, empruntid):
|
|
try:
|
|
emprunt_instance = Emprunt.objects.get(pk=empruntid)
|
|
except Emprunt.DoesNotExist:
|
|
messages.error(request, u"Entrée inexistante")
|
|
return redirect("admin:media_emprunt_changelist")
|
|
with transaction.atomic(), reversion.create_revision():
|
|
emprunt_instance.permanencier_rendu = request.user
|
|
emprunt_instance.date_rendu = timezone.now()
|
|
emprunt_instance.save()
|
|
reversion.set_user(request.user)
|
|
messages.success(request, "Retour enregistré")
|
|
return redirect("admin:media_emprunt_changelist")
|
|
|
|
|
|
def index(request):
|
|
"""
|
|
Home page which redirect to admin when logged in
|
|
"""
|
|
if request.user.is_authenticated:
|
|
return redirect('admin:index')
|
|
else:
|
|
return render(request, 'admin/index.html', {
|
|
'title': _('Welcome to the Mediatek database'),
|
|
})
|
|
|
|
|
|
class FindMediumView(LoginRequiredMixin, TemplateView):
|
|
template_name = "media/find_medium.html"
|
|
|
|
|
|
class AuteurViewSet(viewsets.ModelViewSet):
|
|
"""
|
|
API endpoint that allows authors to be viewed or edited.
|
|
"""
|
|
queryset = Auteur.objects.all()
|
|
serializer_class = AuteurSerializer
|
|
|
|
|
|
class BDViewSet(viewsets.ModelViewSet):
|
|
"""
|
|
API endpoint that allows media to be viewed or edited.
|
|
"""
|
|
queryset = BD.objects.all()
|
|
serializer_class = BDSerializer
|
|
filter_backends = [DjangoFilterBackend, SearchFilter]
|
|
filterset_fields = ["isbn", "side_identifier"]
|
|
search_fields = ["isbn", "$title", "$subtitle", "side_identifier", "$authors__name"]
|
|
|
|
|
|
class MangaViewSet(viewsets.ModelViewSet):
|
|
"""
|
|
API endpoint that allows media to be viewed or edited.
|
|
"""
|
|
queryset = Manga.objects.all()
|
|
serializer_class = MangaSerializer
|
|
filter_backends = [DjangoFilterBackend, SearchFilter]
|
|
filterset_fields = ["isbn", "side_identifier"]
|
|
search_fields = ["isbn", "$title", "$subtitle", "side_identifier", "$authors__name"]
|
|
|
|
|
|
class CDViewSet(viewsets.ModelViewSet):
|
|
"""
|
|
API endpoint that allows media to be viewed or edited.
|
|
"""
|
|
queryset = CD.objects.all()
|
|
serializer_class = CDSerializer
|
|
filter_backends = [DjangoFilterBackend, SearchFilter]
|
|
filterset_fields = ["side_identifier"]
|
|
search_fields = ["$title", "side_identifier", "$authors__name"]
|
|
|
|
|
|
class VinyleViewSet(viewsets.ModelViewSet):
|
|
"""
|
|
API endpoint that allows media to be viewed or edited.
|
|
"""
|
|
queryset = Vinyle.objects.all()
|
|
serializer_class = VinyleSerializer
|
|
filter_backends = [DjangoFilterBackend, SearchFilter]
|
|
filterset_fields = ["side_identifier", "rpm"]
|
|
search_fields = ["$title", "side_identifier", "$authors__name"]
|
|
|
|
|
|
class RomanViewSet(viewsets.ModelViewSet):
|
|
"""
|
|
API endpoint that allows media to be viewed or edited.
|
|
"""
|
|
queryset = Roman.objects.all()
|
|
serializer_class = RomanSerializer
|
|
filter_backends = [DjangoFilterBackend, SearchFilter]
|
|
filterset_fields = ["isbn", "side_identifier", "number_of_pages"]
|
|
search_fields = ["$title", "$subtitle", "side_identifier", "$authors__name"]
|
|
|
|
|
|
class RevueViewSet(viewsets.ModelViewSet):
|
|
"""
|
|
API endpoint that allows media to be viewed or edited.
|
|
"""
|
|
queryset = Revue.objects.all()
|
|
serializer_class = RevueSerializer
|
|
filter_backends = [DjangoFilterBackend, SearchFilter]
|
|
filterset_fields = ["number", "year", "month", "day", "double"]
|
|
search_fields = ["$title"]
|
|
|
|
|
|
|
|
class FutureMediaViewSet(viewsets.ModelViewSet):
|
|
"""
|
|
API endpoint that allows media to be viewed or edited.
|
|
"""
|
|
queryset = FutureMedia.objects.all()
|
|
serializer_class = FutureMediaSerializer
|
|
filter_backends = [DjangoFilterBackend, SearchFilter]
|
|
filterset_fields = ["isbn"]
|
|
search_fields = ["$isbn"]
|
|
|
|
|
|
class EmpruntViewSet(viewsets.ModelViewSet):
|
|
"""
|
|
API endpoint that allows borrowed items to be viewed or edited.
|
|
"""
|
|
queryset = Emprunt.objects.all()
|
|
serializer_class = EmpruntSerializer
|
|
|
|
|
|
class JeuViewSet(viewsets.ModelViewSet):
|
|
"""
|
|
API endpoint that allows games to be viewed or edited.
|
|
"""
|
|
queryset = Jeu.objects.all()
|
|
serializer_class = JeuSerializer
|