Skip to content
Snippets Groups Projects
Select Git revision
  • 3b266aed3b6bcafa053fee78b994711b407a8e6a
  • master default
  • 2023
  • branche-avec-truc-style
  • branche-a-rebase
5 results

main.py

Blame
  • admin.py 3.58 KiB
    """Projects admin configuration."""
    
    from django.contrib import admin
    
    from dynamicforms.views import download_multiple_forms_entries
    from dynamicforms.models import Form
    from .models import Edition, Participation, Project, EditionForm
    
    
    @admin.register(Project)
    class ProjectAdmin(admin.ModelAdmin):
        """Admin panel for projects."""
    
        list_display = ('__str__', 'logo', 'num_editions', 'last_edition',
                        'total_accepted_participations')
    
        def num_editions(self, obj: Project) -> int:
            """Return the number of editions."""
            return obj.editions.count()
        num_editions.short_description = "Éditions"
    
        def last_edition(self, obj: Project) -> int:
            """Return the year of the last edition."""
            return obj.editions.latest().year
        last_edition.short_description = 'Année de la dernière édition'
    
        def total_accepted_participations(self, obj: Project) -> int:
            """Return total number of accepted participations."""
            return obj.total_participations(state=Participation.STATE_ACCEPTED)
        total_accepted_participations.short_description = 'Participations totales'
    
    
    class OrganizersInline(admin.TabularInline):
        """Inline for edition organizers."""
    
        model = Edition.organizers.through
        extra = 0
    
    
    @admin.register(Edition)
    class EditionAdmin(admin.ModelAdmin):
        """Admin panel for editions."""
    
        list_display = ('project', 'year',
                        'num_pending', 'num_validated', 'num_accepted',
                        'num_rejected', 'num_cancelled')
        list_filter = ('project', 'year',)
        inlines = (OrganizersInline,)
    
        def num_pending(self, obj: Edition) -> int:
            """Return number of pending participations."""
            return obj.participations.pending().count()
        num_pending.short_description = 'En attente'
    
        def num_validated(self, obj: Edition) -> int:
            """Return number of validated participations."""
            return obj.participations.validated().count()
        num_validated.short_description = 'Validés'
    
        def num_accepted(self, obj: Edition) -> int:
            """Return number of accepted participations."""
            return obj.participations.accepted().count()
        num_accepted.short_description = 'Acceptés'
    
        def num_rejected(self, obj: Edition) -> int:
            """Return number of rejected participations."""
            return obj.participations.rejected().count()
        num_rejected.short_description = 'Refusés'
    
        def num_cancelled(self, obj: Edition) -> int:
            """Return number of cancelled participations."""
            return obj.participations.cancelled().count()
        num_cancelled.short_description = 'Annulés'
    
    
    @admin.register(EditionForm)
    class EditionFormAdmin(admin.ModelAdmin):
        """Admin panel for edition forms."""
    
        list_display = ('form', 'deadline', 'recipient',)
        list_filter = ('edition', 'deadline',)
    
        actions = ['download_csv']
    
        def download_csv(self, request, queryset):
            """Download entries of selected edition forms under a ZIP file."""
            form_ids = queryset.values_list('form__id', flat=True)
            forms = Form.objects.filter(id__in=form_ids)
            return download_multiple_forms_entries(request, forms=forms)
    
        download_csv.short_description = (
            'Télécharger les résponses des formulaires sélectionnés')
    
    
    @admin.register(Participation)
    class ParticipationAdmin(admin.ModelAdmin):
        """Participation admin panel."""
    
        list_display = ('user', 'edition', 'submitted', 'state')
        list_filter = ('edition', 'submitted', 'state',)
        readonly_fields = ('submitted',)
        search_fields = ('user__first_name', 'user__last_name', 'user__email',)