From 22aaba00b54cda25ae83da9af89412ad4c1e3fdb Mon Sep 17 00:00:00 2001 From: Martin Paul Eve Date: Tue, 3 Dec 2024 14:43:09 +0000 Subject: [PATCH] Add logic to add, remove, and view CRediT records --- src/core/models.py | 28 +++++++++++++++++++++------- src/submission/models.py | 31 +++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 7 deletions(-) diff --git a/src/core/models.py b/src/core/models.py index 51aa74595..a95d03c69 100644 --- a/src/core/models.py +++ b/src/core/models.py @@ -598,7 +598,17 @@ def snapshot_self(self, article, force_update=True): credit_record.frozen_author = fa credit_record.save() + def credits(self, article): + """ + Returns the CRediT records for this user on a given article + """ + return submission_models.CreditRecord.objects.filter(article=article, + author=self) + def add_credit(self, credit_role_text, article): + """ + Adds a CRediT role to the article for this user + """ record, _ = ( submission_models.CreditRecord.objects.get_or_create( article=article, author=self, role=credit_role_text) @@ -607,14 +617,18 @@ def add_credit(self, credit_role_text, article): return record def remove_credit(self, credit_role_text, article): - record, _ = ( - submission_models.CreditRecord.objects.get_or_create( - article=article, author=self, role=credit_role_text) - ) - - record.delete() + """ + Removes a CRediT role from the article for this user + """ + try: + record, _ = ( + submission_models.CreditRecord.objects.get( + article=article, author=self, role=credit_role_text) + ) - return record + record.delete() + except submission_models.CreditRecord.DoesNotExist: + pass def frozen_author(self, article): try: diff --git a/src/submission/models.py b/src/submission/models.py index 7c2ea4b12..01acf6e88 100755 --- a/src/submission/models.py +++ b/src/submission/models.py @@ -2071,6 +2071,37 @@ class Meta: def __str__(self): return self.full_name() + def credits(self, article): + """ + Returns all the credit records for this frozen author on a given article + """ + return CreditRecord.objects.filter(article=article, frozen_author=self) + + def add_credit(self, credit_role_text, article): + """ + Adds a credit role to the article for this frozen author + """ + record, _ = ( + CreditRecord.objects.get_or_create( + article=article, frozen_author=self, role=credit_role_text) + ) + + return record + + def remove_credit(self, credit_role_text, article): + """ + Removes a credit role from the article for this frozen author + """ + try: + record, _ = ( + CreditRecord.objects.get( + article=article, frozen_author=self, role=credit_role_text) + ) + + record.delete() + except CreditRecord.DoesNotExist: + pass + def full_name(self): if self.is_corporate: return self.corporate_name