Coverage for src / mesh / models / crud.py: 73%
56 statements
« prev ^ index » next coverage.py v7.13.1, created at 2026-08-11 09:47 +0000
« prev ^ index » next coverage.py v7.13.1, created at 2026-08-11 09:47 +0000
1from typing import TYPE_CHECKING
3from django.utils import timezone
4from django.utils.translation import gettext_lazy as _
5from ptf.external.fetch_metadata import fetch_article
7from mesh.models.orm.review_models import Review
8from mesh.models.orm.submission_models import (
9 Submission,
10 SubmissionAuthor,
11 SubmissionLog,
12 SubmissionVersion,
13)
14from mesh.views.utils import send_review_request_email
16if TYPE_CHECKING:
17 from mesh.views.forms.review_forms import ReviewCreateForm
20def create_submission(
21 user, name="", abstract="", preprint_id="", date: timezone.datetime | None = None
22):
23 article_data = None
24 if preprint_id != "":
25 article_data = fetch_article(preprint_id, with_bib=False)
26 if not article_data:
27 raise ValueError(f"Couldn't fetch Article with preprint_id: {preprint_id}")
29 name = article_data.title_html
30 if len(article_data.abstracts) > 0:
31 abstract = article_data.abstracts[0]["value"]
33 submission = Submission(name=name, abstract=abstract, author_agreement=False)
34 submission._user = user
36 version = SubmissionVersion(submission=submission)
38 # Date override (for import)
39 if date:
40 submission.override_saved_date(
41 date_created=date,
42 date_last_modified=date,
43 created_by_user=user,
44 last_modified_by_user=user,
45 )
46 version.override_saved_date(
47 date_created=date,
48 date_last_modified=date,
49 created_by_user=user,
50 last_modified_by_user=user,
51 )
52 else:
53 date = timezone.now()
55 submission.save()
56 version.save()
58 if article_data is not None:
59 for contrib in article_data.contributors:
60 author = SubmissionAuthor(
61 submission=submission,
62 first_name=contrib["first_name"],
63 last_name=contrib["last_name"],
64 email=contrib["email"],
65 corresponding=contrib["corresponding"],
66 )
67 author.save()
69 SubmissionLog.add_message(
70 submission,
71 content=_("Creation of the submission"),
72 content_en="Creation of the submission",
73 user=user,
74 significant=True,
75 date=date,
76 )
78 submission.refresh_from_db()
79 return submission
82def send_review_request(
83 request,
84 reviewer,
85 version: SubmissionVersion,
86 form: "ReviewCreateForm",
87 date=None,
88 # editor, reviewer, version: SubmissionVersion, form: "ReviewCreateForm", date=None
89):
90 """Creates a review request and send email to reviewer"""
91 review = create_review_request(
92 # editor=editor
93 editor=request.user,
94 reviewer=reviewer,
95 version=version,
96 review=form.save(commit=False),
97 date=date,
98 )
100 is_quick_review = form.cleaned_data["quick"]
101 if is_quick_review:
102 form.instance.request_email = form.cleaned_data["quick_request_email"]
104 email_subject = (
105 form.cleaned_data["quick_request_email_subject"]
106 if is_quick_review
107 else form.cleaned_data["request_email_subject"]
108 )
109 email_content = (
110 form.cleaned_data["quick_request_email"]
111 if is_quick_review
112 else form.cleaned_data["request_email"]
113 )
115 send_review_request_email(review, email_content, email_subject)
117 if date:
118 review.override_saved_date(
119 date_created=date,
120 date_last_modified=date,
121 created_by_user=request.user,
122 last_modified_by_user=request.user,
123 # created_by_user=editor,
124 # last_modified_by_user=editor,
125 )
126 review.save()
128 SubmissionLog.add_message(
129 review.version.submission,
130 content=_("Referee request sent to") + f" {reviewer}",
131 content_en=f"Referee request sent to {reviewer}",
132 user=request.user,
133 # user=editor,
134 significant=True,
135 date=date,
136 )
137 return review
140# TODO : Rework send_review_request and create_review_request
141def create_review_request(
142 editor,
143 reviewer,
144 version: SubmissionVersion,
145 date: timezone.datetime | None = None,
146 review: Review | None = None,
147 **kwargs,
148):
149 """Creates a review request"""
150 if not review:
151 review = Review(version=version, reviewer=reviewer, **kwargs)
152 else:
153 review.version = version
154 review.reviewer = reviewer
155 review._user = editor
156 if date:
157 review.override_saved_date(
158 date_created=date,
159 date_last_modified=date,
160 created_by_user=editor,
161 last_modified_by_user=editor,
162 )
163 review.save()
165 SubmissionLog.add_message(
166 review.version.submission,
167 content=_("Created referee request to") + f" {reviewer}",
168 content_en=f"Created referee request to {reviewer}",
169 user=editor,
170 significant=True,
171 date=date,
172 )
174 return review