Source code for submissions.admin

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


from django.contrib import admin
from django.db.models import Q
from django import forms

from guardian.admin import GuardedModelAdmin

from submissions.models import (
    Submission, EditorialAssignment, RefereeInvitation, Report, EditorialCommunication,
    EICRecommendation, SubmissionTiering, AlternativeRecommendation, EditorialDecision,
    SubmissionEvent, iThenticateReport)
from scipost.models import Contributor


[docs]def submission_short_title(obj): return obj.submission.title[:30]
[docs]class iThenticateReportAdmin(admin.ModelAdmin): list_display = ['doc_id', 'to_submission', 'status'] list_filter = ['status']
admin.site.register(iThenticateReport, iThenticateReportAdmin)
[docs]class SubmissionAdminForm(forms.ModelForm): authors = forms.ModelMultipleChoiceField( required=False, queryset=Contributor.objects.nonduplicates().order_by('user__last_name')) authors_claims = forms.ModelMultipleChoiceField( required=False, queryset=Contributor.objects.nonduplicates().order_by('user__last_name')) authors_false_claims = forms.ModelMultipleChoiceField( required=False, queryset=Contributor.objects.nonduplicates().order_by('user__last_name')) is_resubmission_of = forms.ModelChoiceField( required=False, queryset=Submission.objects.order_by('-preprint__identifier_w_vn_nr'))
[docs] class Meta: model = Submission fields = '__all__'
[docs]class SubmissionTieringInline(admin.StackedInline): model = SubmissionTiering extra = 0 min_num = 0
[docs]class SubmissionAdmin(GuardedModelAdmin): date_hierarchy = 'submission_date' form = SubmissionAdminForm list_display = ('title', 'author_list', 'preprint', 'submitted_to', 'status', 'visible_public', 'visible_pool', 'refereeing_cycle', 'submission_date', 'publication') list_filter = ('status', 'discipline', 'submission_type', 'submitted_to') search_fields = ['submitted_by__user__last_name', 'title', 'author_list', 'abstract'] raw_id_fields = ('editor_in_charge', 'submitted_by') readonly_fields = ('publication',) inlines = [ SubmissionTieringInline, ] # Admin fields should be added in the fieldsets radio_fields = { "discipline": admin.VERTICAL, "submitted_to": admin.VERTICAL, "refereeing_cycle": admin.HORIZONTAL, "submission_type": admin.VERTICAL } fieldsets = ( (None, { 'fields': ( 'preprint', 'publication', 'title', 'abstract', 'submission_type'), }), ('Versioning', { 'fields': ( 'thread_hash', 'is_current', '_is_resubmission', 'is_resubmission_of', 'list_of_changes'), }), ('Submission details', { 'classes': ('collapse',), 'fields': ( 'author_comments', 'discipline', 'subject_area', 'secondary_areas', 'approaches', 'proceedings'), }), ('Authors', { 'classes': ('collapse',), 'fields': ( 'submitted_by', 'author_list', 'authors', 'authors_claims', 'authors_false_claims'), }), ('Refereeing', { 'classes': ('collapse',), 'fields': ( 'editor_in_charge', 'status', ('visible_public', 'visible_pool'), 'refereeing_cycle', ('open_for_commenting', 'open_for_reporting'), 'reporting_deadline', 'acceptance_date', 'referees_flagged', 'referees_suggested', 'remarks_for_editors', 'submitted_to', 'pdf_refereeing_pack', 'plagiarism_report', 'fellows', 'voting_fellows'), }), ('Meta', { 'classes': ('collapse',), 'fields': ( 'metadata', 'submission_date', 'needs_conflicts_update' ), }), )
admin.site.register(Submission, SubmissionAdmin)
[docs]class EditorialAssignmentAdminForm(forms.ModelForm): submission = forms.ModelChoiceField( queryset=Submission.objects.order_by('-preprint__identifier_w_vn_nr'))
[docs] class Meta: model = EditorialAssignment fields = '__all__'
[docs]class EditorialAssignmentAdmin(admin.ModelAdmin): search_fields = ['submission__title', 'submission__author_list', 'to__user__last_name'] list_display = ( 'to', submission_short_title, 'status', 'date_created', 'date_invited', 'invitation_order') date_hierarchy = 'date_created' list_filter = ('status',) form = EditorialAssignmentAdminForm
admin.site.register(EditorialAssignment, EditorialAssignmentAdmin)
[docs]class RefereeInvitationAdminForm(forms.ModelForm): submission = forms.ModelChoiceField( queryset=Submission.objects.order_by('-preprint__identifier_w_vn_nr')) referee = forms.ModelChoiceField( required=False, queryset=Contributor.objects.order_by('user__last_name'))
[docs] class Meta: model = RefereeInvitation fields = '__all__'
[docs]class RefereeInvitationAdmin(admin.ModelAdmin): search_fields = ['submission__title', 'submission__author_list', 'referee__user__last_name', 'first_name', 'last_name', 'email_address'] list_display = ('__str__', 'accepted', ) list_filter = ('accepted', 'fulfilled', 'cancelled',) date_hierarchy = 'date_invited' form = RefereeInvitationAdminForm
admin.site.register(RefereeInvitation, RefereeInvitationAdmin)
[docs]class ReportAdminForm(forms.ModelForm): submission = forms.ModelChoiceField( queryset=Submission.objects.order_by('-preprint__identifier_w_vn_nr'))
[docs] class Meta: model = Report fields = '__all__'
[docs]class ReportAdmin(admin.ModelAdmin): search_fields = ['author__user__last_name', 'submission__title'] list_display = ('author', 'status', 'doi_label', submission_short_title, 'date_submitted', ) list_display_links = ('author',) date_hierarchy = 'date_submitted' list_filter = ('status',) readonly_fields = ('report_nr',) form = ReportAdminForm
admin.site.register(Report, ReportAdmin)
[docs]class EditorialCommunicationAdmin(admin.ModelAdmin): search_fields = ['submission__title', 'referee__user__last_name', 'text']
admin.site.register(EditorialCommunication, EditorialCommunicationAdmin)
[docs]class EICRecommendationAdminForm(forms.ModelForm): submission = forms.ModelChoiceField( queryset=Submission.objects.order_by('-preprint__identifier_w_vn_nr')) eligible_to_vote = forms.ModelMultipleChoiceField( required=False, queryset=Contributor.objects.filter( Q(user__groups__name__in=['Editorial College']) | Q(fellowships__isnull=False), ).distinct().order_by('user__last_name')) voted_for = forms.ModelMultipleChoiceField( required=False, queryset=Contributor.objects.filter( Q(user__groups__name__in=['Editorial College']) | Q(fellowships__isnull=False), ).distinct().order_by('user__last_name')) voted_against = forms.ModelMultipleChoiceField( required=False, queryset=Contributor.objects.filter( Q(user__groups__name__in=['Editorial College']) | Q(fellowships__isnull=False), ).distinct().order_by('user__last_name')) voted_abstain = forms.ModelMultipleChoiceField( required=False, queryset=Contributor.objects.filter( Q(user__groups__name__in=['Editorial College']) | Q(fellowships__isnull=False), ).distinct().order_by('user__last_name'))
[docs] class Meta: model = EICRecommendation fields = '__all__'
[docs]class AlternativeRecommendationInline(admin.StackedInline): model = AlternativeRecommendation extra = 0 min_num = 0
[docs]class EICRecommendationAdmin(admin.ModelAdmin): search_fields = ['submission__title'] list_filter = ('status',) list_display = (submission_short_title, 'for_journal', 'recommendation', 'status', 'active', 'version') form = EICRecommendationAdminForm inlines = [ AlternativeRecommendationInline, ]
admin.site.register(EICRecommendation, EICRecommendationAdmin)
[docs]class EditorialDecisionAdmin(admin.ModelAdmin): search_fields = [ 'submission__title', 'submission__author_list', 'submission__preprint__identifier_w_vn_nr' ] list_filter = ['for_journal', 'decision', 'status',] list_display = [submission_short_title, 'for_journal', 'decision', 'taken_on', 'status', 'version']
admin.site.register(EditorialDecision, EditorialDecisionAdmin) admin.site.register(SubmissionEvent)