Source code for scipost.admin

__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)"
__license__ = "AGPL v3"


from django.contrib import admin
from django import forms

from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User, Permission

from scipost.models import TOTPDevice, Contributor, Remark,\
                           AuthorshipClaim, PrecookedEmail,\
                           UnavailabilityPeriod

from organizations.admin import ContactInline
from production.admin import ProductionUserInline
from submissions.models import Submission


[docs]class TOTPDeviceAdmin(admin.ModelAdmin): search_fields = ['user',]
admin.site.register(TOTPDevice) admin.site.register(UnavailabilityPeriod)
[docs]class ContributorAdmin(admin.ModelAdmin): search_fields = [ 'user__first_name', 'user__last_name', 'user__email', 'orcid_id']
[docs]class ContributorInline(admin.StackedInline): model = Contributor extra = 0 min_num = 0
[docs]class TOTPDeviceInline(admin.StackedInline): model = TOTPDevice extra = 0 min_num = 0
[docs]class UserAdmin(UserAdmin): inlines = [ ContributorInline, TOTPDeviceInline, ContactInline, ProductionUserInline ] list_display = ['username', 'email', 'first_name', 'last_name', 'is_active', 'is_staff', 'is_duplicate'] search_fields = ['username', 'last_name', 'email']
[docs] def is_duplicate(self, obj): return obj.contributor.is_duplicate
is_duplicate.short_description = 'Is duplicate?' is_duplicate.boolean = True
admin.site.unregister(User) admin.site.register(Contributor, ContributorAdmin) admin.site.register(User, UserAdmin)
[docs]class RemarkTypeListFilter(admin.SimpleListFilter): title = 'Remark Type' parameter_name = 'type'
[docs] def lookups(self, request, model_admin): """ Returns a list of tuples to define the filter values in the Admin UI. """ return ( ('feedback', 'Feedback'), ('nomination', 'Nomination'), ('motion', 'Motion'), ('submission', 'Submission'), ('recommendation', 'Recommendation'), )
def queryset(self, request, queryset): """ Returns the filtered queryset based on the value provided in the query string and retrievable via `self.value()`. """ if self.value() == 'feedback': return queryset.filter(feedback__isnull=False) if self.value() == 'nomination': return queryset.filter(nomination__isnull=False) if self.value() == 'motion': return queryset.filter(motion__isnull=False) if self.value() == 'submission': return queryset.filter(submission__isnull=False) if self.value() == 'recommendation': return queryset.filter(recommendation__isnull=False) return None
[docs]def remark_text(obj): return obj.remark[:30]
[docs]def get_remark_type(remark): if remark.feedback: return 'Feedback' if remark.nomination: return 'Nomination' if remark.motion: return 'Motion' if remark.submission: return 'Submission' if remark.recommendation: return 'Recommendation' return ''
[docs]class RemarkAdminForm(forms.ModelForm): submission = forms.ModelChoiceField( required=False, queryset=Submission.objects.order_by('-preprint__identifier_w_vn_nr'))
[docs] class Meta: model = Remark fields = '__all__'
[docs]class RemarkAdmin(admin.ModelAdmin): search_fields = ['contributor', 'remark'] list_display = [remark_text, 'contributor', 'date', get_remark_type] date_hierarchy = 'date' list_filter = [RemarkTypeListFilter] form = RemarkAdminForm
admin.site.register(Remark, RemarkAdmin) admin.site.register(AuthorshipClaim) admin.site.register(Permission)
[docs]class PrecookedEmailAdmin(admin.ModelAdmin): search_fields = ['email_subject', 'email_text', 'emailed_to']
admin.site.register(PrecookedEmail, PrecookedEmailAdmin)