SciPost Code Repository

Skip to content
Snippets Groups Projects
Commit b98d576c authored by Jean-Sébastien Caux's avatar Jean-Sébastien Caux
Browse files

Add `finances.PubFrac` model (to succeed `journals.OrgPubFraction`)

parent 745ffbf7
No related branches found
No related tags found
No related merge requests found
...@@ -8,6 +8,7 @@ from .models import ( ...@@ -8,6 +8,7 @@ from .models import (
Subsidy, Subsidy,
SubsidyPayment, SubsidyPayment,
SubsidyAttachment, SubsidyAttachment,
PubFrac,
WorkLog, WorkLog,
PeriodicReportType, PeriodicReportType,
PeriodicReport, PeriodicReport,
...@@ -62,13 +63,35 @@ class SubsidyAttachmentAdmin(admin.ModelAdmin): ...@@ -62,13 +63,35 @@ class SubsidyAttachmentAdmin(admin.ModelAdmin):
@admin.register(PubFrac)
class PubFracAdmin(admin.ModelAdmin):
list_display = [
"organization",
"doi_label_display",
"fraction",
]
autocomplete_fields = [
"organization",
"publication",
]
search_fields = [
"publication__doi_label",
"organization__name",
"organization__name_original",
"organization__acronym",
]
@admin.display(description='doi label')
def doi_label_display(self, obj):
return (obj.publication.doi_label)
@admin.register(WorkLog) @admin.register(WorkLog)
class WorkLogAdmin(admin.ModelAdmin): class WorkLogAdmin(admin.ModelAdmin):
autocomplete_fields = ["user"] autocomplete_fields = ["user"]
admin.site.register(PeriodicReportType) admin.site.register(PeriodicReportType)
admin.site.register(PeriodicReport) admin.site.register(PeriodicReport)
# Generated by Django 3.2.18 on 2024-03-14 15:58
from decimal import Decimal
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('journals', '0128_populate_submission_object_types'),
('organizations', '0021_enable_unaccent'),
('finances', '0031_alter_subsidyattachment_attachment'),
]
operations = [
migrations.CreateModel(
name='PubFrac',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('fraction', models.DecimalField(decimal_places=3, default=Decimal('0.000'), max_digits=4)),
('organization', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='pubfracs', to='organizations.organization')),
('publication', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='pubfracs', to='journals.publication')),
],
options={
'unique_together': {('organization', 'publication')},
},
),
]
# Generated by Django 3.2.18 on 2024-03-14 15:59
from django.db import migrations
def populate_pubfracs(apps, schema_editor):
OrgPubFraction = apps.get_model("journals.OrgPubFraction")
PubFrac = apps.get_model("finances.PubFrac")
# Copy all data from OrgPubFraction to the new PubFrac
for opf in OrgPubFraction.objects.all():
pubfrac = PubFrac(
organization=opf.organization,
publication=opf.publication,
fraction=opf.fraction)
pubfrac.save()
class Migration(migrations.Migration):
dependencies = [
('finances', '0032_pubfrac'),
]
operations = [
migrations.RunPython(
populate_pubfracs,
reverse_code=migrations.RunPython.noop,
)
]
...@@ -8,6 +8,8 @@ from .periodic_report import ( ...@@ -8,6 +8,8 @@ from .periodic_report import (
PeriodicReport, PeriodicReport,
) )
from .pubfrac import PubFrac
from .subsidy import Subsidy from .subsidy import Subsidy
from .subsidy_payment import SubsidyPayment from .subsidy_payment import SubsidyPayment
......
__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)"
__license__ = "AGPL v3"
from decimal import Decimal
from django.db import models
class PubFrac(models.Model):
"""
A fraction of a given Publication related to an Organization, for expenditure redistribution.
Fractions for a given Publication should sum up to one.
This data is used to compile publicly-displayed information on Organizations
as well as to set suggested contributions from sponsoring Organizations.
"""
organization = models.ForeignKey(
"organizations.Organization",
on_delete=models.CASCADE,
related_name="pubfracs",
blank=True,
null=True,
)
publication = models.ForeignKey(
"journals.Publication", on_delete=models.CASCADE, related_name="pubfracs"
)
fraction = models.DecimalField(
max_digits=4, decimal_places=3, default=Decimal("0.000")
)
class Meta:
unique_together = (("organization", "publication"),)
@property
def value(self):
return int(self.fraction * self.publication.get_journal().cost_per_publication(
self.publication.publication_date.year
))
...@@ -22,6 +22,7 @@ from journals.models import ( ...@@ -22,6 +22,7 @@ from journals.models import (
PublicationResource, PublicationResource,
) )
from finances.models import PubFrac
from scipost.models import Contributor from scipost.models import Contributor
from submissions.models import Submission from submissions.models import Submission
...@@ -94,6 +95,14 @@ class OrgPubFractionInline(admin.TabularInline): ...@@ -94,6 +95,14 @@ class OrgPubFractionInline(admin.TabularInline):
] ]
class PubFracInline(admin.TabularInline):
model = PubFrac
list_display = ("organization", "publication", "fraction")
autocomplete_fields = [
"organization",
]
@admin.register(Publication) @admin.register(Publication)
class PublicationAdmin(admin.ModelAdmin): class PublicationAdmin(admin.ModelAdmin):
exclude = ["cf_citation", "cf_author_affiliation_indices_list"] exclude = ["cf_citation", "cf_author_affiliation_indices_list"]
...@@ -112,6 +121,7 @@ class PublicationAdmin(admin.ModelAdmin): ...@@ -112,6 +121,7 @@ class PublicationAdmin(admin.ModelAdmin):
AuthorsInline, AuthorsInline,
ReferenceInline, ReferenceInline,
OrgPubFractionInline, OrgPubFractionInline,
PubFracInline,
PublicationResourceInline, PublicationResourceInline,
] ]
autocomplete_fields = [ autocomplete_fields = [
...@@ -202,5 +212,3 @@ class PublicationUpdateAdmin(admin.ModelAdmin): ...@@ -202,5 +212,3 @@ class PublicationUpdateAdmin(admin.ModelAdmin):
autocomplete_fields = [ autocomplete_fields = [
"publication", "publication",
] ]
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment