# -*- 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.http import HttpResponse 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, DetailView 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 MarkMediumAsPresent(LoginRequiredMixin, DetailView): def dispatch(self, request, *args, **kwargs): object = self.get_object() object.present = not request.GET.get("absent", False) object.save() return HttpResponse("", content_type=204) class MarkBDAsPresent(MarkMediumAsPresent): model = BD class MarkMangaAsPresent(MarkMediumAsPresent): model = Manga class MarkCDAsPresent(MarkMediumAsPresent): model = CD class MarkVinyleAsPresent(MarkMediumAsPresent): model = Vinyle class MarkRomanAsPresent(MarkMediumAsPresent): model = Roman class MarkRevueAsPresent(MarkMediumAsPresent): model = Revue class MarkFutureAsPresent(MarkMediumAsPresent): model = FutureMedia 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 = ["=isbn", "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