from django.contrib import admin from django.contrib.contenttypes.admin import GenericStackedInline from .forms import AdherentForm from .models import Profile, Corporation, Adherent from banking.admin import ValidatedPaymentInline, PendingOrNewPaymentInline class ProfileInline(admin.StackedInline): model = Profile def has_add_permission(self, request): return False def has_delete_permission(self, request, obj=None): return False class AdherentInline(GenericStackedInline): model = Adherent ct_field = 'adherent_type' ct_fk_field = 'adherent_id' form = AdherentForm max_num = 1 extra = 0 class AdherentTypeFilter(admin.SimpleListFilter): title = 'type d’adhérent' parameter_name = 'type' def lookups(self, request, model_admin): return ( ('physique', 'Personne physique'), ('morale', 'Personne morale'), ) def queryset(self, request, queryset): if self.value() == 'physique': return queryset.filter(adherent_type__app_label='auth', adherent_type__model='user') if self.value() == 'morale': return queryset.filter(adherent_type__app_label='adhesions', adherent_type__model='corporation') class AdherentAdmin(admin.ModelAdmin): list_display = ('id', 'adherent_name', 'type',) list_filter = (AdherentTypeFilter,) inlines = (ValidatedPaymentInline, PendingOrNewPaymentInline,) fields = ('id',) readonly_fields = ('id',) def adherent_name(self, obj): return str(obj) adherent_name.short_description = 'Nom ou raison sociale' def has_add_permission(self, request): return False class CorporationAdmin(admin.ModelAdmin): list_display = ('social_reason', 'adherent_id') inlines = (AdherentInline,) def adherent_id(self, corporation): adherent = corporation.adherent if adherent: return adherent.id adherent_id.short_description = 'Numéro d’adhérent' admin.site.register(Corporation, CorporationAdmin) admin.site.register(Adherent, AdherentAdmin)