aemo_fr/aemo/admin.py

198 lines
5.4 KiB
Python
Raw Normal View History

2024-06-03 16:49:01 +02:00
from django.contrib import admin
from django.contrib.auth.admin import GroupAdmin, UserAdmin
from django.contrib.auth.forms import UserChangeForm
from django.contrib.auth.models import Group, Permission
from .models import (
Bilan, CercleScolaire, Contact, Document, Famille, Formation, GroupInfo,
Intervenant, LibellePrestation, Personne, Prestation, Rapport, Region, Role,
Service, Suivi, Utilisateur
)
class TypePrestationFilter(admin.SimpleListFilter):
title = 'Prest. famil./générales'
parameter_name = 'prest'
default_value = None
def lookups(self, request, model_admin):
return (
('fam', 'Familiales'),
('gen', 'Générales'),
)
def queryset(self, request, queryset):
value = self.value()
if value == 'fam':
return queryset.filter(famille__isnull=False).order_by('famille__nom')
elif value == 'gen':
return queryset.filter(famille__isnull=True).order_by('-date_prestation')
return queryset
class RegionFilter(admin.SimpleListFilter):
title = 'Région'
parameter_name = 'region'
def lookups(self, request, model_admin):
typ = model_admin.model._meta.app_label
kwargs = {f"{typ}": True}
return [(reg.pk, reg.nom) for reg in Region.objects.filter(**kwargs)]
def queryset(self, request, queryset):
if self.value():
return queryset.filter(region_id=self.value())
return queryset
class DocumentInline(admin.TabularInline):
model = Document
extra = 1
class PersonneInLine(admin.StackedInline):
model = Personne
exclude = ('reseaux', 'remarque')
extra = 1
@admin.register(Personne)
class PersonneAdmin(admin.ModelAdmin):
list_display = ('nom_prenom', 'adresse')
search_fields = ('nom', 'prenom')
@admin.register(Contact)
class ContactAdmin(admin.ModelAdmin):
list_display = ('nom', 'prenom', 'service', 'roles_display', 'est_actif')
list_filter = ('service', 'est_actif')
search_fields = ('nom', 'prenom', 'service__sigle')
def roles_display(self, contact):
return contact.roles_str(sep=' / ')
roles_display.short_description = 'Rôles'
@admin.register(Famille)
class FamilleAdmin(admin.ModelAdmin):
list_display = ('nom', 'npa', 'localite', 'get_region')
list_filter = (RegionFilter,)
inlines = [PersonneInLine, DocumentInline]
ordering = ('nom',)
search_fields = ('nom', 'localite')
def get_region(self, obj):
return obj.region.nom if obj.region else None
get_region.short_description = 'Région'
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == 'region':
app_label = self.model._meta.app_label
param = {f"{app_label}": True}
kwargs['queryset'] = Region.objects.filter(**param)
kwargs['label'] = 'Région'
return super().formfield_for_foreignkey(db_field, request, **kwargs)
@admin.register(Formation)
class FormationAdmin(admin.ModelAdmin):
list_display = ('personne', 'statut')
search_fields = ('personne__nom',)
ordering = ('personne__nom',)
class UtilisateurChangeForm(UserChangeForm):
class Meta(UserChangeForm.Meta):
model = Utilisateur
@admin.register(Utilisateur)
class UtilisateurAdmin(UserAdmin):
form = UtilisateurChangeForm
list_display = [
'nom', 'prenom', 'sigle', 'tel_prof', 'tel_prive', 'email',
'taux_activite', 'is_active', 'last_login'
]
fieldsets = UserAdmin.fieldsets + (
(None, {'fields': (
'sigle', 'prenom', 'nom', 'rue', 'npa', 'localite',
'tel_prof', 'tel_prive', 'service', 'taux_activite'
)}),
)
admin.site.unregister(Group)
class GroupInfoInline(admin.StackedInline):
model = GroupInfo
@admin.register(Group)
class GroupAdmin(GroupAdmin):
inlines = [GroupInfoInline]
@admin.register(Region)
class RegionAdmin(admin.ModelAdmin):
list_display = ['nom']
@admin.register(Role)
class RoleAdmin(admin.ModelAdmin):
list_display = ['nom', 'est_famille', 'est_intervenant', 'est_editeur']
@admin.register(Service)
class ServiceAdmin(admin.ModelAdmin):
list_display = ['sigle', 'nom_complet']
@admin.register(LibellePrestation)
class LibellePrestationAdmin(admin.ModelAdmin):
list_display = ['code', 'nom']
@admin.register(Permission)
class PermissionAdmin(admin.ModelAdmin):
search_fields = ['name', 'codename']
@admin.register(Document)
class DocumentAdmin(admin.ModelAdmin):
list_display = ('famille', 'titre')
search_fields = ('famille__nom',)
ordering = ('famille__nom',)
@admin.register(Suivi)
class SuiviAdmin(admin.ModelAdmin):
list_display = ('famille', 'equipe', 'etape')
list_filter = ('equipe',)
ordering = ('famille__nom',)
search_fields = ('famille__nom',)
@admin.register(Intervenant)
class IntervenantAdmin(admin.ModelAdmin):
list_display = ('intervenant', 'famille', 'role', 'date_debut', 'date_fin', 'fin_suivi')
list_filter = ('role',)
def famille(self, obj):
return obj.suivi.famille
def fin_suivi(self, obj):
return obj.suivi.date_fin_suivi
@admin.register(Prestation)
class PrestationAdmin(admin.ModelAdmin):
list_display = ('lib_prestation', 'date_prestation', 'duree', 'auteur')
list_filter = (TypePrestationFilter,)
search_fields = ('famille__nom', 'texte')
admin.site.register(Bilan)
admin.site.register(Rapport)
admin.site.register(CercleScolaire)