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

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 

8 

9 

10class ApplicationEditorAcceptRejectNotify(EventConsumer): 

11 ID = "application:editor:acceptreject:notify" 

12 

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] 

18 

19 @classmethod 

20 def consume(cls, event): 

21 app_source = event.context.get("application") 

22 

23 application = consumer_utils.parse_application(app_source) 

24 

25 if application.application_type != constants.APPLICATION_TYPE_NEW_APPLICATION: 

26 return None 

27 

28 if not application.editor_group: 

29 return None 

30 

31 eg = models.EditorGroup.pull_by_key("name", application.editor_group) 

32 if not eg: 

33 return None 

34 

35 if not eg.editor: 

36 return None 

37 

38 acc = models.Account.pull(eg.editor) 

39 if acc.has_role(constants.ROLE_ADMIN): 

40 return None 

41 

42 # ~~-> Notifications:Service ~~ 

43 svc = DOAJ.notificationsService() 

44 

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 ) 

53 

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) 

59 

60 svc.notify(notification) 

61 return notification