Coverage for src / mesh / models / roles / journal_manager.py: 97%
29 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 ClassVar
3from django.db.models import QuerySet, Value
4from django.utils.translation import gettext as _
5from opentelemetry import trace
7from mesh.models.orm.submission_models import Submission, SubmissionState
8from mesh.models.orm.user_models import User
9from mesh.models.roles.editor import Editor
11tracer = trace.get_tracer(__name__)
14class JournalManager(Editor):
15 """
16 Journal manager role.
17 """
19 _CODE: ClassVar[str] = "journal_manager"
20 _NAME: ClassVar[str] = _("Journal manager")
21 _ICON_CLASS: ClassVar[str] = "fa-newspaper"
22 _SUBMISSION_LIST_TITLE: ClassVar[str] = _("All submissions")
24 @tracer.start_as_current_span("JournalManager.__init__")
25 def __init__(self, user: User) -> None:
26 super().__init__(user)
27 self.submissions_queryset = Submission.objects.all().exclude(created_by=self.user)
29 def _get_is_active(self):
30 return self.user.journal_manager
32 def get_submissions(self):
33 return (
34 self._annotate_submission_query(self.submissions_queryset)
35 .annotate(user_is_editor=Value(True))
36 .exclude(state=SubmissionState.OPENED.value)
37 )
39 def get_managed_users(self) -> QuerySet[User]:
40 """
41 Can impersonate anyone except admin users.
42 """
43 return (
44 User.objects.exclude(pk=self.user.pk)
45 .exclude(is_superuser=True)
46 .exclude(journal_manager=True)
47 )
49 def can_edit_journal_sections(self) -> bool:
50 return True
52 def can_access_shortcut_actions(self) -> bool:
53 return True
55 def can_impersonate(self):
56 return True