Coverage for portality / events / consumers / application_assed_acceptreject_notify.py: 97%
32 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 ApplicationAssedAcceptRejectNotify(EventConsumer):
11 ID = "application:assed: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:
29 return None
31 acc = models.Account.pull(application.editor)
32 if acc.has_role(constants.ROLE_EDITOR) or acc.has_role(constants.ROLE_ADMIN):
33 return None
35 # ~~-> Notifications:Service ~~
36 svc = DOAJ.notificationsService()
38 notification = models.Notification()
39 notification.who = application.editor
40 notification.created_by = cls.ID
41 notification.classification = constants.NOTIFICATION_CLASSIFICATION_STATUS_CHANGE
42 notification.long = svc.long_notification(cls.ID).format(
43 application_title=application.bibjson().title,
44 decision=application.application_status
45 )
47 notification.short = svc.short_notification(cls.ID).format(
48 issns=application.bibjson().issns_as_text(),
49 decision=application.application_status
50 )
51 notification.action = url_for("editor.application", application_id=application.id)
53 svc.notify(notification)
54 return notification