Coverage for src / mesh / models / crud.py: 73%
56 statements
« prev ^ index » next coverage.py v7.13.1, created at 2026-05-04 12:41 +0000
« prev ^ index » next coverage.py v7.13.1, created at 2026-05-04 12:41 +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(
116 review, email_content, email_subject, review.version.submission.get_absolute_url()
117 )
119 if date:
120 review.override_saved_date(
121 date_created=date,
122 date_last_modified=date,
123 created_by_user=request.user,
124 last_modified_by_user=request.user,
125 # created_by_user=editor,
126 # last_modified_by_user=editor,
127 )
128 review.save()
130 SubmissionLog.add_message(
131 review.version.submission,
132 content=_("Referee request sent to") + f" {reviewer}",
133 content_en=f"Referee request sent to {reviewer}",
134 user=request.user,
135 # user=editor,
136 significant=True,
137 date=date,
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