From 23caa23d9da22df5e3d3ddaca80ffb43d828444a Mon Sep 17 00:00:00 2001
From: George Katsikas <giorgakis.katsikas@gmail.com>
Date: Mon, 30 Sep 2024 17:44:41 +0200
Subject: [PATCH] anonymize reports of unpublished submissions

---
 .../commands/anonymize_reports_long_term.py   | 33 ++++++++++++++-----
 1 file changed, 25 insertions(+), 8 deletions(-)

diff --git a/scipost_django/submissions/management/commands/anonymize_reports_long_term.py b/scipost_django/submissions/management/commands/anonymize_reports_long_term.py
index 4111c8b8f..f82906193 100644
--- a/scipost_django/submissions/management/commands/anonymize_reports_long_term.py
+++ b/scipost_django/submissions/management/commands/anonymize_reports_long_term.py
@@ -8,14 +8,17 @@ import os
 from django.contrib.contenttypes.models import ContentType
 from django.core.management import BaseCommand
 from django.core.serializers import serialize
-from django.db.models import Q, Exists, OuterRef, Subquery
+from django.db.models import F, Q, Case, Exists, OuterRef, Subquery, When
 from django.utils import timezone
 
 from common.utils.text import shift_month
 from journals.models.publication import Publication
 from mails.models import MailLog, MailLogRelation
+from submissions.constants import EIC_REC_REJECT
+from submissions.models.decision import EditorialDecision
 from submissions.models.referee_invitation import RefereeInvitation
 from submissions.models.report import AnonymizedReportContributor, Report
+from submissions.models.submission import Submission
 
 
 class Command(BaseCommand):
@@ -71,14 +74,28 @@ class Command(BaseCommand):
             report_anonymization_backup_filename = f"anonymized_reports_for_publications_before_{three_months_ago.strftime('%Y-%m-%d')}.json"
 
             reports_to_anonymize = reports_to_anonymize.annotate(
-                publication_date=Subquery(
-                    Publication.objects.filter(
-                        accepted_submission__thread_hash=OuterRef(
-                            "submission__thread_hash"
-                        )
-                    ).values("publication_date")[:1]
+                processing_date=Case(
+                    When(
+                        submission__status=Submission.REJECTED,
+                        then=Subquery(
+                            EditorialDecision.objects.filter(
+                                submission=OuterRef("submission"),
+                            ).values("taken_on")[:1]
+                        ),
+                    ),
+                    When(
+                        submission__status=Submission.WITHDRAWN,
+                        then=F("submission__latest_activity"),
+                    ),
+                    default=Subquery(
+                        Publication.objects.filter(
+                            accepted_submission__thread_hash=OuterRef(
+                                "submission__thread_hash"
+                            )
+                        ).values("publication_date")[:1]
+                    ),
                 )
-            ).filter(publication_date__lte=three_months_ago)
+            ).filter(processing_date__lte=three_months_ago)
 
             if limit := kwargs.get("limit", 0):
                 reports_to_anonymize = reports_to_anonymize[:limit]
-- 
GitLab