114 lines
3.9 KiB
Python
114 lines
3.9 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 admin
|
|
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
|
|
from django.core.urlresolvers import reverse
|
|
from django.utils.html import format_html
|
|
from django.utils.translation import ugettext_lazy as _
|
|
from reversion.admin import VersionAdmin
|
|
|
|
from .forms import UserCreationAdminForm
|
|
from .models import Adhesion, Clef, Request, User
|
|
|
|
|
|
class RequestAdmin(admin.ModelAdmin):
|
|
list_display = ('user', 'type', 'created_at', 'expires_at')
|
|
|
|
|
|
class ClefAdmin(VersionAdmin):
|
|
list_display = ('nom', 'proprio', 'commentaire')
|
|
ordering = ('nom',)
|
|
|
|
|
|
class AdhesionAdmin(VersionAdmin):
|
|
list_display = ('annee_debut', 'annee_fin')
|
|
|
|
|
|
class IsAdherentFilter(admin.SimpleListFilter):
|
|
title = _('adherent status')
|
|
parameter_name = 'is_adherent'
|
|
|
|
def lookups(self, request, model_admin):
|
|
return (
|
|
('Yes', _('Yes')),
|
|
)
|
|
|
|
def queryset(self, request, queryset):
|
|
value = self.value()
|
|
if value == 'Yes':
|
|
# Get current membership year and list all members
|
|
last_adh_year = Adhesion.objects.all().order_by('annee_debut') \
|
|
.reverse().first()
|
|
return last_adh_year.adherent
|
|
return queryset
|
|
|
|
|
|
class UserAdmin(VersionAdmin, BaseUserAdmin):
|
|
# Customize admin to add more fields
|
|
fieldsets = (
|
|
(None, {'fields': ('username', 'password')}),
|
|
(_('Personal info'), {'fields': ('first_name', 'last_name', 'email',
|
|
'telephone', 'address', 'comment')}),
|
|
(_('Permissions'), {'fields': ('is_active', 'is_staff', 'is_superuser',
|
|
'groups', 'user_permissions',
|
|
'maxemprunt')}),
|
|
(_('Important dates'), {'fields': ('last_login', 'date_joined')}),
|
|
)
|
|
list_display = ('username', 'email', 'first_name', 'last_name',
|
|
'maxemprunt', 'is_adherent', 'is_staff', 'actions_btn')
|
|
list_filter = (IsAdherentFilter, 'is_staff', 'is_superuser', 'is_active',
|
|
'groups')
|
|
|
|
# Customize required initial fields
|
|
add_form_template = 'admin/change_form.html'
|
|
add_form = UserCreationAdminForm
|
|
add_fieldsets = (
|
|
(None, {
|
|
'classes': ('wide',),
|
|
'fields': ("username", "email", "first_name", "last_name",
|
|
"address", "telephone"),
|
|
}),
|
|
)
|
|
|
|
def is_adherent(self, obj):
|
|
"""
|
|
Get current membership year and check if user is there
|
|
"""
|
|
last_adh_year = Adhesion.objects.all().order_by('annee_debut') \
|
|
.reverse().first()
|
|
is_member = last_adh_year and obj in last_adh_year.adherent.all()
|
|
if is_member:
|
|
return format_html(
|
|
'<img src="/static/admin/img/icon-yes.svg" alt="True">'
|
|
)
|
|
else:
|
|
# TODO permit adhere only if perms.users.add_user
|
|
return format_html(
|
|
'<img src="/static/admin/img/icon-no.svg" alt="False"> '
|
|
'<a class="button" href="{}">{}</a>',
|
|
reverse('users:adherer', args=[obj.pk]),
|
|
_('Adhere')
|
|
)
|
|
|
|
is_adherent.short_description = _('is adherent')
|
|
is_adherent.allow_tags = True
|
|
|
|
def actions_btn(self, obj):
|
|
# TODO permit adhere only if perms.media.add_emprunt
|
|
return format_html(
|
|
'<a class="button" href="{}">{}</a>',
|
|
reverse('media:add-emprunt', args=[obj.pk]),
|
|
_('Register borrowed item')
|
|
)
|
|
|
|
actions_btn.short_description = _('actions')
|
|
actions_btn.allow_tags = True
|
|
|
|
|
|
admin.site.register(User, UserAdmin)
|
|
admin.site.register(Request, RequestAdmin)
|
|
admin.site.register(Adhesion, AdhesionAdmin)
|
|
admin.site.register(Clef, ClefAdmin)
|