SciPost Code Repository

Skip to content
Snippets Groups Projects
admin.py 5.29 KiB
Newer Older
__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)"
from django.contrib import admin, messages
from django import forms
from journals.models import (
    Journal,
    Volume,
    Issue,
    Publication,
    Deposit,
    DOAJDeposit,
    GenericDOIDeposit,
    Reference,
    PublicationAuthorsTable,
    PublicationUpdate,
    SubmissionTemplate,
Jean-Sébastien Caux's avatar
Jean-Sébastien Caux committed
    AutogeneratedFileContentTemplate,
    PublicationResource,
from scipost.models import Contributor
from submissions.models import Submission
class SubmissionTemplateInline(admin.TabularInline):
    model = SubmissionTemplate
    extra = 0


Jean-Sébastien Caux's avatar
Jean-Sébastien Caux committed
class AutogeneratedFileContentTemplateInline(admin.TabularInline):
    model = AutogeneratedFileContentTemplate
    extra = 0


@admin.register(Journal)
class JournalAdmin(admin.ModelAdmin):
    search_fields = ["name"]
    list_display = ["__str__", "doi_string", "active"]
    inlines = [
        SubmissionTemplateInline,
Jean-Sébastien Caux's avatar
Jean-Sébastien Caux committed
        AutogeneratedFileContentTemplateInline,
    # Filter `alternative_journals` to include only ones:
    # - in the same academic field as the current journal
    # - that are active
    def formfield_for_manytomany(self, db_field, request, **kwargs):
        if db_field.name == "alternative_journals":
            journal_id = request.resolver_match.kwargs.get("object_id")

            if journal_id is None:
                return super().formfield_for_manytomany(db_field, request, **kwargs)

            journal = Journal.objects.get(pk=journal_id)
            selections = Journal.objects.filter(name="SciPost Selections")

            # Show all active journals if the current journal is SciPost Selections
            if journal == selections.first():
                kwargs["queryset"] = Journal.objects.all()
            else:
                kwargs["queryset"] = (
                    Journal.objects.filter(college=journal.college) | selections
                )

            kwargs["queryset"] = kwargs["queryset"].active().exclude(pk=journal_id)

        return super().formfield_for_manytomany(db_field, request, **kwargs)
@admin.register(Volume)
class VolumeAdmin(admin.ModelAdmin):
    list_display = ["__str__", "doi_string"]
@admin.register(Issue)
class IssueAdmin(admin.ModelAdmin):
    list_display = ["__str__", "doi_string"]
    search_fields = [
        "in_journal__name",
        "in_volume__in_journal__name",
        "doi_label",
class ReferenceInline(admin.TabularInline):
    model = Reference
    extra = 0
class AuthorsInline(admin.TabularInline):
    model = PublicationAuthorsTable
    extra = 0
        "profile",
        "affiliations",
Jean-Sébastien Caux's avatar
Jean-Sébastien Caux committed
class PublicationResourceInline(admin.TabularInline):
    model = PublicationResource
    extra = 0


class PubFracInline(admin.TabularInline):
    model = PubFrac
    list_display = ("organization", "publication", "fraction")
    autocomplete_fields = ["organization", "compensated_by"]
@admin.register(Publication)
class PublicationAdmin(admin.ModelAdmin):
    exclude = ["cf_citation", "cf_author_affiliation_indices_list"]
    search_fields = ["title", "author_list", "doi_label"]
        "title",
        "author_list",
        "in_issue",
        "doi_string",
        "publication_date",
        "status",
    ]
    date_hierarchy = "publication_date"
    list_filter = ["in_issue"]
Jean-Sébastien Caux's avatar
Jean-Sébastien Caux committed
    inlines = [
        AuthorsInline,
        ReferenceInline,
Jean-Sébastien Caux's avatar
Jean-Sébastien Caux committed
        PublicationResourceInline,
    ]
        "in_journal",
        "in_issue",
        "accepted_submission",
        "grants",
        "funders_generic",
        "topics",
class PublicationProxyMetadata(Publication):
    search_fields = ["title", "author_list", "doi_label"]
        "title",
        "author_list",
        "in_issue",
        "doi_string",
        "publication_date",
        "status",
    ]
        verbose_name = "Publication metadata"
        verbose_name_plural = "Publication metadata"
@admin.register(PublicationProxyMetadata)
class PublicationProxyMetadataAdmin(admin.ModelAdmin):
Jean-Sébastien Caux's avatar
Jean-Sébastien Caux committed
    fields = ["metadata", "metadata_xml", "metadata_DOAJ"]
    search_fields = ["title", "author_list", "doi_label"]
        "title",
        "author_list",
        "in_issue",
        "doi_string",
        "publication_date",
        "status",
    ]
@admin.register(Deposit)
class DepositAdmin(admin.ModelAdmin):
    list_display = (
        "publication",
        "timestamp",
        "doi_batch_id",
        "deposition_date",
    )
    readonly_fields = (
        "publication",
        "doi_batch_id",
        "metadata_xml",
        "deposition_date",
    )
    actions = None

    def message_user(self, request, *args):
        return messages.warning(request, "Sorry, Deposits are readonly.")

    def has_add_permission(self, *args):
        return False

    def has_delete_permission(self, *args):
        return False

@admin.register(DOAJDeposit)
class DOAJDepositAdmin(admin.ModelAdmin):
    autocomplete_fields = [
admin.site.register(GenericDOIDeposit)
@admin.register(PublicationUpdate)
class PublicationUpdateAdmin(admin.ModelAdmin):
    autocomplete_fields = [