# -*- mode: python; coding: utf-8 -*- # Copyright (C) 2017-2019 by BDE ENS Paris-Saclay # SPDX-License-Identifier: GPL-3.0-or-later from django.urls import reverse from django.utils.html import format_html from django.utils.translation import ugettext_lazy as _ from reversion.admin import VersionAdmin from med.admin import admin_site from .forms import MediaAdminForm from .models import Auteur, Emprunt, Jeu, Media class AuteurAdmin(VersionAdmin): list_display = ('nom',) search_fields = ('nom',) class MediaAdmin(VersionAdmin): list_display = ('title', 'authors_list', 'side_title', 'isbn', 'external_link') search_fields = ('title', 'authors__nom', 'side_title', 'subtitle', 'isbn') autocomplete_fields = ('authors',) date_hierarchy = 'publish_date' form = MediaAdminForm def authors_list(self, obj): return ", ".join([a.nom for a in obj.authors.all()]) authors_list.short_description = _('authors') def external_link(self, obj): return format_html('{}', obj.external_url, obj.external_url) external_link.allow_tags = True external_link.short_description = _('external url') def get_form(self, request, obj=None, **kwargs): """ Pass request to form (for ISBN magic) """ form = super().get_form(request, obj=obj, **kwargs) form.request = request return form def changeform_view(self, request, object_id=None, form_url='', extra_context=None): """ We use _continue for ISBN fetching, so remove continue button """ extra_context = extra_context or {} extra_context['show_save_and_continue'] = False return super().changeform_view(request, object_id, form_url, extra_context=extra_context) class EmpruntAdmin(VersionAdmin): list_display = ('media', 'user', 'date_emprunt', 'date_rendu', 'permanencier_emprunt', 'permanencier_rendu_custom') search_fields = ('media__title', 'media__side_title', 'user__username', 'date_emprunt', 'date_rendu') date_hierarchy = 'date_emprunt' autocomplete_fields = ('media', 'user', 'permanencier_emprunt', 'permanencier_rendu') def permanencier_rendu_custom(self, obj): """ Show a button if item has not been returned yet """ if obj.permanencier_rendu: return obj.permanencier_rendu else: return format_html( '{}', reverse('media:retour-emprunt', args=[obj.pk]), _('Turn back') ) permanencier_rendu_custom.short_description = _('permanencier rendu') permanencier_rendu_custom.allow_tags = True class JeuAdmin(VersionAdmin): list_display = ('nom', 'proprietaire', 'duree', 'nombre_joueurs_min', 'nombre_joueurs_max', 'comment') search_fields = ('nom', 'proprietaire__username', 'duree', 'comment') autocomplete_fields = ('proprietaire',) admin_site.register(Auteur, AuteurAdmin) admin_site.register(Media, MediaAdmin) admin_site.register(Emprunt, EmpruntAdmin) admin_site.register(Jeu, JeuAdmin)