# -*- 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