Newer
Older
__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)"
__license__ = "AGPL v3"
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,
AutogeneratedFileContentTemplate,
PublicationResource,
from finances.models import PubFrac
from scipost.models import Contributor
from submissions.models import Submission
class SubmissionTemplateInline(admin.TabularInline):
model = SubmissionTemplate
extra = 0
class AutogeneratedFileContentTemplateInline(admin.TabularInline):
model = AutogeneratedFileContentTemplate
extra = 0
class JournalAdmin(admin.ModelAdmin):
search_fields = ["name"]
list_display = ["__str__", "doi_string", "active"]
inlines = [
SubmissionTemplateInline,
# 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)
class VolumeAdmin(admin.ModelAdmin):
list_display = ["__str__", "doi_string"]
class IssueAdmin(admin.ModelAdmin):
list_display = ["__str__", "doi_string"]
"in_journal__name",
"in_volume__in_journal__name",
"doi_label",
class ReferenceInline(admin.TabularInline):
model = Reference
class AuthorsInline(admin.TabularInline):
model = PublicationAuthorsTable
extra = 0
autocomplete_fields = [
"profile",
"affiliations",
class PublicationResourceInline(admin.TabularInline):
model = PublicationResource
extra = 0
class PubFracInline(admin.TabularInline):
model = PubFrac
list_display = ("organization", "publication", "fraction")
autocomplete_fields = ["organization", "compensated_by"]
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"]
PubFracInline,
autocomplete_fields = [
"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",
]
class Meta:
proxy = True
verbose_name = "Publication metadata"
verbose_name_plural = "Publication metadata"
class PublicationProxyMetadataAdmin(admin.ModelAdmin):
fields = ["metadata", "metadata_xml", "metadata_DOAJ"]
search_fields = ["title", "author_list", "doi_label"]
"title",
"author_list",
"in_issue",
"doi_string",
"publication_date",
"status",
]
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
class DOAJDepositAdmin(admin.ModelAdmin):
autocomplete_fields = [
admin.site.register(GenericDOIDeposit)
class PublicationUpdateAdmin(admin.ModelAdmin):
autocomplete_fields = [