Coverage for src / mesh / models / crud.py: 73%
56 statements
« prev ^ index » next coverage.py v7.13.1, created at 2026-10-22 07:20 +0000
« prev ^ index » next coverage.py v7.13.1, created at 2026-10-22 07:20 +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)
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 html_class="success-log",
77 )
79 submission.refresh_from_db()
80 return submission
83def send_review_request(
84 request,
85 reviewer,
86 version: SubmissionVersion,
87 form: "ReviewCreateForm",
88 date=None,
89 # editor, reviewer, version: SubmissionVersion, form: "ReviewCreateForm", date=None
90):
91 """Creates a review request and send email to reviewer"""
92 review = create_review_request(
93 # editor=editor
94 editor=request.user,
95 reviewer=reviewer,
96 version=version,
97 review=form.save(commit=False),
98 date=date,
99 )
101 is_quick_review = form.cleaned_data["quick"]
102 if is_quick_review:
103 form.instance.request_email = form.cleaned_data["quick_request_email"]
105 email_subject = (
106 form.cleaned_data["quick_request_email_subject"]
107 if is_quick_review
108 else form.cleaned_data["request_email_subject"]
109 )
110 email_content = (
111 form.cleaned_data["quick_request_email"]
112 if is_quick_review
113 else form.cleaned_data["request_email"]
114 )
116 send_review_request_email(review, email_content, email_subject)
118 if date:
119 review.override_saved_date(
120 date_created=date,
121 date_last_modified=date,
122 created_by_user=request.user,
123 last_modified_by_user=request.user,
124 # created_by_user=editor,
125 # last_modified_by_user=editor,
126 )
127 review.save()
129 SubmissionLog.add_message(
130 review.version.submission,
131 content=_("Referee request sent to") + f" {reviewer}",
132 content_en=f"Referee request sent to {reviewer}",
133 user=request.user,
134 # user=editor,
135 significant=True,
136 date=date,
137 html_class="info-log",
138 )
139 return review
142# TODO : Rework send_review_request and create_review_request
143def create_review_request(
144 editor,
145 reviewer,
146 version: SubmissionVersion,
147 date: timezone.datetime | None = None,
148 review: Review | None = None,
149 **kwargs,
150):
151 """Creates a review request"""
152 if not review:
153 review = Review(version=version, reviewer=reviewer, **kwargs)
154 else:
155 review.version = version
156 review.reviewer = reviewer
157 review._user = editor
158 if date:
159 review.override_saved_date(
160 date_created=date,
161 date_last_modified=date,
162 created_by_user=editor,
163 last_modified_by_user=editor,
164 )
165 review.save()
167 SubmissionLog.add_message(
168 review.version.submission,
169 content=_("Created referee request to") + f" {reviewer}",
170 content_en=f"Created referee request to {reviewer}",
171 user=editor,
172 significant=True,
173 date=date,
174 )
176 return review