Coverage for portality / events / consumers / application_editor_acceptreject_notify.py: 89%
37 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-05-04 09:41 +0100
« prev ^ index » next coverage.py v7.13.5, created at 2026-05-04 09:41 +0100
1# ~~ApplicationAssedInProgressNotify:Consumer~~
2from portality.events import consumer_utils
3from portality.util import url_for
4from portality.events.consumer import EventConsumer
5from portality import constants
6from portality import models
7from portality.bll import DOAJ
10class ApplicationEditorAcceptRejectNotify(EventConsumer):
11 ID = "application:editor:acceptreject:notify"
13 @classmethod
14 def should_consume(cls, event):
15 return event.id == constants.EVENT_APPLICATION_STATUS and \
16 event.context.get("application") is not None and \
17 event.context.get("new_status") in [constants.APPLICATION_STATUS_ACCEPTED, constants.APPLICATION_STATUS_REJECTED]
19 @classmethod
20 def consume(cls, event):
21 app_source = event.context.get("application")
23 application = consumer_utils.parse_application(app_source)
25 if application.application_type != constants.APPLICATION_TYPE_NEW_APPLICATION:
26 return None
28 if not application.editor_group:
29 return None
31 eg = models.EditorGroup.pull_by_key("name", application.editor_group)
32 if not eg:
33 return None
35 if not eg.editor:
36 return None
38 acc = models.Account.pull(eg.editor)
39 if acc.has_role(constants.ROLE_ADMIN):
40 return None
42 # ~~-> Notifications:Service ~~
43 svc = DOAJ.notificationsService()
45 notification = models.Notification()
46 notification.who = eg.editor
47 notification.created_by = cls.ID
48 notification.classification = constants.NOTIFICATION_CLASSIFICATION_STATUS_CHANGE
49 notification.long = svc.long_notification(cls.ID).format(
50 application_title=application.bibjson().title,
51 decision=application.application_status
52 )
54 notification.short = svc.short_notification(cls.ID).format(
55 issns=application.bibjson().issns_as_text(),
56 decision=application.application_status
57 )
58 notification.action = url_for("editor.application", application_id=application.id)
60 svc.notify(notification)
61 return notification